传统内存🐎
Listener(监听器)
收到http的请求,web容器自动调用 ServletRequestListener.requestInitialized(),在这执行恶意代码
Listener->Filter->Servlet 监听器作为请求处理第一环,可以确保优先执行
Servlet才是正常代码部分,恶意代码会驻留在内存里,不会留下痕迹
Filter(过滤器)
收到http请求,Tomcat 会通过StandardWrapperValue 创建 ApplicationFilterChain,依次调用所有匹配URL的Filter,攻击者设置/*模式,可以确优先执行
注入流程
1.通过反射从ServletRequest或ServletContext中提取StandardContext对象(管理Filter的容器)
2.利用doFilter(),创建恶意Filter和FilterDef
3.讲恶意Filter加入StandardContext.filterConfigs(存储Filter配置的Map)
4.创建FilterMap制定URL模式为/*,确保优先执行
框架内存🐎
内存🐎生成工具
需要mvn:https://github.com/pen4uin/java-memshell-generator
在线网站:https://party.memshell.news
思考
不管是Webshell工具还是生成项目都需要上传这些脚本后,内存马才能植入。
如何做到不需要执行上传的文件才直接注入内存马呢?
借助已知漏洞:通过反序列化,SSTI注入,RCE等漏洞,执行Java反射逻辑,注入内存马