漏洞概要
关注数(24)
关注此漏洞
漏洞标题:PHPEMS注入一处(Demo测试成功)
提交时间:2014-11-06 15:02
修复时间:2015-02-04 15:04
公开时间:2015-02-04 15:04
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:15
漏洞状态:未联系到厂商或者厂商积极忽略
Tags标签:
无
漏洞详情
披露状态:
2014-11-06: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-02-04: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
过滤不严导致的注入
详细说明:
看文件 /app/exam/app.php 272-286行
跟下getCookie 文件/lib/ev.cls.php 81-85行
从cookie中获得参数,这里的knowsid没有处理。
然后带进了这个函数getRandQuestionListByKnowid
跟一下/app/exam/cls/question.cls.php 94-105行
注意$data,$knowid没有单引号也没有处理。
再看下makeSelect /lib/sql.cls.php 214-282
直接生成select语句的sql,没有处理。这样就导致了注入的产生。
漏洞证明:
利用过程:
首先注册个用户,开一个新考场
是免费的测试的。
然后访问
http://127.0.0.1/phpems_zxmnks_v2.2/index.php?exam-app-lesson-ajax-questions&number=1
抓包
输入poc
NULL) union select concat(username,0x23,userpassword) from x2_user #(
那么如果数据库前缀改掉了肿么办?
http://127.0.0.1/phpems_zxmnks_v2.2/index.php?exam-app-lesson-ajax-questions&number=
直接访问这个就行了,把number参数的值去掉,就可以爆出前缀,。。。。
官网的前缀不是x2,改掉了。通过这个方法爆出,然后上个图。
还有问题的函数
getRandQuestionRowsListByKnowid
getKnowsBySubjectAndAreaid
getRandQuestionList
没在仔细看了,睡觉了。。
修复方案:
对cookie传递进来的参数过滤,对带入sql查询的变量从函数上过滤。
漏洞回应