参考:
简介
本次分享为 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*
![image-20220907154630778](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216160743443-1205267622.png)
sc *_jsp$*
常见的连接工具的 webshell ,都会使用 在 webshell 落地文件内创建内部类,而内部类都是通过 $ 标识的 。
![image-20221129163239251](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216160818605-1052928837.png)
classloader -l
通过 classloader 去看 org.apache.jasper.servlet.JasperLoader
加载的类,落地的 webshell jsp 文件都是通过该类去加载
![image-20221130005737494](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216160858235-1150822946.png)
使用 copagent,其输出的 allLoadedClasses.txt 按照加载顺序展示出jvm 加载的所有类。此处可以从下往上依次去找
![image-20221130072032237](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216160932667-1808714142.png)
工具使用技巧
arthas
![image-20221130074320862](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216161001249-692443605.png)
在jvm中导出可疑类,导出路径默认为 pwd 路径。
jad --source-only org.apache.jsp.webshells.behinder_002d4_0_4_jsp > z.java
![image-20220907160932897](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216161028672-253404940.png)
若排查到了内存马,通常的处置方式是进行重启业务服务器,而 arthas 提供了redefine 、retransform 机制,可以直接对 jvm 中的类进行替换。
![image-20221130074026890](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216161051413-1406522219.png)
copagent
copagent 可以扫描jvm,导出可疑的字节码,并进行反编译。输出物中通常需要关注的有三个:
![image-20221130072656677](/i/l/?n=23&i=blog/1512048/202302/1512048-20230216161510213-1867144846.png)
-
result.txt 存放可疑类的扫描结果。
可以查看其扫描结果。
-
allLoadedClasses.txt 按照加载顺序 展示出 jvm 加载的所有类。
可以根据加载时间,定位一段时间后加载的所有类。
-
java 目录,输出所有可疑类的源码。
使用多种webshell查杀工具,对 java 目录下的webshell 进行查杀。