随着企业数字化进程加速,各类应用软件的安全漏洞成为攻击者频繁利用的入口,网络攻击事件层出不穷,严重威胁业务与数据安全。作为安全运维人员,掌握高效的应急响应与入侵排查技能至关重要。本文将通过两个真实案例,详细讲解在Windows系统环境下,针对Web应用(如通达OA)的Webshell入侵以及Tomcat服务器内存马的排查、分析与处置流程。
一、 通达OA Webshell入侵排查案例
1.1 Webshell文件发现
在通达OA的Web部署目录下,发现两个可疑的PHP文件,其创建时间集中在15:20左右。
- test1.php: 该文件利用
eval函数执行所有HTTP请求头的内容,隐蔽性极高。

- hack.php: 这是一个经典的一句话木马,通过
assert函数将x参数的值作为PHP代码执行。

1.2 日志关联分析
根据文件创建时间,检索Web服务器访问日志,发现关键攻击链:
- 攻击入口:在15:20左右,IP
192.168.75.1 访问了通达OA的一个特定接口 ../gateway/getdata?activeTab,并上传了test1.php文件。

- 横向移动:由于日志未记录Header具体内容,无法直接看到
test1.php的执行详情。但结合hack.php的创建时间(紧接其后),可合理推断攻击者通过已上传的test1.php创建了功能更稳定的hack.php。

- 命令执行:后续出现了对
hack.php的POST访问记录,但日志同样未捕获到传递的x参数(即执行的命令)。

1.3 攻击时间线重建
综合以上信息,可整理出清晰的攻击链:
- 15:20: 攻击者利用通达OA未授权漏洞,通过接口上传Webshell文件
test1.php。
- 15:21: 攻击者访问
test1.php并利用其功能,在服务器上创建了第二个Webshell文件hack.php。
- 后续时间: 攻击者通过访问
hack.php并传递参数,在服务器上执行任意恶意命令。
1.4 漏洞原理简析
日志中发现的攻击接口路径为:
/general/appbuilder/web/portal/gateway/getdata?activeTab
经查阅公开漏洞信息,确认该接口存在未授权访问及远程命令执行漏洞,攻击者正是利用此漏洞完成初步的Webshell植入。

二、 Tomcat内存马排查案例
2.1 内存马迹象识别
在Tomcat访问日志中,发现攻击者反复访问一个不存在的路径 /abc 并成功执行了系统命令(如whoami)。这种“访问非真实文件路径却能执行功能”的现象,是内存马(Memory Shell)的典型特征。

2.2 使用Java堆转储分析内存马
由于内存马驻留在Java进程的内存中,传统的文件排查手段无效,需要借助Java虚拟机分析工具。
-
定位并转储堆内存:
-
使用JVisualVM分析堆文件:
- 运行
jvisualvm 命令打开JDK内置的可视化分析工具。
- 装入上一步生成的堆转储文件。
- 使用“对象查询语言(OQL)”进行精准检索。
- 查找所有Filter映射:以下OQL语句可以列出所有已注册的Filter及其关联的URL模式,有助于发现恶意注册的Filter内存马。
select { filterName: fm.filterName.toString(), urlPatterns: fm.urlPatterns ? fm.urlPatterns[0] : null, instance: fm} from org.apache.tomcat.util.descriptor.web.FilterMap fm
执行后,发现一个名为DefaultFilter的可疑过滤器,其URL模式为/*,拦截所有请求。

- 查找Filter定义:进一步查询该Filter对应的类定义。
select { name: fd.filterName != null ? fd.filterName.toString() : "null", className: fd.filterClass != null ? fd.filterClass.toString() : "null", instance: fd} from org.apache.tomcat.util.descriptor.web.FilterDef fd
发现其类名为包含$的匿名内部类,这是内存马常见的伪装手法。
-
检查临时文件残留:
排查Tomcat的工作目录 work/Catalina/localhost/ROOT/org/apache/jsp,发现了编译后的class文件,特别是包含$符号的匿名内部类文件,这可能是内存马注入时留下的编译痕迹。

-
检索攻击命令:
通过OQL在堆内存的字符串中搜索攻击者可能执行的命令关键字(如cmd=)。
select s from java.lang.String s where /cmd=/.test(s.toString())

2.3 应急处置措施
本例主要展示排查定位过程,实际处置可参考以下步骤:
- 清除痕迹:根据时间戳,删除Tomcat临时目录下可疑的class文件。
- 清除内存马:
|