BUUCTF在线评测-练习场-WebCTF习题[RoarCTF 2019]Easy Java1-flag获取、解析

解题思路

题目是JAVA,第一次做java的题啊...打开靶场

给了一个像sql注入的界面,但是其实是混淆视听的...

点击help,可以发现url还有报错界面

复制代码
/Download?filename=help.docx

java.io.FileNotFoundException:{help.docx}

这里url变成下载界面,并且接收了文件名的参数,报错显示是文件找不到。

这里比较明显提示的是文件包含漏洞了,参数名可控,就可以下载任意文件。

但是这题比较坑的地方来了,默认的help.docx其实是可以下载的,

拦截请求包、get请求改成POST,即可下载,下面是help的内容,没啥用:

这里贴一下JAVA的一些知识

WEB-INFJava Web 应用程序(遵循 Servlet 规范) 中一个极其重要且特殊的目录。它位于 Web 应用程序的根目录下(通常与你的 HTML 页面、图片等资源所在的目录同级),是 Servlet 容器(如 Tomcat, Jetty, WildFly 等)识别一个目录为有效 Web 应用程序的关键标志之一。

核心特性:

  1. 不可直接通过客户端访问: 这是 WEB-INF 目录最显著的特点。客户端(浏览器)无法通过 URL 直接访问 WEB-INF 及其子目录下的任何文件(.jsp, .xml, .class, .jar, .properties 等)。

    • 例如,如果你有一个 JSP 页面 securedPage.jsp 放在 /WEB-INF/ 下,用户尝试访问 http://yourserver.com/yourapp/WEB-INF/securedPage.jsp 会失败 。容器会返回 404 (Not Found) 或 403 (Forbidden) 错误。

    • 目的: 保护敏感的后台代码(Java 类)、配置文件、库文件以及不希望用户直接请求的视图页面(如 JSP)不被外部窥探或直接调用。

  2. 容器专有目录: WEB-INF 目录下的内容仅供 Servlet 容器内部使用。容器在部署和运行应用时,会从这个目录加载必要的类、库和配置信息。

WEB-INF 目录的标准结构及其内容:

一个典型的 WEB-INF 目录包含以下子目录和文件:

  1. /WEB-INF/web.xml (部署描述符 - Deployment Descriptor):

    • 作用: 这是 Web 应用的核心配置文件。它是一个 XML 文件,定义了应用的各种组件及其行为。

    • 配置内容 (传统方式,部分已被注解替代):

      • Servlet 声明和映射: 定义 Servlet 类,并将其映射到 URL 模式。

      • Filter 声明和映射: 定义过滤器及其拦截的 URL 模式。

      • Listener 声明: 定义生命周期监听器、属性监听器等。

      • 上下文参数: 定义应用级别的初始化参数 (<context-param>)。

      • 会话配置: 会话超时时间 (<session-config>)。

      • 欢迎文件列表: 指定当用户访问目录路径时默认加载的文件 (<welcome-file-list>)。

      • 错误页面映射: 指定特定 HTTP 错误码或异常类型对应的错误处理页面 (<error-page>)。

      • 安全约束: 配置认证、授权和传输保证 (<security-constraint>, <login-config>, <security-role>)。

      • MIME 类型映射: 扩展名到 MIME 类型的映射 (<mime-mapping>)。

    • 现代发展: Servlet 3.0+ 引入了注解(如 @WebServlet, @WebFilter, @WebListener),使得 web.xml 在很多场景下可以简化甚至省略(零配置)。但 web.xml 仍然用于定义那些无法用注解表达或需要覆盖注解的配置(如上下文参数、欢迎文件列表、错误页面、安全约束等),并且是兼容旧版本的标准方式。

  2. /WEB-INF/classes/ 目录:

    • 作用: 存放 Web 应用自身编译后的 Java 类文件(.class 文件)

    • 结构: 类文件必须按照其包结构 放置。例如,一个类 com.example.MyServlet 对应的 .class 文件路径应该是 /WEB-INF/classes/com/example/MyServlet.class

    • 加载: Servlet 容器的类加载器会优先从这个目录加载应用特定的类。这是放置你的 Servlet、Filter、Listener、POJO、工具类等编译后代码的地方。

  3. /WEB-INF/lib/ 目录:

    • 作用: 存放 Web 应用依赖的 第三方 Java 库文件(.jar 文件)

    • 加载: Servlet 容器的类加载器会自动加载此目录下的所有 JAR 包。这些 JAR 包中的类对 Web 应用可见。

    • 重要性: 这是管理项目依赖的主要位置(除了容器本身提供的库)。例如,你使用的数据库驱动(JDBC jar)、日志框架(Log4j2/SLF4J jar)、JSON 处理库(Jackson/Gson jar)、Servlet/JSP API(如果容器未提供或需要特定版本)等都应放在这里。

这里可以指导web.xml是比较重要的文件,那么我们尝试可以通过我们发现的任意文件下载漏洞去下载这里的文件

复制代码
/WEB-INF/web.xml

POST /Download?filename=/WEB-INF/web.xml HTTP/1.1
Host: 5e83d8ef-7814-42ee-9bb5-9a25b90a49f0.node5.buuoj.cn:81
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://5e83d8ef-7814-42ee-9bb5-9a25b90a49f0.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: JSESSIONID=5357A1CF9FF2B7F0C397185FC97DA6EB
Connection: close

返回了各种路由以及类的信息

这里可以看到最下面的那个类 是我们感兴趣的,因为有FLAG字眼出现了。

下面还定义了简易的路由访问,但是我们直接去访问/Flag会被拒绝访问。

还是得用任意文件下载,将类下载下来,这里需要用到上面说的类目录,保存了所有的类:

复制代码
/WEB-INF/classes/

然后根据com.wm.ctf.FlagController路由写一下目录即可:

复制代码
/WEB-INF/classes/com/wm/ctf/FlagController.class

POST /Download?filename=/WEB-INF/classes/com/wm/ctf/FlagController.class

在响应中可以发现base64编码的字符串

bash 复制代码
<ZmxhZ3s1ZWZjZTU1My0wNDJhLTRjZjItODBhZS0xOGZmNDBjZjg1NGR9Cg==

解码:

bash 复制代码
flag{5efce553-042a-4cf2-80ae-18ff40cf854d}

总结

一道基础的JAVA任意文件下载的题,流程比较简单,需要知道JAVA的一些基础知识,包括路由、类以及WEB-INF这个目录等等。但是GET改成POST那里不知道是为什么...

而且按照抓包去看的响应的base64编码复制不了,应该是乱码的原因,我看网上的WP的编码跟我很像,就去复制解码提交了一下,结果直接提示 提交的是别人的FLAG...行为已被记录。。我去密码的..

最后还是拦截包下载了一下类文件去复制解码提交的,坑啊....

相关推荐
用户84913717547161 小时前
JDK 17 实战系列(第4期):安全性与稳定性增强详解
java·后端·性能优化
自由的疯1 小时前
java程序员怎么从Python小白变成Python大拿?(三)
java·后端·trae
用户84913717547161 小时前
JustAuth实战系列(第4期):模板方法模式实战 - AuthDefaultRequest源码剖析
java·后端·架构
weixin_411191841 小时前
安卓Handler和Looper的学习记录
android·java
创创ccccc1 小时前
十三、抽象队列同步器AQS
java·并发编程·juc·aqs
鼠鼠我捏,要死了捏2 小时前
生产环境中JVM内存泄漏定位与解决实践
java·jvm·内存泄漏
小宋10212 小时前
pg序列实现字段的自增
java·数据库
Bruce_Liuxiaowei2 小时前
利用哥斯拉(Godzilla)进行文件上传漏洞渗透实战分析
网络·网络安全·php·哥斯拉
悦人楼3 小时前
深入理解Java集合框架:核心接口、实现类与实战选择
java·windows·python
Lazy Dave3 小时前
gmssl私钥文件格式
网络安全·ssl·openssl