漏洞概要
关注数(24)
关注此漏洞
漏洞标题:URP教务系统某处SQL注入
提交时间:2015-05-25 15:09
修复时间:2015-08-28 15:10
公开时间:2015-08-28 15:10
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:20
漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞
Tags标签:
无
漏洞详情
披露状态:
2015-05-25: 细节已通知厂商并且等待厂商处理中
2015-05-30: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-07-24: 细节向核心白帽子及相关领域专家公开
2015-08-03: 细节向普通白帽子公开
2015-08-13: 细节向实习白帽子公开
2015-08-28: 细节向公众公开
简要描述:
URP教务系统某处SQL注入,可脱裤
详细说明:
刚学j2ee,听过urp给钱多,我来试试。
看看servlet呗
com/runqian/report/input/UploadFile2DBServlet
反编译class得到java源码
UploadFile2DBServlet.java
第76行,从用户处取得了update参数。
然后第78行将update放入UpdateProp,创建一个新对象up,我们来看看UpdateProp是个什么类?
来看看他的析构函数
其实就是将update传入的参数先用\0拆分,然后用;拆分,放入数组_$22111中
然后返回这个数组。
然后我们继续看80-92行
主要就是对刚才那个数组的的各个键进行取值,比较。如果不符合要求就退出去。
然后来到106-132行
就是把刚才得到的各个值,进行取值,然后拼接,拼接成sql语句,最终放入
stmt.executeQuery(sql);
执行。
这其中并没有任何的过滤,于是造成sql注入。
漏洞证明:
构造表单
随便上传一个文件,上传时抓包
update填tbl=dual;keyValue=2;keyCol=1;updateValue=1;updateCol=1。
结果如图
此时是因为keyCol=1,1这个列索引不存在
此处直接在tbl处注入,把后面的东西注释掉就好了
因为开启了oracle报错。
那就简单了。
报错注入下
以爆数据库名为例
update内容为
然后注入出一条数据为例
udpate内容为
修复方案:
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2015-08-28 15:10
厂商回复:
漏洞Rank:4 (WooYun评价)
最新状态:
2015-08-28:系统不需要调用此文件进行业务处理,屏蔽此文件