内存马隐蔽是真隐蔽,但攻击路子挺窄,基本得靠文件上传。跟反序列化比起来,破坏力还是差点意思。
不过 Listener 型内存马确实值得盘一盘。Java Web 里有三大监听器,最适合做内存马的是ServletRequestListener。因为它专门监听请求,你一访问任意资源,里面的 requestInitialized() 方法就会被触发。
那它是怎么注册进去的?Tomcat 启动时会去读 web.xml,把 Listener 存进一个叫 applicationEventListenersList 的数组里。等应用一跑起来,这个数组里的监听器就会被逐个触发。
搞懂了流程,写 EXP 就两步:先把恶意代码塞进 requestInitialized() 方法里,再通过 StandardContext 把它加进那个数组。这样它就能跟着正常请求一起跑了。