刚学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内容为
