找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1094

积分

0

好友

158

主题
发表于 4 天前 | 查看: 21| 回复: 0

随着企业数字化进程加速,各类应用软件的安全漏洞成为攻击者频繁利用的入口,网络攻击事件层出不穷,严重威胁业务与数据安全。作为安全运维人员,掌握高效的应急响应与入侵排查技能至关重要。本文将通过两个真实案例,详细讲解在Windows系统环境下,针对Web应用(如通达OA)的Webshell入侵以及Tomcat服务器内存马的排查、分析与处置流程。

一、 通达OA Webshell入侵排查案例

1.1 Webshell文件发现

在通达OA的Web部署目录下,发现两个可疑的PHP文件,其创建时间集中在15:20左右。

  • test1.php: 该文件利用eval函数执行所有HTTP请求头的内容,隐蔽性极高。
    test1.php代码
  • hack.php: 这是一个经典的一句话木马,通过assert函数将x参数的值作为PHP代码执行。
    hack.php代码
1.2 日志关联分析

根据文件创建时间,检索Web服务器访问日志,发现关键攻击链:

  1. 攻击入口:在15:20左右,IP 192.168.75.1 访问了通达OA的一个特定接口 ../gateway/getdata?activeTab,并上传了test1.php文件。
    攻击上传日志
  2. 横向移动:由于日志未记录Header具体内容,无法直接看到test1.php的执行详情。但结合hack.php的创建时间(紧接其后),可合理推断攻击者通过已上传的test1.php创建了功能更稳定的hack.php
    文件创建时间线
  3. 命令执行:后续出现了对hack.php的POST访问记录,但日志同样未捕获到传递的x参数(即执行的命令)。
    POST访问日志
1.3 攻击时间线重建

综合以上信息,可整理出清晰的攻击链:

  1. 15:20: 攻击者利用通达OA未授权漏洞,通过接口上传Webshell文件test1.php
  2. 15:21: 攻击者访问test1.php并利用其功能,在服务器上创建了第二个Webshell文件hack.php
  3. 后续时间: 攻击者通过访问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虚拟机分析工具。

  1. 定位并转储堆内存

    • 首先查询Tomcat的Java进程ID(PID)。
    • 使用JDK自带的jmap工具导出堆转储文件(Heap Dump)。
      jmap -dump:format=b,file=heapdump.hprof <PID>

      执行jmap转储

  2. 使用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模式为/*,拦截所有请求。
        发现恶意FilterMap

      • 查找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

        发现其类名为包含$的匿名内部类,这是内存马常见的伪装手法。

  3. 检查临时文件残留
    排查Tomcat的工作目录 work/Catalina/localhost/ROOT/org/apache/jsp,发现了编译后的class文件,特别是包含$符号的匿名内部类文件,这可能是内存马注入时留下的编译痕迹。
    临时目录中的class文件

  4. 检索攻击命令
    通过OQL在堆内存的字符串中搜索攻击者可能执行的命令关键字(如cmd=)。

    select s from java.lang.String s where /cmd=/.test(s.toString())

    检索攻击命令字符串

2.3 应急处置措施

本例主要展示排查定位过程,实际处置可参考以下步骤:

  1. 清除痕迹:根据时间戳,删除Tomcat临时目录下可疑的class文件。
  2. 清除内存马



上一篇:华为与H3C交换机网络运维巡检命令清单:硬件、配置与协议状态检查
下一篇:AI生成代码审查实战:6步把关Cursor输出质量与团队规范
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 18:06 , Processed in 0.114337 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表