aspx、php、jsp內存馬使用
0x00 前言
前端時間看到asp的內存馬分析,上周又看到jsp內存馬技術文章,剛好團隊在帶新,就簡單總結一下三種語言的內存馬技術,不會有過多的代碼分析、技術解讀,以學習內存馬基本原理、會實戰利用為主。
0x01 jsp內存馬
從jsp開始談,我們要知道Servlet、Filter、Listener是什么?
Servlet(服務程序)是運行在Web請求和服務器上的應用程序之間的中間層,根據請求生成相應的返回信息提供給用戶。
Filter(過濾器)是對Servlet技術的一個強補充,其主要功能是在HttpServletRequest(請求)到達Servlet(中間件)之前,攔截、檢查、修改其內容;在HttpServletResponse(響應)到達客戶端之前,攔截、檢查、修改其內容。
Listener(監聽器)就是Application、Session和Request三大對象創建、銷毀或者往其中添加、修改、刪除屬性時自動執行代碼的功能組件,通過監聽器,可以自動觸發一些動作,比如監聽在線的用戶數量,統計網站訪問量、網站訪問監控等。
舉個例子來理解:Listener就是水表,我們的數據經過時會觸發計數,Filter就是水管上的開關,通過他的開關可控制數據流向哪里,Servlet就是水龍頭,打開廚房的水龍頭就是要洗菜,打開浴室的水龍頭就是要洗澡,這就是“根據請求生成相應的返回信息”。
因為某抓包工具原因,我們都知道jar運行時可以加“-javaagent”參數來控制jvm執行內容,不過java后來又出現了attach(附加)方式去動態修改運行中的程序,不了解java機制也沒關系,這兩種方式我們可以這樣理解:
javaagent理解為exe程序運行時設置參數,實現修改運行邏輯
attach理解為exe程序運行中修改內存值,實現修改運行邏輯
因此jsp內存馬就是attach+Servlet/Filter/Listener的方式,在Servlet/Filter/Listener三者的任意一個中動手腳即可實現
0x02 aspx、php內存馬
aspx內存馬有三種情況:Filter內存馬、Route內存馬、HttpListener內存馬,對應概念與jsp相同。
asp.net的web應用啟動后會自動運行全局的Filters和Routes組件,因此利用他們寫內存馬直接插入即可,與jsp不同的是,有時需要訪問一次上傳的文件去觸發內存寫入。
HttpListener區別較大,類似啟動一個簡單的Web Server,要System權限才行,可以端口復用,不會留下web日志記錄,比起webshell更適合用于權限維持的后門。
php內存馬我更愿意叫它不死馬,第一種情況是訪問文件,使用while一直寫文件(運行不停止當然內存一直占用),來達到“不死”的目的;第二種是使用file_get_contents加載遠程webshell代碼執行,配合unlink(__FILE__)刪除自身達到“shellcode不落地”的無文件落地運行目的。
0x03 關于內存馬使用
先看php一個標準的不死馬,內存駐留循環寫文件

查殺效果,當然是一抓一個準,比起免殺一句話,實際上不死馬更適合防護弱的目標搞權限維持

將字符串內容換為遠程url,對php不死馬進行變種,原先使用eval就是內存馬,改為使用system就可直接上線cs(powershell command)


查殺效果,比起前面明顯隱蔽性更高,更容易被網站管理員忽略

jsp內存馬推薦哥斯拉內置的,測試最新版v4.0.1-godzilla(有時出現進入shell失敗的情況,多試兩次就行),指定內存馬路徑名稱點擊run,提示ok表示成功,可以去瀏覽器訪問對應路徑

使用servlet管理功能可以看到存在我們指定的內存路徑

測試冰蝎Behinder_v3.0 Beta 9 fixed最新版,注入內存馬后自動連接,后面圖標與正常webshell有所不同,順便可以看到這些工具都支持流量代理轉發了

測試蟻劍內存馬插件As-Exploits(可以去插件市場下載或者下載后手動安裝
https://github.com/yzddmr6/As-Exploits),推薦去看看插件作者的幾篇aspx內存馬分析,這次使用Filter方式注入內存馬

使用內存馬管理功能,看看長什么樣

但是訪問報錯,測試無法利用,看來還是servlet方式穩定一些

最后測試3款工具對aspx內存馬的支持,冰蝎不支持aspx內存馬

而哥斯拉可以,就是不知道內存馬添到哪個路徑去了

而它隨帶幾個“土豆”漏洞提權挺實用的

蟻劍的插件也可以,并且能自定義路徑,點擊exploit后去瀏覽器訪問對應路徑無報錯
在網站目錄沒有新文件出現
查看日志文件,和插件作者分析的一樣,222.aspx訪問記錄只有一次,后續對其訪問無日志記錄

0x04 關于內存馬查殺
重啟服務均可使內存馬失效,當然也有不需要重啟的方式,就是去動態卸載。
本來想演示一下jsp和aspx的動態查殺,但是github找的兩個網頁訪問方式查殺文件運行都有錯,就算了。
對于php不死馬,進程更多是異常發現,在不重啟服務器的情況下,可以使用進程條件競爭的方式查殺,查殺循環時間小于木馬循環時間即可。
0x05 總結
因為服務器上一些查殺手段,或者云主機的定時掃描,普通webshell免殺難以持久,在實際項目中又沒有那么多時間去研究測試免殺,所以開始通過內存馬方式隱藏攻擊痕跡,不過一句話木馬依舊很實用,而比起寫內存馬,現在更愛直接反彈shell或cs上線的操作,直接從協議層面避開防御措施。