H0e4a0r1t的小屋

反序列化

字数统计: 555阅读时长: 2 min
2019/05/09 Share

1.常见反序列化

  • JBoss
  • Weblogic
  • WebSphere
  • Jenkins

2.乌云案例分析

1. Java 反序列化

服务器 –》脚本检测利用

2. JBoss

JMXInvokerServlet接口

3. websphere

8880端口

3.漏洞挖掘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.漏洞触发场景
在java编写的web应用与web服务器间java通常会发送大量的序列化对象例如以下场景:
  1)HTTP请求中的参数,cookies以及Parameters。
  2)RMI协议,被广泛使用的RMI协议完全基于序列化
  4)JMX 同样用于处理序列化对象
  5)自定义协议 用来接收与发送原始的java对象

2. 漏洞挖掘
  (1)确定反序列化输入点
    首先应找出readObject方法调用,在找到之后进行下一步的注入操作。一般可以通过以下方法进行查找:
     1)源码审计:寻找可以利用的“靶点”,即确定调用反序列化函数readObject的调用地点。
   2)对该应用进行网络行为抓包,寻找序列化数据,如wireshark,tcpdump等
    注: java序列化的数据一般会以标记(ac ed 00 05)开头,base64编码后的特征为rO0AB。
  (2)再考察应用的Class Path中是否包含Apache Commons Collections库
  (3)生成反序列化的payload
  (4)提交我们的payload数据

Java反序列化漏洞的挖掘

1、黑盒流量分析:

在Java反序列化传送的包中,一般有两种传送方式,在TCP报文中,一般二进制流方式传输,在HTTP报文中,则大多以base64传输。因而在流量中有一些特征:

(1)TCP:必有aced0005,这个16进制流基本上也意味者java反序列化的开始;

(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果;

以上意味着存在Java反序列化,可尝试构造payload进行攻击。

2、黑盒java的RMI:

rmi是java的一种远程对象(类)调用的服务端,默认于1099端口,基予socket通信,该通信实现远程调用完全基于序列化以及反序列化。

3、白盒代码审计:

(1)观察实现了Serializable接口的类是否存在问题。

(2)观察重写了readObject方法的函数逻辑是否存在问题。

CATALOG
  1. 1. 1.常见反序列化
  2. 2. 2.乌云案例分析
    1. 2.1. 1. Java 反序列化
    2. 2.2. 2. JBoss
    3. 2.3. 3. websphere
  3. 3. 3.漏洞挖掘