中国蚁剑 AntSword CUSTOM 自定义脚本类型 API 协议全解析:从功能码到模板实现
网络安全渗透测试桌面应用【免费下载链接】antSword中国蚁剑是一款跨平台的开源网站管理工具。AntSword is a cross-platform website management toolkit.项目地址https://gitcode.com/gh_mirrors/an/antSword点击查看免费下载本文以 source/core/custom/README.md 为骨架结合 source/core/custom 目录下的完整源码与 source/modules 中各业务模块的调用实现系统梳理 AntSword CUSTOM 自定义脚本类型的 API 协议包括基础信息、文件管理、命令执行、数据库四大类 21 个功能码的参数约定、底层模板映射与客户端调用方式。读完本文你将能够理解 CUSTOM 类型 WebShell 的通信协议设计并据此开发或调试自定义脚本与配套的编码器、解码器、数据库驱动。一、CUSTOM 类型在 AntSword 中的定位AntSword中国蚁剑的脚本类型core_types由 source/app.entry.js 在启动时自动扫描source/core目录下的子目录生成CUSTOM 即是其中之一。与 php、jsp、aspx 等内置类型不同CUSTOM 的核心特征在于协议完全由使用者定义客户端通过固定的Code功能码即 A~Z 的字母与Param参数名如z1、z2组合与服务端自定义脚本约定的行为一一对应。从 source/core/custom/index.js 可以看到CUSTOM 类继承自Base见 source/core/base.js并在构造函数中依次解析以下模板[ base, command, filemanager, database/sqlserver, database/mysql, database/oracle ].map((_) { this.parseTemplate(./custom/template/${_}); });也就是说CUSTOM 客户端侧由**模板template定义功能码映射、由编码器encoder负责请求参数包装、由解码器decoder**负责响应数据还原三者共同构成了完整的通信链路。二、CUSTOM API 协议总览source/core/custom/README.md 将 API 划分为 Base、FileManager、Command、Database 四大类。下表为完整协议清单2.1 Base基础信息CodeFunctionParamAinfo{}Zprobedb{}对应模板见 source/core/custom/template/base.js其中注释明确标注info用于获取当前路径、磁盘列表probedb用于检测数据库函数支持。2.2 FileManager文件管理CodeFunctionParamBdir{z1: path}Cread_file{z1: path}Dcreat_file{z1: path, z2: content}Edelete{z1: path}Fdownload_file{z1: path}Hcopy{z1: path, z2: target}Irename{z1: path, z2: name}Kretime{z1: path, z2: time}Jmkdir{z1: path}Lwget{z1: url, z2: path}Uupload_file{z1: path, z2: buffer::content}Gfilehash{z1: path}2.3 Command命令执行CodeFunctionParamMexec{z1: bin, z2: cmd, z3: env}Ylistcmd{z1: binarr}2.4 Database数据库CodeFunctionParamNshow_databases{z0: encode, z1: conn}Oshow_tables{z0: encode, z1: conn, z2: db}Pshow_columns{z0: encode, z1: conn, z2: db, z3: table}Qquery{z0: encode, z1: conn, z2: sql}三、功能码的参数与语义详解从 source/core/custom/template 目录下的模板文件可以还原每个功能码的完整参数占位符占位符采用#{arg}形式由基类Base.parseTemplate()在运行时替换见 source/core/base.js。3.1 基础信息A / Z模板文件 source/core/custom/template/base.js 定义了module.exports () ({ info: A, probedb: Z, // 检测数据库函数支持 })Ainfo无参数用于探测当前工作目录、磁盘盘符等基础信息通常在连接测试时调用Zprobedb无参数用于检测服务端是否具备数据库函数支持是数据库模块可用性的前置探测。在客户端core.base.info()的调用入口为this.core.request(this.core.base.info())请求返回的文本与字节流会经过所选解码器处理见 source/core/base.js。3.2 文件管理B / C / D / E / F / H / I / K / J / L / U / Gsource/core/custom/template/filemanager.js 给出了全部 12 个文件管理功能码的完整模板摘录核心结构如下dir: { _: B, z1: #{path} } read_file: { _: C, z1: #{path} } create_file:{ _: D, z1: #{path}, z2: #{content} } delete: { _: E, z1: #{path} } download_file: { _: F, z1: #{path} } copy: { _: H, z1: #{path}, z2: #{target} } rename: { _: I, z1: #{path}, z2: #{name} } retime: { _: K, z1: #{path}, z2: #{time} } mkdir: { _: J, z1: #{path} } wget: { _: L, z1: #{url}, z2: #{path} } upload_file:{ _: U, z1: #{path}, z2: #{buffer::content} } filehash: { _: G, z1: #{path} }各功能码语义如下Bdir列出z1指定路径下的目录内容Cread_file读取z1指定文件内容Dcreat_file在z1路径创建文件内容为z2。客户端 source/modules/filemanager/index.js 调用时为create_file({ path, content })并根据返回文本判断结果——返回1视为成功、0视为失败见同文件 L450-L455Edelete删除z1路径的文件或目录Fdownload_file下载z1路径的文件配合download专用接口与分块回调使用见 source/core/base.jsHcopy将z1复制到z2Irename将z1重命名为z2Kretime修改z1的修改时间戳为z2Jmkdir在z1创建目录Lwget从z1URL下载文件到z2本地路径Uupload_file将z2内容buffer::前缀标识二进制缓冲写入z1路径Gfilehash计算z1文件的哈希值。客户端在 source/modules/filemanager/index.js 中调用后按\n分行解析Algorithm,Hash列表并以ERROR://前缀作为错误标记。3.3 命令执行M / Ysource/core/custom/template/command.js 定义了exec: { _: M, z1: #{bin}, z2: #{cmd}, z3: #{env} } listcmd: { _: Y, z1: #{binarr} }Mexec执行命令z1为解释器/可执行文件binz2为命令内容cmdz3为环境变量envYlistcmd传入z1binarr命令候选数组由服务端返回可用的命令列表用于在目标机上探测可用命令。3.4 数据库N / O / P / Qsource/core/custom/template/database/default.js 的头部注释明确了四个占位符参数的含义// params // :encode SHELL编码 // :conn 数据库连接字符串 // :sql 执行SQL语句 // :db 数据库名 // :table 表名Nshow_databasesz0为 SHELL 编码、z1为数据库连接字符串conn返回数据库列表Oshow_tables在z0编码、z1连接串基础上追加z2db 数据库名返回表名列表Pshow_columns追加z2db、z3table返回字段列表Qquery携带z0编码、z1连接串与z2sql 语句执行查询。客户端 source/modules/database/custom/index.js 是对应数据库驱动其getTables()通过this.core[database_${conf[type]}].show_tables({ conn, encode, db })发起请求并对返回值按\t分割生成树节点见 L586-L613getColumns()调用show_columns后同样按\t解析字段见 L643-L678execSQL()则调用query若返回文本包含ERROR://即判定为错误见 L713-L726。这也从实现侧印证了 README 中z0encode与z1conn两个参数的设计用途。四、编码器与解码器请求如何被包装、响应如何被还原CUSTOM 类型内置 2 个编码器与 4 个解码器声明于 source/core/custom/index.jsget encoders() { return [base64, hex]; } get decoders() { return [default, base64, hex, hex_base64]; }编码器决定请求参数的包装方式base64source/core/custom/encoder/base64.js将除_主变量即连接密码字段外的所有参数逐一Buffer.from(...).toString(base64)编码最终把主代码data[_]挂到密码名下hexsource/core/custom/encoder/hex.js同上但编码方式为 16 进制。该处理发生在基类encodeComplete()中见 source/core/base.js由this.__encoder__[this.__opts__[encoder]](pwd, data, ext)完成。解码器负责还原服务端响应defaultsource/core/custom/decoder/default.jsdecode_buff原样返回base64source/core/custom/decoder/base64.jsBuffer.from(data.toString(), base64)解码hexsource/core/custom/decoder/hex.js按 16 进制解码hex_base64source/core/custom/decoder/hex_base64.js先 16 进制还原、再 base64 还原对应服务端先将明文 base64 编码再转 hex的复合编码场景。解码结果随后交由 source/core/base.js 中的detectEncoding自动识别编码并还原文本。五、自定义数据分割符Custom DataTagCUSTOM 的complete()方法source/core/custom/index.js支持自定义请求数据的起始与结束分割符if (this.__opts__[otherConf][use-custom-datatag] 1 ...) { tag_s this.__opts__[otherConf][custom-datatag-tags]; } else { tag_s -|; // 默认开始标记 } // tag_e 默认 |-即结束标记对应配置项定义于 source/modules/shellmanager/list/form.jsuse-custom-datatag: 0, custom-datatag-tags: , custom-datatag-tage: 在其他设置面板中该功能以数据分割符分组呈现source/language/zh.js包含开启自定义数据分割符开始标记结束标记三个选项内置的候选标记为开始标记-|、~~|、__}|结束标记|-、|~~、|{~~界面提示明确要求数据分割符请避免和页面中其它不相关的字符相同且开始标记与结束标记不能相同校验逻辑见 source/modules/shellmanager/list/form.js 与 L871-L878。这一机制用于适配那些在页面输出中混入干扰字符的 WebShell 场景通过自定义前后标记精确截取有效数据。六、数据库连接串与驱动约定CUSTOM 数据库驱动在 source/modules/database/custom/index.js 中预置了三类 JDBC 连接串模板与 source/core/custom/template/database 下的模板一一对应类型模板文件JDBC Driver / 连接串示例mysqlmysql.jscom.mysql.jdbc.Driver/jdbc:mysql://localhost/test?userrootpassword123456sqlserversqlserver.jscom.microsoft.sqlserver.jdbc.SQLServerDriver/jdbc:sqlserver://127.0.0.1:1433;databaseNametest;usersa;password123456oracleoracle.jsoracle.jdbc.driver.OracleDriver/jdbc:oracle:thin:user/password127.0.0.1:1521/test上述连接串中的TXDB/T/X.../X注释块用于向使用者标识该模板对应的数据库类型。用户也可以在驱动面板中自行编辑conn字段含 Driver 与 JDBC 地址两行新增任意 JDBC 可连接的数据库类型——这正是 README 中z1: conn参数开放设计的意义所在。七、模板解析机制从#{arg}到实际请求理解 CUSTOM API 的底层执行需要了解基类Base.parseTemplate()的模板替换逻辑source/core/base.js每个模板函数返回形如{ _: B, z1: #{path} }的对象_字段是主代码功能码运行时将#{path}、#{content}等占位符替换为实际传入的实参支持#{格式函数::参数}语法例如#{hex::str}会先调用格式化函数hex处理参数再替换Base.format()同文件 L140-L198提供了base64、newbase64、buffer、hex等格式化工具替换完成后data[_]中的#randomPrefix#标记还会按otherConf[random-Prefix]配置替换L247。可见 README 中的Param列{z1: path}等正是模板占位符的参数名 → 模板变量约定同一个功能码对应服务端脚本中的一个分支参数名z1/z2/z3是约定好的键值则为客户端填入的实际数据。服务端自定义脚本只需按 Code 分发、按参数名取数即可实现完整对接。八、实践要点小结对接约定开发 CUSTOM 类型 WebShell 时服务端脚本需实现 README 所列的 A~Z 功能码分支并正确处理对应z*参数客户端侧则通过 source/core/custom/template 下的模板文件统一维护映射无需修改 source/core/custom/index.js 即可扩展。请求与响应请求数据经所选编码器base64 / hex包装后随功能码发送响应数据经对应解码器还原错误约定以ERROR://前缀返回数据库、文件哈希等模块均按此约定判断。数据库接入在数据库面板新建连接时conn字段填写JDBC Driver 类名 换行 JDBC 连接串CUSTOM 驱动会通过N/O/P/Q四个功能码完成库、表、字段遍历与 SQL 查询。流量特征控制可通过数据分割符自定义-|/|-之外的起止标记降低流量特征被规则匹配的风险但需保证前后标记不同且不与页面其他字符冲突。进一步阅读完整的协议清单可回看 source/core/custom/README.md模板实现位于 source/core/custom/template客户端驱动实现位于 source/modules/database/custom/index.js 与 source/modules/filemanager/index.js。赞分享网络安全渗透测试桌面应用【免费下载链接】antSword中国蚁剑是一款跨平台的开源网站管理工具。AntSword is a cross-platform website management toolkit.项目地址https://gitcode.com/gh_mirrors/an/antSword点击查看免费下载相关推荐中国蚁剑AntSword核心源码解读从启动到功能实现的完整指南中国蚁剑AntSword核心源码解读从启动到功能实现的完整指南 中国蚁剑AntSword是一款跨平台的开源网站管理工具通过模块化架构实现灵活的功能扩展。网络安全渗透测试桌面应用AntSword 中国蚁剑 Custom 模式服务端脚本全解析PHP / JSP / JSPX / Python 示例脚本与源码原理AntSword 中国蚁剑 Custom 模式服务端脚本全解析PHP / JSP / JSPX / Python 示例脚本与源码原理 本文以 webshell网络安全渗透测试中国蚁剑AntSword终极指南10个自定义模板与编码器开发技巧中国蚁剑AntSword终极指南10个自定义模板与编码器开发技巧 中国蚁剑AntSword是一款功能强大的开源网站管理工具作为渗透测试和安全研究人员的必备利网络安全渗透测试桌面应用上一篇fx_cast白名单系统安全策略与网站权限管理最佳实践下一篇钉钉位置模拟实战Xposed钉钉助手从零到能用的保姆级教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

C语言的区块链:底层核心技术与从0到1实战

C语言的区块链:底层核心技术与从0到1实战

引言 区块链技术自比特币白皮书发布以来,已经彻底改变了我们对价值转移、数据存储和信任机制的理解。在众多开发区块链的技术栈中,C语言拥有着不可撼动的“鼻祖”地位。比特币的核心代码(基于C++,但大量使用C风格和C语言库)、早期以太坊客户端、以及密码学基础库(如libs…

2026/10/15 2:09:15 阅读更多 →
前端构建内存溢出:Node.js堆上限调整与优化实战

前端构建内存溢出:Node.js堆上限调整与优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 2:09:15 阅读更多 →
25 美元的国产香水,在 TikTok 美区卖到月销 195 万美元

25 美元的国产香水,在 TikTok 美区卖到月销 195 万美元

出门之前的每个傍晚,美国的年轻女孩都有一件躲不开的事,在手腕上按一下香水,再抬手闻一闻,而这一下闻完,她们才敢推门出去。这个动作在美区传了很多年,瓶子里的东西换过好几代,从专柜的经典款&a…

2026/10/15 2:09:15 阅读更多 →

最新新闻

ESXi 升级到 8.0 后 VM 快照删不掉?一篇讲透 “in progress“ 死循环的 3 种解法

ESXi 升级到 8.0 后 VM 快照删不掉?一篇讲透 “in progress“ 死循环的 3 种解法

本文适用版本:ESXi 7.0 U3 → 8.0 U2 升级场景(vSphere 6.7 升级也会遇到) 阅读时长:约 8 分钟 难度:⭐⭐⭐(操作不可逆,生产 VM 强烈建议先备份再动)一、为什么写这篇文章?最近私信里又有几位网友问:ESXi 7.0 升到 8.0 之后,VM 的快照怎么都删不掉,vSphere Client 里一直显示…

2026/10/15 2:48:27 阅读更多 →
ESXi ping 得通但连不上 vCenter?一篇讲透 hostd 假死的全套救法

ESXi ping 得通但连不上 vCenter?一篇讲透 hostd 假死的全套救法

本文适用版本:ESXi 7.0 U3 / 8.0 U2 / 9.0 GA 阅读时长:约 7 分钟 难度:⭐⭐(SSH 能进就能修,但要分清是 hostd 还是 vpxd 的锅)一、为什么写这篇文章?最近私信里又陆续收到几位网友问:ESXi 能 ping 通、SSH 也能进、DCUI 也正常,但 vCenter 里主机显示"未响应"或&q…

2026/10/15 2:48:27 阅读更多 →
前端XSS防御实战:xss-filters上下文转义库详解

前端XSS防御实战:xss-filters上下文转义库详解

简介:前端开源库-xss-filters是一份面向前端开发者与安全入门者的XSS防护工具源码包,聚焦于解决用户输入回显场景下的跨站脚本注入风险。资源共30个文件,以20个js源码与测试脚本为主体,辅以3个json配置、3个md说明文档&#xff0c…

2026/10/15 2:48:27 阅读更多 →
ESXi 装系统报错 “bootbank is corrupted“ 怎么办?一篇讲透三种根治方案

ESXi 装系统报错 “bootbank is corrupted“ 怎么办?一篇讲透三种根治方案

本文适用版本:ESXi 7.0 U3 / 8.0 U2 / 9.0 GA(三版统一报错,解决方案略有差异) 阅读时长:约 8 分钟 难度:⭐⭐⭐(需在 DCUI/物理机前操作,不建议生产机远程盲操作)一、为什么写这篇文章? 最近陆续有几位网友私信问同一个问题:装 ESXi 的时候跑到一半,屏幕突然卡住,报 bootbank…

2026/10/15 2:48:27 阅读更多 →
React Native position 定位详解:relative 与 absolute 实战指南

React Native position 定位详解:relative 与 absolute 实战指南

1. 为什么 position 定位值得单独拎出来讲做 React Native 开发的人,迟早都会在布局上栽跟头。Flexbox 那一套东西,flexDirection、justifyContent、alignItems三板斧抡完,大部分界面确实能搭出来。但总有一些场景,光靠 Flex 流式…

2026/10/15 2:48:27 阅读更多 →
从零开发聚合9大视频网站的桌面App:技术选型与发布运营复盘

从零开发聚合9大视频网站的桌面App:技术选型与发布运营复盘

前阵子我在一个技术交流群里发了句感叹:“现在做桌面应用,是不是有点逆潮流?”结果有个朋友直接回我:“你做一个有用的桌面工具试试,用户在乎的是好不好用,又不是你用什么平台。”我当时不以为然&#xff0…

2026/10/15 2:47:27 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →