原理
java的WEB-INF泄露
文件下载
解题过程
进入靶场是一个登录界面,查看页面原代码
发现help按钮是访问/Download?filename=help.docx
但是访问又会报错
试试用post请求访问,发现文件下载下来了,内容为:
这里就不会了,看了wp才知道是java源码泄露问题
WEB-INF是Java的WEB应用的安全目录,如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
Tomcat的WEB-INF目录,每个j2ee的web应用部署文件默认包含这个目录。
Nginx在映射静态文件时,把WEB-INF目录映射进去,而又没有做Nginx的相关安全配置(或Nginx自身一些缺陷影响)。从而导致通过Nginx访问到Tomcat的WEB-INF目录(请注意这里,是通过Nginx,而不是Tomcat访问到的,因为上面已经说到,Tomcat是禁止访问这个目录的。)。
WEB-INF 主要包含以下文件或目录:
WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应用组件配置及命名规则.
WEB-INF/database.properties : 数据库配置文件
WEB-INF/classes/ : 一般用来存放Java类文件(.class)
WEB-INF/lib/ : 用来存放打包好的库(.jar)
WEB-INF/src/ : 用来放源代码(.asp和.php等)
漏洞成因:
通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
漏洞检测以及利用方法:
通过找到web.xml文件,推断class文件的路径,最后得到class文件,再通过反编译class文件,得到网站源码。
找web.xml:
直接请求/WEB-INF/web.xml或者更换为POST请求
那么我们就用post请求来试试下载web.xml
用post请求/Download
filename=/WEB-INF/web.xml
再次请求下载这个class文件
文件内看到一串base64编码,解码后得到flag
参考文章:https://blog.csdn.net/lzu_lfl/article/details/129887663
https://blog.csdn.net/cosmoslin/article/details/121399045