ExecutorAndUpgrade内存马的查杀分析和代码实现
2023-7-5 21:28:43 Author: www.freebuf.com(查看原文) 阅读量:5 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Preface

前面我们针对Tomcat下的Vavle内存马进行了类似的查和杀功能的编写,这里我们继续针对Executor型和Upgrade类型的内存马进行查和杀的编写

Executor

review

在之前的Executor型内存马的注入中,已经对Executor是什么,有什么用,怎么用等等问题分别进行了回答,下面简单回顾一下Executor的注入流程

其是一种可以在Tomcat组件之间进行共享的连接池

在处理socket请求的时候将会通过getExecutor方法获取对应的Executor对象,调用其execute方法进行后续逻辑

而同时存在有setExecutor方法能够覆盖掉getExecutor方法获取到的Executor对象

所以我们首先创建一个Executor对象,在重写其execute方法的时候编写我们的恶意逻辑,之后在处理socket连接的时候,获取的是我们写入的恶意的Executor类对象,也即是执行的存在恶意逻辑的execute重写方法

总结一下注入流程:

  1. 首先获取对应的NioEndpoint(对比上面分析的request和response位置,我们可以知道有一个共同点)

  2. 获取对应的executor属性

  3. 创建一个恶意的executor

  4. 将恶意的executor传入

detect

在前面恶意executor对象的写入操作是调用的org.apache.tomcat.util.net.AbstractEndpoint#setExecutor方法进行写入

AbstractEndpoint是抽象类,我们实际调用的是其子类NioEndpoint进行调用

image-20230629164249246.png

image-20230629164236018.png

类似的,我们的检测思路就是获取NioEndpoint类对象,之后获取这个对象中的executor属性,也即是其父类AbstractEndpoint的属性

获取NioEndpoint

image-20230629164525763.png

最后检测,同样是判断该executor对象是否存在具体的资源路径

image-20230629164621853.png

也即是调用classFileIsExists方法判断

kill

其中对于kill功能的实现是在deleteExecutor方法中


文章来源: https://www.freebuf.com/articles/web/371236.html
如有侵权请联系:admin#unsafe.sh