【WEB-INF web.xml&java-web&Servlet】RoarCTF2019 Easy Java WriteUp

本文最后更新于:2021年8月18日下午1点46分

前置知识:

WEB-INF/web.xml泄露

img

java-web工程目录结构

img

Servlet访问URL映射配置

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

1
2
3
4
5
6
7
8
<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>

解题:

题目环境:http://4d5a3bbb-6ec0-4b4b-a6cf-fd04c54717aa.node3.buuoj.cn/

拿到题目,是一个登录框,习惯性尝试密码爆破,看看能不能爆出密码

image-20210524193652689

直接爆出账号为admin,密码为admin888

image-20210524193843207

查看响应包,显示flag并不在这

image-20210524193903773

点击主页面下的一个help超链接

image-20210524193951001

以为存在文件包含漏洞,于是尝试替换文件名,但是没有成功

尝试将get请求修改为post请求

image-20210524194302215

得到一个help.docx文档,文档内容如下

image-20210524194320324

根据前置知识的WEB-INF/web.xml泄露,尝试利用post请求web.xml

image-20210524194501619

根据前置知识**Servlet访问URL映射配置**

有包含flagServlet的完整类名为com.wm.ctf.FlagController

1
2
3
4
5
6
7
8
<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>

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

也就是说:对post请求中的file变量请求WEB-INF/classes/com/wm/ctf/FlagController.class

得到一串类似于经过base加密后的flag字符串: ZmxhZ3swMTM0ZDNhNS05OWNiLTQ4NzktYWU1Mi1lY2Y5MWE4MTg1YTh9Cg==

image-20210524194921099

经过base64解密后得到flag为:flag{0134d3a5-99cb-4879-ae52-ecf91a8185a8}

image-20210524195130258

参考文章: