前言
之所以写这篇文章,是因为最近在做题的时候,做到了一个有关java的题目。因为对Java Web方面的开发经验很少,所以在做这道题的时候,查了一些关于Java Web相关的知识。感觉以后说不定还会用到,就以这篇文章来总结一下。
关于WEB-INF/web.xml
在了解WEB-INF/web.xml泄露之前,我们先要知道,web.xml是一个什么样的文件,以及它的泄露会出现哪些问题。
咱们先来看看WEB-INF这个文件夹
WEB-INF主要包含以下内容:
- /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
- /WEB-INF/classes/:包含所有的 Servlet 类和其他类文件,类文件所在的目录结构与他们的包名称匹配。
- /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
- /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
- /WEB-INF/database.properties:数据库配置文件。
那么,在了解了web.xml这个文件内容之后,我们就可发现它里面所包含的信息就是敏感文件的分布情况。所以说只要我们有权限访问这个文件,我们就可以通过文件包含等手段进行敏感信息的获取。
WEB-INF/web.xml泄露及漏洞利用
WEB-INF/web.xml泄露的起因就是我们在使用网络架构的时候,对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。
下面用一道CTF的例题来具体观察(题目来源BUUCTF)
[RoarCTF 2019]Easy Java1
打开之后访问主页
看到可以点击help键,直接进去看看,发现有一个报错。
用burp抓包看一下,拿到下面的请求头。
看了网上的WP看到师傅们都说改用POST是正解,这样就可以拿到help了,所以改成POST,拿到help之后,发现并没有什么用。但是filename这个点可以进行文件包含,我们就可以尝试是否可以访问WEB-INF/web.xml。
可以看到的是,我们已经成功读取了WEB-INF/web.xml文件内容,并且看到了Flag的所在,由刚才我们所提到的WEB-INF下的文件夹分布我们知道,所有的class文件都被放在了classes文件夹下。
所以,改包重新发。
里面那个base64字符串解码之后就是flag。