Java 反序列化漏洞面试常见问题
1. Java 序列化与反序列化的函数?
在Java 原生的API 中:
操作 | 函数 |
---|---|
序列化 | ObjectOutputStream.writeObject() |
反序列化 | ObjectInputStream.readObject() |
2. Java 中常见命令执行函数有那些?
Runtime.getRuntime().exec(“wireshark”);
3. Java 反序列化漏洞利用方式有几种,涉及那些工具?
利用方式:
- RMI
- JNDI
工具:
- ysoserial
- marshalsec
- JNDI-Injection-Exploit
4. DNSLOG 用过么?
大多数反序列化漏洞造成RCE 攻击是没有回显的,利用dnslog 平台,在RCE 的时候构造DNS 请求,如果dnslog 平台能够收到DNS 请求,说明RCE 成功,也就验证了漏洞存在性。
5. Weblogic T3 的漏洞了解么?
T3 协议是WebLogic私有的协议,相比于JRMP协议多了如下的一些特性:
- 服务端可以持续追踪监控客户端是否存活(心跳机制),通常心跳的间隔为60秒,服务端在超过240秒未收到心跳即判定与客户端的连接丢失。
- 通过建立一次连接可以将全部数据包传输完成,优化了数据包大小和网络消耗。
Java 反序列化漏洞利用工具通过T3 协议与Weblogic 进行的通信,实现Weblogic RMI 调用过程,从而实现远程加载恶意类。
T3 协议有自己的流量特征。反序列化标志:T3 协议中每个反序列化数据包前面都带有fe 01 00 00,而后再加上Java 反序列化标志ac ed 00 05。序列化数据。
注意:Java 反序列化数据开头包含两字节的魔术数字,这两个字节始终为十六进制的0xac 0xed,接下来是两字节的版本号这里为0x00 0x05。在T3 协议的数据包中,在这个四个字节前还有四个字节 fe 01 00 00 。
参考文章:
6. 如何检测FastJson 漏洞是否存在,并且判断其版本?
可以使用BurpSuite 扩展FastjsonScan 进行漏洞检测。
7. Apache Shiro 550 和721 区别?
Shiro550 反序列化漏洞原理:
- 记住我的功能开启之后,会有Cookie 数据,Cookie 数据其实就是加密后的经过序列化的用户对象,也就是二进制字节流。
- 加密算法是AES 算法,算法很安全,但是秘钥是固定的,并且存储于源码中。
Shiro721 利用条件:
- AES 秘钥不在是固定的了,但是此秘钥可以被爆破
- 需要提供一个合法用户,再点击remember me ,成功登录之后,获取Cookie remember-me 的值。
参考链接: