m0_67392126
于 2022-08-24 03:04:51 發(fā)布
在一些面試以及攻防對抗中,總會碰到shiro反序列化的命令執(zhí)行,于是給大家簡單的科普一下。
Apache Shiro是一款開源企業(yè)常見JAVA安全框架,此框架提供了RememberMe的功能,這是很多網(wǎng)站都具備的,例如你登錄了一個網(wǎng)站,關(guān)掉瀏覽器再次打開網(wǎng)站時,網(wǎng)站會保留你的登錄信息情況。
首先,shiro處理cookie的流程是先得到rememberMe的cookie值,然后Base64解碼,AES加密,最后反序列化。但是AES的密鑰是硬編碼的,攻擊者可以通過構(gòu)造payload造成反序列化的命令執(zhí)行。
硬編碼:硬編碼是將數(shù)據(jù)直接嵌入到程序或其他可執(zhí)行對象的源代碼中的軟件開發(fā)實踐,與從外部獲取數(shù)據(jù)或在運行時生成數(shù)據(jù)不同。 硬編碼數(shù)據(jù)通常只能通過編輯源代碼和重新編譯可執(zhí)行文件來修改,盡管可以使用調(diào)試器或十六進(jìn)制編輯器在內(nèi)存或磁盤上進(jìn)行更改。
shiro反序列化的影響范圍是1.2.4及以下版本,同時特征十分明顯,使用burp抓包后響應(yīng)包中會有一條set-cookie
Set-Cookie:rememberMe=deleteMe;
1
看到這行語句后直接扔到ShiroScan里跑一下
下載地址:https://github.com/sv3nbeast/ShiroScan
結(jié)合dnslog.cn即可確定是否存在shiro反序列化漏洞
漏洞修復(fù)建議:此處參考https://blog.csdn.net/weixin_44578334/article/details/105821240
先說結(jié)論:無論是否升級shiro到1.2.5及以上,如果shiro的rememberMe功能的AES密鑰一旦泄露,就會導(dǎo)致反序列化漏洞。 升級shiro到1.2.5及以上如果在配置里配置了密鑰,那么請一定不要使用網(wǎng)上的密鑰,一定不要!!請自己base64一個AES的密鑰,或者利用官方提供的方法生成 總結(jié) 標(biāo)準(zhǔn)的AES的加解密只跟私鑰key和加密模式有關(guān),和IV無關(guān)。 為了證明反序列化漏洞確實存在,可以利用ysoserial的URLDNS gadget進(jìn)行驗證,但是默認(rèn)會有TTL緩存機制,默認(rèn)10s。 反序列化導(dǎo)致的命令執(zhí)行需要兩個點: readObject()反序列化的內(nèi)容可控。 應(yīng)用引用的jar包中存在可命令執(zhí)行的Gadget Chain。
————————————————