好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

74cms逻辑漏洞导致二次SQL注入变为普通SQL注入 -

进行用户注册,然后抓取数据并且分析此文件:

 

http://localhost/74cms_utf8/upload/plus/ajax_user.php

 

发送post数据包为:

 

username=m'&password=111111&member_type=2&email=m%40163测试数据&time=1401769527951&act=do_reg

 

如图所示:

 

分析代码下:

 

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注入,危害还是比较大

查看更多关于74cms逻辑漏洞导致二次SQL注入变为普通SQL注入 -的详细内容...

  阅读:58次