前言:
本文不包含CB链分析,只是单纯的漏洞序列化和反序列化的超详细分析。
漏洞分析:
序列化过程:
1.调用convertPrincipalsToBytes方法并传递数组类型的实例accountPrincipals
2.调用serialize实现方法进行序列化
3.调用encrypt方法传递实例对象并进行AES加密
4.调用get方法获取key
5.Get方法返回encryptionCipherKey
6.encryptionCipherKey通过set方法初始化成员变量
7.获取默认key传递给setEncryptionCipherKey再赋值给成员方法,最后由get方法返回key
8.调用子类中的rememberSerializedIdentit获取EAS加密后的数据
9.最后进行base64编码
反序列化过程:
1. getRememberedPrincipals调用getRememberedSerializedIdentity传递SubjectContext实例
2.getRememberedSerializedIdentity调用decode方法进行base64解码返回decode
3.返回一个byte类型实例
4.调用convertBytesToPrincipals方法传递bytes
5.convertBytesToPrincipals先调用decrypt方法传递bytes
6.通过decrypt方法进行AES解密
7.获取key
8.convertBytesToPrincipals调用deserialize方法传递bytes
9.最后调用readObject方法进行反序列化
结论:
1.根本原因是AES加密的过程中使用了默认的密钥
2.序列化过程为:序列化 -> AES加密 -> Base64解密
3.反序列化过程为:Base64解密 -> AES解密 -> 反序列化
漏洞利用:
URLDNS链:
urldns链测试漏洞是否存在 断点调试之后可以看到在此处进行反序列化调用readObject方法实际上是调用hashmap里边的readObject发起dns请求 -84 -19 0 5 → 十六进制为AC ED 00 05,这是Java序列化流的魔数标识 106 97 118 97 46 117 116 105 108 46 72 97 115 104 77 97 112 → "java.util.HashMap5.利用成功:
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...