这块领域大佬太多,大佬勿喷~本文将从工具视角下对实现jvm注入的过程做分析,看一下冰蝎作者键盘下的demo工具都经历了些什么
前提简要
Tomcat中Filter简要
Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet容器进行调用和执行。这个 Servlet 过滤器就是我们的 filter,当在 web.xml 中注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,这个Filter 就成了 Tomcat 与该 Servlet 程序的通信线路上的一道关卡,该 Filter 可以对Servlet 容器发送给 Servlet 程序的请求和 Servlet 程序回送给 Servlet 容器的响应进行拦截,可以决定是否将请求继续传递给 Servlet 程序,以及对请求和相应信息是否进行修改。
工具利用效果
来自冰蝎作者键盘下的demo工具:https://github.com/rebeyond/memShell
利用效果如下图:
Debug环境搭建
首先启动tomcat,搭建可实现jvm注入的环境
在idea配置被动监听debug端口,再debug启动项目
运行inject.jar包时采用主动debug方式连接本地的idea中的源代码项目
工具分析
首先就是需要键入获取密码以提高木马在用户界面具有较好的交互式
然后获取当前目录找到同目录下的agent.jar
接下来就是寻找catalina
即tomcat的jvm进程,然后将agent.jar注入进去。现在先通过VirtualMachine.list()
遍历所有jvm中的进程,可以看到vmlist
中存在PID为9404的org.apache.catalina.startup.Bootstrap start
的服务进程
接着通过VirtualMachine.attach(vmd)
获取catalina
进程的VirtaulMachine
实例,再通过简单的判断确认,利用loadAgent()
方法用于加载agent.jar,以对catalina进程完成注入agent.jar。
由于agent.jar跟命令行中执行的inject.jar不是一块的,所以暂时无法继续debug跟踪,以上仅对如何寻找tomcat进程对其实现注入做了分析,最后一步将手把手对agent.jar做源代码的分析。
当debug断掉之后,可以看到tomcat启动命令行中出现Agent Main Done
的字眼,所以可以看出jvm进程中必定走到了源代码的Agent类中的agentmain()
方法
从classname中指定的类org.apache.catalina.core.ApplicationFilterChain
即tomcat的调用过滤器链,可以看出,这agent应该是个动态注册filter型内存马,getallloadedclasses()
将返回 jvm 当前已加载的所有类,找到指定ApplicationFilterChain
类则利用retransformClasses()
方法重新加载,最后initload()
以提供内存马功能点的正常使用
Tips:
关于tomcat如何处理filter可参考:https://www.136.la/jingpin/show-35570.html
关于该工具的功能点分析可参考:https://blog.csdn.net/weixin_39541600/article/details/110078172
- 本文作者: w1nk1
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/746
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!