Java利用技巧——Jetty Filter型內(nèi)存馬
0x00 前言
關(guān)于Tomcat Filter型內(nèi)存馬的介紹資料有很多,但是Jetty Filter型內(nèi)存馬的資料很少,本文將要參照Tomcat Filter型內(nèi)存馬的設(shè)計(jì)思路,介紹Jetty Filter型內(nèi)存馬的實(shí)現(xiàn)思路和細(xì)節(jié)。
0x01 簡(jiǎn)介
本文將要介紹以下內(nèi)容:
Jetty調(diào)試環(huán)境搭建
實(shí)現(xiàn)思路
實(shí)現(xiàn)代碼
Zimbra環(huán)境下的Filter型內(nèi)存馬
0x02 Jetty調(diào)試環(huán)境搭建
0x03 實(shí)現(xiàn)思路
相關(guān)參考資料:??https://github.com/feihong-cs/memShell/blob/master/src/main/java/com/memshell/jetty/FilterBasedWithoutRequest.java??https://blog.csdn.net/xdeclearn/article/details/125969653
參考資料1是通過JmxMBeanServer獲得webappclassloaer,進(jìn)而通過反射調(diào)用相關(guān)方法添加一個(gè)Filter
參考資料2是通過Thread獲得webappclassloaer,進(jìn)而通過反射調(diào)用相關(guān)方法添加Servlet型內(nèi)存馬的方法
我在實(shí)際測(cè)試過程中,發(fā)現(xiàn)通過JmxMBeanServer獲得webappclassloaer的方法不夠通用,尤其是無法在Zimbra環(huán)境下使用
因此,最終改為使用Thread獲得webappclassloaer,進(jìn)而通過反射調(diào)用相關(guān)方法添加Filter型內(nèi)存馬。
0x04 實(shí)現(xiàn)代碼
1.添加Filter
Jetty下可用的完整代碼如下:
2.枚舉Filter
(2)通過Thread獲得webappclassloaer,通過反射讀取_filters屬性來枚舉Filter
0x05 Zimbra環(huán)境下的Filter型內(nèi)存馬
在Zimbra環(huán)境下,思路同樣為使用Thread獲得webappclassloaer,進(jìn)而通過反射調(diào)用相關(guān)方法添加Filter型內(nèi)存馬
但是由于Zimbra存在多個(gè)名為WebAppClassLoader的線程,所以在添加Filter時(shí)需要修改判斷條件,避免提前退出,在實(shí)例代碼的基礎(chǔ)上直接修改即可
0x06 利用思路
Filter型內(nèi)存馬的優(yōu)點(diǎn)是不需要寫入文件,但是會(huì)在服務(wù)重啟時(shí)失效
0x07 小結(jié)
本文介紹了Jetty Filter型內(nèi)存馬的實(shí)現(xiàn)思路和細(xì)節(jié),給出了可供測(cè)試的代碼,分享了Zimbra環(huán)境的利用方法。