第220-221天:应急响应篇&web内存马查杀&JVM分析&class提取&诊断反编译&日志定性

第220-221天:应急响应篇&web内存马查杀&JVM分析&class提取&诊断反编译&日志定性
Yatming的博客JAVA Web内存马-JVM分析&日志URL&内存查杀
脚本查杀tomcat-memshell-scanner.jsp
环境搭建的太烦了,复制的博客:
1 | https://blog.csdn.net/m0_60571842/article/details/142389679?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f9a1f02ec270cb378be3f3adb8a2d15f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=f9a1f02ec270cb378be3f3adb8a2d15f&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-142389679-null-null.nonecase&utm_term=%E8%93%9D%E9%98%9F%E6%8A%80%E8%83%BD-%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94&spm=1018.2226.3001.4450 |
部署java和tomcat的环境。
先上传一个普通的jsp后门,然后在使用哥斯拉在这里生成内存马,并且使用jsp脚本扫描内存马。
查杀java内存马:https://github.com/c0ny1/java-memshell-scanner
将这个脚本同样放到tomcat的网站目录就行。
这里就可以看到刚刚生成的内存马:
直接kill掉,发现就没有了:
这里在生成一个,然后重启tomcat看看是否存在?
答:同样是不会存在的
监控项目-arthas
项目地址:https://github.com/alibaba/arthas
1 | java -Dserver.port=8081 -jar arthas-tunnel-server-4.0.5-fatjar.jar --http-port 8888 --telnet-port 9999 |
查看URL路由(看Servlet内存马,Filter看不到)
1 | mbean | grep "name=/" |
sc查看JVM 已加载的类信息
1 | sc *.Filter |
1 | sc *.Servlet |
有怀疑的就可以dump
下来去分析源码
jad反编译指定已加载类的源码(在线看)
1 | jad --source-only org.apache.coyote.type.PlaceholderForType |
dump已加载类的bytecode到特定目录(下载)
1 | dump org.apache.coyote.type.PlaceholderForType |
能看到源码之后就分析源码中是否有跟webshell
有关的代码,如果看不懂或者懒得看,可以把这个源码放到java文件里上传到微步在线分析
GUI项目
项目地址:https://github.com/4ra1n/shell-analyzer
实时监控目标JVM,一键反编译分析代码,一键查杀内存马
Web内存马查杀&Spring框架型&中间件型&JVM分析&Class提取
目前Java内存马具体分类:
1、传统Web应用型内存马
Servlet型内存马:动态注册Servlet及映射路由。
Filter型内存马:动态注册Filter及映射路由。
Listener型内存马:动态注册Listener中的处理逻辑。
哥斯拉
是不支持植入Listener型内存马,这里可以用https://github.com/pen4uin/java-memshell-generator
项目去生成
同样可以使用analyzer进行查杀
框架型内存马
启动打包的jar包:
1 | 注入内存马(访问这个地址就行): |
触发链接:
1 | http://192.168.179.130:8080/xiaodisec?cmwpzz=calc |
使用只能使用arthas
监控工具排查
蓝队排查思路:
1 | 1:弄清楚当前环境的组织架构,中间件,框架等 |
使用arthas进行检索
1 | sc * | grep Controller |
1 | sc * | grep Interceptor |
1 | jad --source-only com.example.springinject.demos.web.myInjectController3 |
对比较可疑的类,对他们的源代码进行查看,发现恶意的传参
1 | jad --source-only com.example.springinject.demos.web.testInjectInterceptor |
清除:Jar
包中删除对应class
文件
Spring Webflux型内存马:动态注册WebFilter及映射路由
Spring WebFlux框架启动(Webflux型内存马)
直接用哥斯拉进行连接(得先访问一下这个链接,随便后面是什么参数):
arthas
使用语法:
关键字筛选 常规shell
触发代码关键字
1 | memshell shell os runtime |
1 | jad --source-only com.example.webfluxmem.WebFluxFilterMemshell |
中间件型内存马
Tomcat Valve型内存马:动态注册Valve。
哥斯拉不支持该类型内存马植入,只能用脚本方式植入
植入的方式同样是访问这个脚本进行触发
然后在执行命令参数。
红框中的地址随机。
使用这个脚本看看能否对这种类型的内存马进行查杀,访问之后查杀脚本都不能进行访问了。
Tomcat其他类型(如Upgrade、Executor、Poller)的内存马
这些内存马会动态替换或添加全局组件。
其他中间件(如Grizzly)的内存马(未讲到)
动态注册Filter及映射路由。其他内存马:
1 | WebSocket型内存马:动态注册WebSocket路由及处理逻辑。 |
Agent型内存马(未讲到)
通过Hook并修改关键方法添加恶意逻辑。Agent型内存马在现代webshell管理工具中有广泛实现。
检测项目
1 | 项目1:arthas(实时监控提取方便调试,需要自行排查找到可疑类) |
蓝队内存马大概排查思路
1 | 1、弄清楚当前环境的组织架构:中间件 框架等 |
注意:
不同内存马类型查杀arthas检测:有的是基于内存马固定的后缀,名字,文件中的常见关键字去找到可疑类然后去定性