网络安全渗透测试桌面应用【免费下载链接】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),仅供参考