WEB-INF 目录结构

WEB-INF 是 Java 的 web 应用的安全目录,正常情况下客户端无法访问,只有服务端可以访问

  • /WEB-INF/web.xml

    Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则

  • /WEB-INF/classes/

    包含所有的 Servlet 类和其他类文件,类文件所在的目录结构与他们的包名称匹配

  • /WEB-INF/lib/

    存放 web 应用需要的各种 jar 文件

  • /WEB-INF/src/

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

  • /WEB-INF/database.properties

    数据库配置文件

  • /WEB-INF/tags/

    存放了自定义标签文件

WEB-INF 信息泄漏

WEB-INF/web.xml 泄露的起因是在使用网络架构的时候,对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致 web.xml 等文件能够被读取

读取的 web.xml 文件结构可能如下:

1
2
3
4
5
6
7
8
<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>
  • <servlet> 声明了一个 Servlet,其中

    • FlagController 是这个 Servlet 组件命名的标识符

    • com.vm.ctf.FlagController 是这个 Servlet 的实现类(全限定名)

  • <servlet-mapping>定义了客户端请求 URL 和 Servlet 的映射关系,其中

    • FlagController 是之前定义的 Servlet 的引用,表示将请求用该 Servlet 处理

    • /Flag 定义了客户端请求的路径,当客户端发送一个 HTTP 请求到 http:///Flag 时,这个请求会被 FlagController 处理

同样可以利用信息泄漏,读取该 Servlet 的类文件,形式如下

1
?filename=WEB-INF/classes/com/vm/ctf/FlagController.class