struts2漏洞中關於動態方法呼叫的一點思考

2021-08-06 04:34:47 字數 2196 閱讀 4852

struts2框架是乙個比較容易出問題的框架,我第一次正兒八經接觸這塊的漏洞是在陶大師給我了乙個下文中場景2的站點開始,當時一點也不懂,自己搭了乙個站點除錯和學習了下,現在把自己掌握的一小塊知識跟大家分享下。

其中包括了在s2-032,s2-045,s2-046測試中容易疏忽的一種利用場景。

struts2動態呼叫的時候

分為三種

1.指定method呼叫方式

這種情況下不需要開啟dmi,屬於直接在配置檔案struts.xml.中配置對應action的method

如下測試

2:感嘆號!呼叫(dmi開啟)

對比前面的一種乙個method寫乙個的方法,當方法比較多的時候,struts檔案會大**

採用dmi呼叫,可以通過action!method.action的方式來呼叫,我們前面說的比較容易出問題的地方也在這裡

此時在**的頁面裡面,鏈結的url格式也是這樣,例如:

所以無論是人工測試還是掃瞄器爬蟲,我們都無法直接抽取出真正的action入口頁面。

在struts2 032測試中,也包括其他的struts漏洞,掃瞄器還有其他滲透工具習慣於去直接在action頁面直接字尾poc

來進行對應struts2漏洞的驗證,但是針對上述的這種呼叫方式,這樣來驗證的方式是無效的。

請看下面的測試結果:

這樣情況下,系統會執行正常的功能流程,而不會觸發**執行,但是這個站點真的不能利用了嗎?可以

下面我通過除錯具體的流程來看下為什麼會出現這樣的情況:

當我們直接在執行類似student!add.action?method:payload,時候

但是這個漏洞真正要被觸發是在invocation裡面,是要通過proxy去執行時候才會觸發,當我們第一次分割以後,

這裡我們可以看到,經過parseactionname,method變成了student!add.action中的動態方法add,所以從這塊開始就跟我們構造的利用**沒有半毛錢關係了,所以我們字尾在後面的利用**不會被執行了

之前在北分學習時候和還有在045和046的客戶反饋中,我們確實遇到了這樣的情況,就是客戶只是用action加我們的poc去驗證,但是沒有驗證出來漏洞,但是看版本確實又在受影響的版本範圍,這時候,我們去看這個鏈結的特點,就是這樣通過嘆號(!)來呼叫動態方法的鏈結特點。這時候只要我們去還原出真正的action入口,把動態方法切割掉,再次利用,通過除錯我們可以看到此時method就會變成我們真正想要執行的東西。

這樣的頁面一般通過爬蟲是無法抽取出真正的action入口的,需要在爬蟲裡面自己加規則變化,掃瞄器這邊可以看下是否有這種漏洞。

第三種:就是萬用字元呼叫,struts2是不推薦用感嘆號動態呼叫的,所以萬用字元形式反而是比較推薦和常用的一種呼叫方式,因為它使用起來非常的簡單,前面是*甚至可以寫*_*,後面通過 來匹配,本來這種方法是不需要開啟dmi的,但是因為之前的版本裡面這個是預設開啟的,所以這塊也會有**執行的問題。

就寫了這麼多了,對於這快只是了解了這麼多,如果有不對的地方,請大家不吝賜教,感謝陶大師對我的幫助。

Struts2萬用字元 Struts2動態方法呼叫

形式一 呼叫相同action中的不同方法 login.jsp error.jsp welcome.jsp 其中表示式的值name屬性值中第乙個 的值。如果使用者請求的url為loginaction.action,則呼叫jcuckoo.loginregistaction中的login方法 如果使用者請...

發現 Struts2的漏洞

struts2的最新漏洞 17年3,6日apache struts2被曝存在遠端命令執行漏洞。官方評為 高危,該漏洞是由於使用基於jakarta外掛程式的檔案上傳功能的條件下,惡意使用者可以通過修改http請求頭中的content type值來觸發漏洞,進而執行任意系統命令,導致系統被黑客入侵。具體...

Struts2漏洞利用例項

struts2漏洞利用例項 如果存在struts2漏洞的站,administrator許可權,但是無法加管理組,內網,shell訪問500.1.struts2 漏洞原理 struts2是乙個框架,他在處理action的時候,呼叫底層的getter setter來處理http的引數,將每乙個http的...