java反序列化的攻击场景:
1.远程服务接收了不被信任的反序列化数据
2.classpath中存在序列化所需要的类
3.序列化的类中存在危险函数
从上面3点看出和以前看php的反序列化攻击场景从宏观上看差不多,首先是接收数据时反序列化了不被信任的序列化数据,php的当然是固定的unserialize函数,而java中通过调用对象输入流的readObject函数来进行反序列化,unserialize只需要从该入口向下找,而java则通常是先找到readObject函数再向上找对象是否可控
magic callback:
相对于php反序列化要执行的__destruct、__wakeup,java主要包括:
比如这里就以反序列化导致文件删除为例子进行了一个说明,这个也是个cve,ysoserialize中也有该攻击链
一些常用的防御方法:
1.在反序列化的过程中验证输入流,如果反序列化所需要的类在黑名单中,则停止序列化的过程,weblogic就用的是加黑名单的方式保护应用
2.jep290机制
即输入的反序列化数据进行过滤,官方从8u121,7u13,6u141分别支持了这个JEP,http://openjdk.java.net/jeps/290官方说明文档
3.rasp技术
4.java agent
上面讲了一些防御方法,然后就提出要找更基础的攻击向量
JDBC connection
这里要利用的主要有两点:
JDBC连接数据库的URL可控,在其中要添加连接数据库时的配置(自动反序列化)autoDeserialize和queryInterceptors
第二个参数是用于触发漏洞,利用本地gadget触发
https://paper.seebug.org/454/ jep
https://xz.aliyun.com/t/1631 jep