[RoarCTF 2019]Easy Java
考点
WEB-INF/web.xml泄露
解题
打开是一个登陆界面,根据题目这是一道java题,我们先寻找本页面的信息,除了login之外还有一个help,点击跳转
/Download?filename=help.docx
内容为
java.io.FileNotFoundException:{help.docx}
这里引入WEB-INF/web.xml泄露:
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请求
这里使用POST请求
http://93afad24-6b0b-4cc4-85ac-b07a8275c6c9.node4.buuoj.cn:81/Download
POST:
filename=/WEB-INF/web.xml
得到文件,里面有FlagController
<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
</servlet-mapping>
据此我们构造请求
http://93afad24-6b0b-4cc4-85ac-b07a8275c6c9.node4.buuoj.cn:81/Download
POST:
filename=WEB-INF/classes/com/wm/ctf/FlagController.class
得到文件,里面有一段base64编码,解码得到flag
参考链接:https://blog.csdn.net/wy_97/article/details/78165051