原题是一道Java文件上传的题目,首先通过上传文件,无法进行正常getshell,在下载处我们通过FUZZ得出任意文件读取漏洞:
1.jpg
通过查看不存在得文件得出该站点为docker容器+tomcat中间件+file_in_java站点:
2.jpg
Fuzz得出tomcat网站对应的服务器绝对路径。使用usr/local/apache进行fuzz测试:
3.jpg
测试对应的tomcat容器:
4.jpg
构造读取tomcat下的file_in_java配置文件:
http://xxxxxxxxxxxxxxxx.cloudgame2.ichunqiu.com:8080/file_in_java/DownloadServlet?filename=../../../../../../../../../../../../../../../../../../../../../../../usr/local/tomcat/webapps/file_in_java/WEB-INF/web.xml
5.jpg
利用思路一:下载对应的servlet类进行反编译分析源码。
http://xxxxxxxxxxxxxxxxxxxx.cloudgame1.ichunqiu.com:8080/file_in_java/DownloadServlet?filename=../../../../../../../../../../../../../../../../../../../../../../../usr/local/tomcat/webapps/file_in_java/WEB-INF/classes/cn/abc/servlet/UploadServlet.class
6.jpg
思路二:直接根据文件名fuzz得出对应的war包分析:
7.jpg
分析对应的uploadservlet下的上传方法,得出为上传的文件名前缀为excel-,后缀为xlsx。利用xlsx格式的xxe文件带外读取。
8.jpg
制作xlsx格式的XXE读取得出flag:flag{e5d65f91-abb8-4e8d-xxxxxxxxxxx}