fastjson反序列化漏洞_Fastjson反序列化漏洞的检测和利⽤Fastjson是Alibaba开发的,Java语⾔编写的⾼性能Json库,号称Java语⾔中最快的Json库。针对Fastjson反序列化漏洞原理分析和Poc ⽹上以及有很多,本⽂仅分享如何快速发现Fastjson反序列化漏洞,⽅便安全测试⼈员开展安全测试及修补漏洞。
⽂章中涉及到的⼯具和源码仅供安全测试和学习使⽤,否则后果⾃负,与作者⽆关。
0x01 反序列化原理
Fastjson反序列化,即在代码中调⽤JSON.parse(jsonstr)、JSON.parseObject(jsonstr)等⽅法的时候,实现将json格式的字符转换为⼀个Java对象的过程。在进⾏反序列化的时候会根据json中的字段⾃动调⽤对象的set和get⽅法,当⽅法中存在可利⽤点的时候就会造成安全漏洞。具体分析原理分析⽹上已经很多了,这⾥不做太多阐述。
0x02 Poc分析
在⼤多数应⽤场景中,Fastjson仅仅作为第三⽅依赖嵌⼊到项⽬中,这种形式导致了Poc⽆法控制Web容器的Response对象(当然针对特定容器可以,使⽤TemplatesImpl加载字节码,这个poc⽐较⽼了,基本都补了)实现命令执⾏结果回显输出。⽬前⽹上公开的Poc基本都是利⽤JNDI注⼊,使⽤JNDI注⼊实现代码执⾏的Poc都有⼀个弱点,就是需要⽬标服务器能够出互联⽹。
0x03 漏洞检测
fastjson怎么用
对于需要出⽹才能利⽤的漏洞检测,最简便的⽅法就是使⽤Dnslog,通过域名的dns解析⽇志判断漏洞是否存在。数据传输流程如下图,其中第⼆步就要求服务器能出⽹才能实现漏洞检测。
0x04 漏洞利⽤
关于漏洞利⽤,对于JNDI注⼊这种Poc,会使⽤到RmiServer或者LdapServer,常规的利⽤⽅式就是向服务器发送Payload,反弹⼀个shell到攻击机上,反弹shell与操作系统相关,所以发送的payload是不⼀样的。然⽽⽬标服务器能出⽹,我们可以通过Socket这种⽅式将java代码在⽬标服务器执⾏操作系统命
令结果返回回来。这种利⽤⽅式要求⽬标服务器能够访问到攻击机上启动的相关服务,具体数据流如下:
1.1.发送Payload让⽬标访问攻击机的Ldap服务1.
2.访问Ldap服务2.1.Ldap服务要求⽬标服务器访问HTTP服务获取需要执⾏的代码2.2.访问HTTP服务
3.1.发送需要执⾏综合利⽤
Fastjson的利⽤⼯具和Poc Github上有很多了,这⾥⽤了个⼯具来改造
通过Dnslog检查漏洞是否存在
漏洞利⽤,通过在⽬标服务器上加载类反弹⼀个shell回来,这⾥的shell是java写的仿shell,就是在服务器上执⾏命令,然后通过socket回
传命令结果,所以与操作系统⽆关,输⼊exit退出shell。
⼯具参数
这⾥记录⼏个注意的点:
1. 在使⽤TemplatesImpl相关Poc中加载的字节码需要继承AbstractTranslet类
2. Socket进⾏数据传输的过程中,不会⾃动判断数据传输是否结束,需要在发送数据前先发送数据的长度,⽅便判断需要读取多少字节
的数据
3. 发送的Paylaod以Post⽅式提交,存在两种可能,⼀个是Post body都是Json字符串,⼀个是Post的某个参数是Json字符串
4. 攻击机和⽬标服务器之间需要互访,也就意味着攻击机器最好在互联⽹上,对于攻击机Vps是私有地址,需要映射对应服务的端⼝到
公有地址上
代码已经放到github,地址:
参考⽂献:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。