题目名称

[RoarCTF 2019]Easy Java

本题考点:

  • Servlet 的访问流程
  • java web 工程目录结构

# 前置知识

1.WEB-INF/web.xml 信息泄露

img

2.java web 工程目录结构

img

3.servlet 访问 url 映射配置

由于客户端是通过 URL 地址访问 Web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 Servlet 程序映射到一个 URL 地址上,这个工作在 web.xml 文件中使用 <servlet> 元素和 < servlet-mapping > 元素完成。<servlet > 元素用于注册 Servlet,它包含有两个主要的子元素:<servlet-name > 和 < servlet-class>,分别用于设置 Servlet 的注册名称和 Servlet 的完整类名。一个 < servlet-mapping > 元素用于映射一个已注册的 Servlet 的一个对外访问路径,它包含有两个子元素:<servlet-name > 和 < url-pattern>,分别用于指定 Servlet 的注册名称和 Servlet 的对外访问路径。例如:

<servlet>
    <servlet-name>ServletDemo1</servlet-name>
    <servlet-class>cn.itcast.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletDemo1</servlet-name>
    <url-pattern>/ServletDemo1</url-pattern>
</servlet-mapping>

# 解题过程

打开网页发现是登陆界面,有一个链接 help。点击发现无内容,但是从 url 看出是包含,可能存在文件包含漏洞

img

为什么这里还是无法包含出 help 文件,尝试使用 post 提交,发现下载下了文件,但是打开没什么东西

# 源码泄露

通过 post 访问 web.xml

image-20210716123356122

这里看到 FlagController, 构造其的访问路径

由上面前置知识可知,通过 url 访问 Servlet 的方式是:
找到对应文件名,然后通过这个文件名找到对应的 servlet,再通过这个 servlet 的文件名,获取到其具体的 servlet 文件。因为这个是类中的文件,所以后缀要加.class

WEB-INF/classes/com/wm/ctf/FlagController.class

image-20210716123450458

观察有一段 base64 加密后的字符串,解密获得 flag

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

zeroc 微信支付

微信支付

zeroc 支付宝

支付宝

zeroc 贝宝

贝宝