知识点:
WEB-INF/web.xml泄露
参考:RoarCTF2019 easy Java_zydbk123456的博客-优快云博客
WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。WEB-INF主要包含一下文件或目录:
-
/WEB-INF/web.xml
:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。 -
/WEB-INF/classes/
:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中 -
/WEB-INF/lib/
:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件 -
/WEB-INF/src/
:源码目录,按照包名结构放置各个java文件。 -
/WEB-INF/database.properties
:数据库配置文件
漏洞成因:
通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞检测以及利用方法:
通过找到web.xml文件,推断class文件的路径,最后得到class文件,再通过反编译class文件,得到网站源码。
找web.xml:
直接请求
/WEB-INF/web.xml
或者更换为POST请求
这道题查看下方help,
打开help.docx结果没有什么有用的信息,不过我们可以判断这里是有文件包含漏洞的,这里需要找到合适文件。题目名已经告诉我们,这里可能和Java有关。这里就要用到Java web的有关知识了,这里需要了解一下Java web的文件结构:
src/main/java: 这个目录一般是存放web项目的Java源文件的
src/main/resource: 这个目录一般是存放相关的配置文件
src/main/webapp: 这个目录一般是和web应用相关的
webapp下的文件目录是容易出现安全问题的
/WEB-INF/web.xml: Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则
/WEB-INF/classes/:含了站点所有用的 class 文件(即编译后的Java文件),包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
通过post请求下载web.xml文件 payload:Download?filename=/WEB-INF/web.xml
可以看到有个servlet(运行在web服务器或应用服务器上的程序)为FlagController,这个是可能有flag的类,存放于com.wm.ctf包下。那么尝试下载这个类。构造payload:Download?filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
直接这样是不行,因为无法get请求。需要在Download页面下post请求传
filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
下载后的文件打开就是有一个编码,解开就是flag