学习java内存马
java内存马介绍
内存马总之就是一种技术,能够将🐎放到内存里,即使没有jsp也是能够正常运行并且执命令的
同flask内存马一样,内存马都需要实现动态注册路由来实现。
对于java内存马,有如下分类:
- 传统型内存马
- Servlet型内存马 需要动态注册Servlet以及映射
- Filter型内存马 需要动态注册Filter及映射
- Listener型内存马 需要动态注册Listener
javaweb将servlet、filter、Listener等以及其处理类放在context中,并在程序运行时进行查找和匹配。这种内存马就是通过将代码添加到context的关键位置中。
-
Spring内存马
- Controller型 动态注册Controller及其映射
- Interceptor型 动态注册Interceptor及其映射
- Webflux型 动态注册webfilter及映射路由
-
tomcat内存马
- valve型内存马 动态注册valve
- upgrade型 动态注册upgradeProtocol
- executor型 动态替换全局executor
- poller型 动态替换全局poller
-
Grizzly filter型 动态注册Grizzly filter
-
其他内存马
- websocket型 动态注册websocket以及处理逻辑
- tomcat JSP内存马 动态注册tomcatjsp管理逻辑
- 线程型 动态加载一个无法杀死的线程
- RMI型 动态启动RMI Registry
-
Agent型内存马 通过hook并修改关键方法添加恶意逻辑
Agent型内存马在冰蝎和哥斯拉上都有实现
实际上agent型内存马可以hook很多位置,还可以挖掘出更多的内存马的利用方式
按照另一种分类方式可以分为:
- 冰蝎🐎
- 哥斯拉🐎
- 蚁剑🐎
- 命令回显🐎
- 流量隧道🐎
java内存马应用范围
java内存马的使用范围:
- 因为网络原因反弹不了shell的(不出网)
- 反向代理暴露web端口的
- 没有文件写权限的
- 写不了普通🐎的(写马后会告警监控的)
- springboot等框架无法解析webshell的
对看不懂内存马的((((
但是内存马还是有缺点的:
- 服务器重启后会失效
- 目前技术已经能够查杀出内存马