### 简要描述:
74cms V3.4.20140530 逻辑漏洞导致二次sql注入变为普通sql注入
### 详细说明:
进行用户注册,然后抓取数据并且分析此文件:
http://localhost/74cms_utf8https://images.seebug.org/upload/plus/ajax_user.php
发送post数据包为:
username=m'&password=111111&member_type=2&email=m%40163.com&time=1401769527951&act=do_reg
如图所示:
[<img src="https://images.seebug.org/upload/201406/03140620e4c27517bd4a74adf3a727eafc9b2a37.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/03140620e4c27517bd4a74adf3a727eafc9b2a37.png)
分析代码下:
ajax_user.php(lines:90-96)
```
$register=user_register($username,$password,$member_type,$email);
if ($register>0)
{
$login_js=user_login($username,$password);
$mailconfig=get_cache('mailconfig');
if ($mailconfig['set_reg']=="1")
```
跟踪查看函数user_login 的文件fun_uer.php(lines:97-99)
```
if ($usinfo['password']==$pwd)
{
update_user_info($usinfo['uid'],true,true,$expire);
$login['qs_login']=get_member_url($usinfo['utype']);
$success=true;
```
跟踪查看update_user_info函数的文件fun_user.php(lines:130-139)
```
$user = get_user_inid($uid);
if (empty($user))
{
return false;
}
else
{
$_SESSION['uid'] = intval($user['uid']);
$_SESSION['username'] = $user['username'];
$_SESSION['utype']=intval($user['utype']);
}
```
发现此处被写入session的正是我们刚才写入数据库的那个username,此处根据uid从数据库取出来直接写入session,那么二次注入就出来了
在这个文件的(lines:185-190)
```
$setsqlarr['msgtoname']=$_SESSION['username'];
$setsqlarr['message']=$row['message'];
$setsqlarr['dateline']=$timestamp;
$setsqlarr['replytime']=$timestamp;
$setsqlarr['new']=1;
inserttable(table('pms'),$setsqlarr);
$log['loguid']=$_SESSION['uid'];
$log['pmid']=$row['spmid'];
inserttable(table('pms_sys_log'),$log);
```
可以看出来username实际上是用的session的值,故而当调用inserttable时就会导致sql注入,整个过程虽然复杂,但是其实转化为了一个最为普通的sql注入,危害还是比较大
### 漏洞证明:
[<img src="https://images.seebug.org/upload/201406/03141446d77b79ebdcbf67972c6b80b707ad9091.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/03141446d77b79ebdcbf67972c6b80b707ad9091.png)
暂无评论