參考:
簡介
本次分享爲 java webshell 排查初級。拋磚引玉
java 獲取 web 權限的 shell,包括:
落地webshell:
- 普通一句話木馬
- 冰蟹、蟻劍、哥斯拉等 webshell 管理工具自帶 webshell
無文件 webshell:
- 動態註冊 servlet/filter/listener(使用 servlet-api 的具體實現)
- 動態註冊 interceptor/controller(使用框架如 spring/struts2)
- 動態註冊使用職責鏈設計模式的中間件、框架的實現(例如 Tomcat 的 Pipeline & Valve,Grizzly 的 FilterChain & Filter 等等)
- 使用 java agent 技術寫入字節碼。wsmemshell
排查方法:調試 jvm,因爲所有的 java 代碼都得加載到 jvm 中運行
用到的工具:
arthas Java診斷利器Arthas
copagent java 內存馬提取工具
java-memshell-scanner jsp 腳本,識別 filter 、servlet 型內存馬
D盾、河馬webshell 查殺、在線文件分析平臺、火眼金睛。
behinder 、godzilla 、 antsword 、wsmemshell
常見排查技巧
使用 arthas
直接使用 arthas 找所有的類即可,因爲 jsp 編譯過後的類名末尾都會帶上 jsp 後綴。
sc *_jsp*
sc *_jsp$*
常見的連接工具的 webshell ,都會使用 在 webshell 落地文件內創建內部類,而內部類都是通過 $ 標識的 。
classloader -l
通過 classloader 去看 org.apache.jasper.servlet.JasperLoader
加載的類,落地的 webshell jsp 文件都是通過該類去加載
使用 copagent,其輸出的 allLoadedClasses.txt 按照加載順序展示出jvm 加載的所有類。此處可以從下往上依次去找
工具使用技巧
arthas
在jvm中導出可疑類,導出路徑默認爲 pwd 路徑。
jad --source-only org.apache.jsp.webshells.behinder_002d4_0_4_jsp > z.java
若排查到了內存馬,通常的處置方式是進行重啓業務服務器,而 arthas 提供了redefine 、retransform 機制,可以直接對 jvm 中的類進行替換。
copagent
copagent 可以掃描jvm,導出可疑的字節碼,並進行反編譯。輸出物中通常需要關注的有三個:
-
result.txt 存放可疑類的掃描結果。
可以查看其掃描結果。
-
allLoadedClasses.txt 按照加載順序 展示出 jvm 加載的所有類。
可以根據加載時間,定位一段時間後加載的所有類。
-
java 目錄,輸出所有可疑類的源碼。
使用多種webshell查殺工具,對 java 目錄下的webshell 進行查殺。