1. 程式人生 > 其它 >vulhub-struct2-s2-005

vulhub-struct2-s2-005

0x00 漏洞原理

  s2-005漏洞的起源源於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的沙盒繞過方法,組成了S2-003。官方對003的修復方法是增加了安全模式(沙盒),S2-005在OGNL表示式中將安全模式關閉,又繞過了修復方法。整體過程如下:

  • S2-003 使用\u0023繞過s2對#的防禦
  • S2-003 後官方增加了安全模式(沙盒)
  • S2-005 使用OGNL表示式將沙盒關閉,繼續執行程式碼

0x01 影響版本

2.0.0 ~ 2.1.8.1

0x02 漏洞復現

環境 vulhub kali