官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
文章主要面向准备入门的同学。咱们先来看一则小故事,指挥官的发报方式被敌台截获;敌台第一次伪装发报(载体),收报人员执行炸毁商场(执行函数),结果上了新闻(显式回显)。指挥官更换方式为卫星通讯(载体),但是因为有内鬼敌人分析(开源代码分析)传输方式,敌台第二次伪装发报(载体),收信人偷走机密资料(执行函数),送到指定地点(隐式回显)。
通过故事咱们能看出,反序列化RCE分为三个部分,载体、执行函数、回显。载体包括协议、加解密算法等等。执行函数则是通过载体后的反序列化函数。回显则分为显式回显和隐式回显,显式回显例如Webshell、HTTP response body、图片隐写,隐式回显例如RMI、URLDNS等等。
在了解基本构成之后,按照顺序找相关的部分,然后拼起来即可。
载体:
载体普遍存在一些大型JAVA项目之中,例如Apache Software Foundation的一堆。
执行函数:
在执行函数阶段,反序列普遍使用ObjectInputStream,当然如果你看到名字不同,可能是经过封装和继承。
FileInputStream fis = new FileInputStream("object");
ObjectInputStream ois = new ObjectInputStream(fis);
显示回显:
1、文件写入
2、HTTP response body
3、延迟
4、HTTP banner
5、图片隐写
...
隐式回显:
1、RMI
2、URLDNS
3、LADP
4、JNDI
...
载体部和执行函数分参考大佬们的文章,回显参考https://github.com/wh1t3p1g/ysomap/tree/master/core/src/main/java/ysomap/core/payload。
剩下的步骤,看代码!读代码!理解代码!
文章之中咱们一起来看JAVA反序列化的基础知识,从小故事作为引导,理解反序列化的基本流程。在这里非常感谢@turing,他教会我一些很重要的道理以及理解方式,通过他才真正了解到热爱是所有的理由和答案。
后续关于一些分析漏洞文章,基本围绕着基本结构,尽请关注。