一文学会shiro反序列化

admin 2024年12月9日23:38:38评论18 views字数 1288阅读4分17秒阅读模式
目录
一文学会shiro反序列化
漏洞原理
Apache shiro是一个广泛使用的Java应用程序安全框架,其中的会话管理和权限控制功能,依赖于序列化、AES加密和base64编码,shiro反序列化漏洞主要利用Java反序列化机制以及不安全的AES加密密钥。
shiro使用rememberMe功能来保存用户会话状态,也就是常见的请求包中携带的rememberMe=,这个值是将用户的身份信息,首先经过序列化,然后经过AES加密,最后经过base64编码得出。存储在浏览器cookie中,之后的请求都携带这个值,服务端接受这个值,通过相反的流程得到用户身份信息,依此判断用户身份。
因此若能猜到AES加密的key,则可以构造恶意的序列化数据,用该key进行AES加密,然后base64编码,通过cookie将恶意数据发给服务端,当服务端反序列化恶意数据时,触发恶意代码执行。
shiro反序列化工具原理
1、key爆破功能
2、利用链爆破功能
3、回显方式爆破功能
工具首先从key字典中一个一个获取key,然后根据key生成恶意cookie数据,发送数据到服务端,根据响应判断key是否正确。得到key之后,利用不同的链生成恶意序列化数据,通过key加密等操作后发送到服务端,根据响应判断利用链是否可用。
对于不同框架和环境,回显方式不一致,例如Tomcat和Spring环境,有不同的回显方式,可通过人为指定,或者在无法判断的情况下使用工具进行爆破。
推荐工具:ShiroExploit、ShiroAttack
利用链
1、JDK原生类
java.util.HashMap这个类可以用来构造一条向dnslog发送请求的链,使用这条链可以用来爆破key值。
2、CC链
CC链(Commons Collections)是执行恶意命令常用的链,可以使用反序列化工具ysoserial构造恶意的序列化数据
java -jar ysoserial.jarCommonsCollections2"touch /etc/passwd" > payload.ser
3、第三方库
对于不同的框架和环境,可以使用不同的第三方库来构造利用链,例如spring环境下,可以使用SpelExpression、HandlerAdapter等类构造利用链。
漏洞复现
1、访问目标网站,在响应头发现rememberMe=deleteMe,基本上就是shiro框架
一文学会shiro反序列化
2、使用工具ShiroAttack爆破key,填写目标地址,指定请求方法,点击爆破密钥
一文学会shiro反序列化
3、点击爆破利用链及回显
一文学会shiro反序列化
4、选择命令执行模块,执行命令
一文学会shiro反序列化
waf绕过
1、有些waf可能会限制cookie中rememberMe的长度,由于恶意的数据长度较长,可能会被拦截,可通过在cookie写加载器,请求体写payload的方式绕过,通过加载器加载请求体中的payload。
修复建议
1、修改默认密钥,使用随机生成的强加密密钥
2、升级shiro到最新版本
3、谨慎使用rememberMe,非必要不使用
4、限制反序列化类
END
查看更多精彩内容,关注simple学安全

原文始发于微信公众号(simple学安全):一文学会shiro反序列化

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月9日23:38:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一文学会shiro反序列化https://cn-sec.com/archives/3476415.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息