反序列化漏洞检测流程

(1)反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储或DB存储等业务场景。因此审计过程中重点关注这些功能板块。
(2)找到对应的功能模块后,检索源码中对反序列化函数的调用来静态寻找反序列化的输入点,如以下函数

  1. ObjectInputStream.readObject
  2. ObjectInputStream.readUnshared
  3. XMLDecoder.readObject
  4. Yaml.load
  5. XStream.fromXML
  6. ObjectMapper.readValue
  7. JSON.parseObject

(3)确定了反序列化输入点后,查看应用的Class Path中是否包含Apache Commons Collections等危险库(ysoserial所支持的其他库亦可),若不包含危险库,则查看一些涉及命令、代码执行的代码区域,防止程序员代码不严谨,导致bug。若包含危险库,则使用ysoserial进行攻击。

常见危险库

  1. commons-fileupload 1.3.1
  2. commons-io 2.4
  3. commons-collections 3.1
  4. commons-logging 1.2
  5. commons-beanutils 1.9.2
  6. org.slf4j:slf4j-api 1.7.21
  7. com.mchange:mchange-commons-java 0.2.11
  8. org.apache.commons:commons-collections 4.0
  9. com.mchange:c3p0 0.9.5.2
  10. org.beanshell:bsh 2.0b5
  11. org.codehaus.groovy:groovy 2.3.9
  12. org.springframework:spring-aop 4.1.4.RELEASE

作者:HC_DU
链接:https://www.jianshu.com/p/1c2e8aa874d0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。