文章总结: 本文是EasyShellExtensions脚本菜单的用户手册,详细介绍了该渗透测试工具的功能特性、部署使用方法、内置插件集配置以及自定义JSON插件编写指南。文档重点说明了脚本菜单的树形操作界面、内存执行技术、Windows/Linux/macOS多平台支持,以及从CobaltStrikeCNA迁移的注意事项,为红队操作人员提供了完整的操作指引和实战经验分享。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透,安全工具,实战经验
EasyShell Extensions 脚本菜单 — 用户使用手册
原创
沐寒 沐寒
渗透云记
2026年6月11日 17:51 甘肃
在小说阅读器读本章
去阅读
免责声明
由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
欢迎关注本公众号,长期推送技术文章
前言
本文是 Extensions 脚本菜单 的统一说明,涵盖:部署使用、内置插件集、自定义 JSON 插件编写,以及从 Cobalt Strike CNA 迁移。 适用于操作人员与需要扩展菜单的用户。
1. 简介
1.1 是什么
Extensions 脚本菜单 是 EasyShell Web 控制台中的右键扩展能力:在已上线主机上,通过树形菜单一键下发命令、内存执行工具、凭据抓取等操作。
-
配置以 JSON 文件 描述,放在服务端
Extensions/目录 -
不解析
Cobalt Strike 的
.cna(Sleep 脚本);CNA 需转换为 JSON 后使用 -
与交互式 Shell 分离:菜单执行走 非交互通道,结果在 输出坞 展示
1.2 与 Cobalt Strike CNA 的区别
| 项目 | Cobalt Strike CNA | EasyShell Extensions |
| — | — | — |
| 运行环境 | CS 客户端 + Sleep 运行时 | Web 控制台 + 静态 JSON |
| 命令下发 | bshell / beacon_* | shell / memory_exec 等步骤 |
| 工具路径 | script_resource() | relPath (相对 Extensions/,正斜杠) |
| 执行方式 | Beacon 控制台 | 非交互 + 输出坞轮询 |
2. 快速开始
2.1 目录结构
将 Extensions 文件夹放在 easyshell 服务端程序同级(与 easyshell.exe 同目录):
1easyshell.exe
2easyshell.db
3Extensions/
4 EasyShell插件集/ ← 内置插件包(推荐直接使用)
5 main.json ← 菜单入口与模块加载顺序
6 modules/ ← 各分类菜单 JSON
7 Windows信息收集.json
8 权限提升.json
9 ...
10 tools/ ← 内存执行二进制(部分需自行放入)
11 scripts/ ← PowerShell 等脚本
若程序同级没有
Extensions/,服务端会回退到启动时工作目录下的Extensions/(便于开发调试)。
2.2 加载菜单
- 登录 Web 控制台
- 选中已上线客户端,进入 脚本菜单 页
- 点击 重新加载配置(或重新进入该页面,会自动刷新)
菜单会按主机系统(Windows / Linux / macOS)和架构自动过滤显示项。
2.3 执行一项插件
- 在左侧菜单树点击 叶子菜单(最底层一项)
- 若需要参数,在弹窗中填写(如端口、网段、路径)
- 若有危险操作提示,确认后继续
- 页面底部 输出坞 自动展开并轮询显示执行结果
3. 控制台使用
3.1 脚本菜单页
| 操作 | 说明 |
| — | — |
| 点击菜单项 | 对当前选中会话下发对应步骤 |
| 参数弹窗 | 填写后替换命令中的 {{参数名}} |
| 二次确认 | 高危项(提权、持久化等)会先弹出确认框 |
| 输出坞 | 展示命令回显;可在此继续输入命令 |
| 重新加载配置 | 修改 JSON 后点此刷新,无需重启服务 |
3.2 输出坞与 Shell 的关系
-
脚本菜单执行结果写入 会话缓冲区,在输出坞以文本形式展示
-
与 客户端 Shell → 非交互式 共用同一缓冲区
-
不会
混入交互式 PTY(xterm)输出,避免乱序
慢链路(如 DNS Beacon)回显可能延迟,可点 刷新输出;最长轮询约 13 分钟。
3.3 输出坞中直接内存执行
在输出坞或 非交互式终端 命令框中,可直接输入(不要加 shell 前缀):
1memory-exec EasyShell插件集/tools/fscan.exe -h 192.168.1.0/24
2memory-exec EasyShell插件集/tools/postex_helper.exe inline-bin getsystem 3
语法:memory-exec[模式] [参数...]
4. 内置插件集
仓库自带 EasyShell插件集,部署时复制到 Extensions/EasyShell插件集/ 即可。
4.1 菜单分类
| 模块 | 内容概要 | | — | — | | Windows信息收集 | 系统、网络、用户、进程、启动项、敏感搜索 | | Windows内网探测 | arp、ping、fscan、nbtscan 等 | | Windows域环境 | 域信息、PowerView、AdFind、SharpHound、Web 投递 | | 权限提升 | getsystem、MS16 提权脚本、土豆类等 | | 后渗透 | Mimikatz、浏览器密码、LaZagne、组合链 | | Windows远程桌面 | RDP 状态与端口 | | Windows痕迹与维持 | 计划任务、隐藏、防火墙、痕迹清理 | | Linux信息收集 / Linux内存执行 | Linux 命令与 ELF 无盘执行 | | Linux隐匿与权限维持 | cron、systemd、文件隐藏等 | | macOS信息收集 / macOS隐匿与权限维持 | macOS 枚举与维持 |
上线后,右键菜单仅展示与 当前主机会话系统 匹配的项。
4.2 tools 目录(需自行准备的常见文件)
部分菜单依赖 tools/ 下的二进制,请参考 EasyShell插件集/tools/MANIFEST.txt:
| 文件 | 用途 |
| — | — |
| postex_helper.exe | getsystem、rev2self 等(构建产物,自带) |
| bof_helper.exe | BOF 内联执行(构建产物,自带) |
| fscan.exe / fscan.o | 内网扫描(有 .o 时优先 BOF,更稳定) |
| mimikatz.exe | 凭据抓取 |
| AdFind.exe / SharpHound.exe | 域信息 |
| hack-browser-data.exe / lazagne.exe | 本地凭据 |
| 其他 .exe / .o | 按菜单说明按需放入 |
5. 执行方式与输出
5.1 步骤类型一览
插件每一项(叶子菜单)由一条或多条 步骤 组成:
| 类型 | 作用 | 典型场景 |
| — | — | — |
| shell | 在目标机执行命令 | whoami 、netstat、schtasks |
| cd | 切换工作目录 | 进入指定路径后再执行 |
| log | 输出提示文字 | 标记阶段开始/说明 |
| delay | 等待若干毫秒 | 多步链之间留间隔 |
| memory_exec | 内存加载执行文件 | EXE、BOF、PS1、ELF |
| credentials_refresh | 刷新控制台凭据库 | 抓取后同步到凭据页 |
| search_sensitive | 敏感文件扫描 | 搜索配置、密钥等 |
| dump_browser | 浏览器密码协议 | Chromium 系密码 |
5.2 Windows 命令注意事项
菜单中的 shell 命令经 cmd.exe /C 非交互执行,请注意:
-
路径含空格
:用引号,如
"C:\Program Files\app.exe" -
sc服务命令:
binPath=、start=等 等号后要有空格 -
schtasks:任务名和
/TR路径建议加引号 -
for /L %i:在菜单命令里写
%i(不是%%i) -
避免交互命令
:
doskey /history、more等无效或会卡住 -
慢命令
:避免
wmic product;已安装软件建议用注册表 / PowerShell 查询
5.3 内置占位符
除用户填写的参数外,还支持:
| 占位符 | 含义 |
| — | — |
| {{参数名}} | 参数弹窗中用户输入 |
| {{es_webdelivery_first}} | 控制台已 Open 的第一条 Web 投递下载地址 |
| {{es_webdelivery_0}} … 15 | 按序号取 Web 投递地址 |
| {{es_webdelivery_count}} | 已 Open 的投递数量 |
用于「当前会话拉取并运行 Web 投递」等二阶段场景。
6. 内存执行
6.1 执行模式
| 模式 | 适用文件 | 说明 |
| — | — | — |
| execute-assembly | .NET EXE/DLL | CLR 内存加载 |
| inline-bin | 原生 PE | Donut 或侧车子进程执行 |
| inline-execute | .o BOF | 轻量 COFF,推荐 x64 会话 |
| powershell | .ps1 | 脚本内存执行 |
| shellcode-inject | .raw | 裸 shellcode |
| elf | Linux 无扩展名二进制 | Linux 无盘执行 |
服务端会自动优化以降低掉线概率:
- 有同名
.o时优先走 BOF(inline-execute) - 检测到 .NET 程序自动改用
execute-assembly - 大体积 PE 或
postex_helper走侧车 spawn,不经 Donut 同进程
6.2 高危能力正确用法
| 能力 | 正确做法 | 错误做法 |
| — | — | — |
| getsystem | memory_exec + postex_helper.exe,参数 getsystem 3 | shell getsystem 文本命令 |
| Mimikatz | memory_exec + mimikatz.exe + 参数串 | 交互式 mimikatz 输入 |
| 浏览器密码 | dump_browser 步骤 | — |
getsystem 说明: 成功后植入体会以 SYSTEM 令牌自动重启并接替当前会话(同 uid 重连),控制台无需重新选中主机。成功标志:[+] token elevation succeeded 与 [+] elevated implant relaunched。
6.3 配置示例
fscan(EXE + BOF 优先):
1{
2"type":"memory_exec",
3"relPath":"EasyShell插件集/tools/fscan.exe",
4"bofRelPath":"EasyShell插件集/tools/fscan.o",
5"preferBof":true,
6"mode":"inline-bin",
7"pluginOs":"windows",
8"args":"{{args}}"
9}
getsystem:
1{
2"type":"memory_exec",
3"relPath":"EasyShell插件集/tools/postex_helper.exe",
4"mode":"inline-bin",
5"pluginOs":"windows",
6"args":"getsystem 3"
7}
relPath 使用正斜杠,前缀为包名 EasyShell插件集/。args 按程序命令行原样传递,不要额外套 cmd 引号。
7. 自定义插件
7.1 包结构
可在 Extensions/ 下新增自己的插件包(文件夹),或直接向 EasyShell插件集 追加菜单。
1Extensions/
2 我的插件包/
3 main.json
4 modules/
5 自定义功能.json
6 tools/
7 scripts/
main.json 示例:
1{
2"menu":"我的插件包",
3"order":[
4"自定义功能"
5]
6}
-
menu:右键菜单根名称
-
order:子模块文件名(不含
.json),顺序即菜单展开顺序 -
新增模块后必须把名称加入
order,否则不会加载
7.2 模块 JSON 结构
1{
2"version":1,
3"platforms":["windows"],
4"roots":[
5{
6"label":"自定义功能",
7"children":[
8{
9"label":"分组一",
10"children":[
11{
12"label":"查看当前用户",
13"steps":[
14{"type":"shell","command":"whoami /all"}
15]
16},
17{
18"label":"按端口查连接",
19"params":[
20{"key":"port","label":"端口","placeholder":"443","required":true}
21],
22"steps":[
23{"type":"shell","command":"netstat -ano | findstr {{port}}"}
24]
25}
26]
27}
28]
29}
30]
31}
7.3 常用字段
| 字段 | 说明 |
| — | — |
| label | 菜单显示名称 |
| children | 子菜单(分支节点) |
| steps | 执行步骤(叶子节点) |
| params | 参数:key、label、placeholder、default、required |
| confirm | 执行前确认提示文案 |
| platforms | windows / linux / darwin / all,可写在任意节点 |
7.4 完整叶子节点模板
1{
2"label":"示例菜单",
3"confirm":"确定执行?",
4"params":[
5{"key":"target","label":"目标","placeholder":"192.168.1.1","required":true}
6],
7"steps":[
8{"type":"log","text":"开始执行","echo":true},
9{"type":"shell","command":"ping -n 2 {{target}}"},
10{"type":"delay","ms":500},
11{
12"type":"memory_exec",
13"relPath":"EasyShell插件集/tools/工具.exe",
14"mode":"inline-bin",
15"pluginOs":"windows",
16"args":"{{target}}"
17}
18]
19}
修改 JSON 后,在控制台点击 重新加载配置 即可生效。
7.5 并入内置插件集的建议
若扩展的是官方分类,建议合并进 EasyShell插件集/modules/ 对应文件,而不是新建独立包:
| 功能类型 | 合并到 |
| — | — |
| 主机/网络枚举 | Windows信息收集.json |
| 扫描探测 | Windows内网探测.json |
| 域与 AD | Windows域环境.json |
| 提权 | 权限提升.json |
| 凭据/键盘/截图 | 后渗透.json |
| 持久化/痕迹 | Windows痕迹与维持.json |
外来插件建议增加一级分组,如 "label": "我的插件名",其下挂具体菜单,避免与内置项重名。
8. 从 CNA 迁移
若你已有 Cobalt Strike .cna 插件,需转换为 JSON 才能在 EasyShell 中使用。
8.1 核心原则
- EasyShell 不运行
.cna;.cna可保留作参考,运行时忽略 - 把 CNA 的
menu/item映射为 JSON 的children/steps - 二进制功能改为
memory_exec,文件放入tools/或scripts/
8.2 常见 API 对照
| CNA | EasyShell JSON |
| — | — |
| bshell($1, "cmd") | { "type": "shell", "command": "cmd" } |
| blog($1, "提示") | { "type": "log", "text": "提示", "echo": true } |
| bcd($1, "路径") | { "type": "cd", "path": "路径" } |
| bpause($1, 2000) | { "type": "delay", "ms": 2000 } |
| prompt_text / 简单 dialog | params + 命令里 {{key}} |
| bexecute_assembly | memory_exec + execute-assembly |
| beacon_inline_execute + .o | memory_exec + inline-execute |
| binput + alias | 找到 alias 实现,转为对应 steps |
不易直接迁移的:bdllspawn(反射 DLL)、bupload 落盘链、复杂 if 分支、CS 界面函数(openListenerManager 等)——需改写成内存执行或拆成多个固定菜单项。
8.3 自动转换(初稿)
仓库提供脚本,可批量转换 简单 shell 类 CNA:
1python tools/convert_cna_to_manifest.py --pack Extensions/你的插件包
-
输入:
你的插件包/modules/*.cna -
输出:同名
modules/*.json -
支持:
bshell、blog、bcd、简单prompt_text -
不支持
:
beacon_*、程序集、BOF、复杂 dialog → 需人工补充
8.4 推荐迁移流程
11. 按 CNA 的 menu 划分模块
22. 运行 convert_cna_to_manifest.py 生成 JSON 初稿
33. 手工处理:
4 - bexecute_assembly → memory_exec + tools/
5 - beacon_inline_execute → .o 放入 tools/ + inline-execute
6 - 复杂 dialog → 拆成多个菜单或简化为 params
7 - Windows 命令改为 cmd /C 友好写法
84. 复制 EXE/BOF/PS1 到 EasyShell插件集/tools 或 scripts/
95. 合并进 modules/*.json,更新 main.json 的 order
106. 控制台重新加载并实测
8.5 转换案例
案例 1 — 简单命令:
CNA:
item "systeminfo" {
bshell($1, "systeminfo");
}
JSON:
1{
2"label":"systeminfo",
3"steps":[{"type":"shell","command":"systeminfo"}]
4}
案例 2 — 带参数:
CNA:
item "Ping 扫描" {
$subnet = prompt_text($1, "subnet", "网段前三段", "192.168.1");
bshell($1, "for /L %i in (1,1,254) do @ping -n 1 -w 100 $subnet.%i");
}
JSON:
1{
2"label":"Ping 扫描",
3"params":[
4{"key":"subnet","label":"网段前三段","placeholder":"192.168.1","required":true}
5],
6"steps":[
7{
8"type":"shell",
9"command":"for /L %i in (1,1,254) do @ping -n 1 -w 100 {{subnet}}.%i | findstr /i \"TTL=\""
10}
11]
12}
案例 3 — .NET 程序集:
CNA:bexecute_assembly($bid, script_resource("scripts/Tool.exe"), $args)
步骤:
- 复制
Tool.exe→EasyShell插件集/tools/Tool.exe - JSON:
1{
2"type":"memory_exec",
3"relPath":"EasyShell插件集/tools/Tool.exe",
4"mode":"execute-assembly",
5"pluginOs":"windows",
6"args":"{{args}}"
7}
案例 4 — BOF:
CNA:beacon_inline_execute + wifipasswords.o
步骤:
- 复制
.o→EasyShell插件集/tools/wifipasswords.o - JSON:
1{
2"type":"memory_exec",
3"relPath":"EasyShell插件集/tools/wifipasswords.o",
4"mode":"inline-execute",
5"pluginOs":"windows",
6"args":""
7}
8.6 转换后检查清单
-
main.json的
order已包含新模块名 -
tools//
scripts/中文件已就位 -
relPath路径正确(正斜杠,以
EasyShell插件集/开头) -
高危项已加
confirm -
控制台重新加载后菜单可见、执行有回显
更完整的 CNA 案例与 AI 辅助转换:仓库内
skills/cna-to-easyshell/(供 Cursor AI 等使用)。
9. 常见问题
| 现象 | 可能原因 | 处理办法 |
| — | — | — |
| 菜单为空 | 未登录、Extensions 路径不对 | 确认已登录;检查 easyshell.exe 同级是否有 Extensions/ |
| 某项不显示 | 系统不匹配 | 检查 JSON 中 platforms 是否包含当前主机会话系统 |
| 执行无回显 | 主机休眠长、离线 | 点输出坞「刷新」;确认主机在线 |
| memory_exec 报错 400 | 文件缺失、位数不匹配 | 核对 tools/ 是否有对应文件;x86/x64 是否与会话一致 |
| 执行后短暂掉线 | 大 EXE 同进程 Donut | 提供同名 .o BOF,或改用 execute-assembly |
| schtasks / reg 失败 | 引号问题 | 参数用 {{变量}} 模板,勿在弹窗中手填多余引号 |
| PowerView 等 PS1 失败 | 脚本未部署 | 检查 scripts/ 路径与 relPath 是否一致 |
| 修改 JSON 不生效 | 未刷新 | 脚本菜单页点击 重新加载配置 |
附录:文件位置速查
| 路径 | 说明 |
| — | — |
| Extensions/EasyShell插件集/ | 内置插件包 |
| Extensions/EasyShell插件集/main.json | 模块加载顺序 |
| Extensions/EasyShell插件集/modules/*.json | 菜单定义 |
| Extensions/EasyShell插件集/tools/ | 内存执行二进制 |
| Extensions/EasyShell插件集/tools/MANIFEST.txt | 工具清单说明 |
| tools/convert_cna_to_manifest.py | CNA 自动转换脚本(让ai参考,直接修改复用即可) |
文档版本:与 EasyShell Extensions 脚本菜单功能同步维护。
关注渗透云记公众号,回复”20260611″获取EasyShell插件集合与转化skills
建议配合最新版本EasyShell 2.0进行食用更香哦
使用效果可以简单参考一下演示视频
已关注
关注
重播 分享 赞
关闭
观看更多
更多
退出全屏
切换到竖屏全屏退出全屏
渗透云记已关注
分享视频
,时长03:32
0/0
00:00/03:32
切换到横屏模式
继续播放
[ ]
进度条,百分之0
播放
00:00
/
03:32
03:32
倍速
全屏
倍速播放中
0.5倍 0.75倍 1.0倍 1.5倍 2.0倍
超清 流畅
继续观看
EasyShell Extensions 脚本菜单 — 用户使用手册
观看更多
原创
,
EasyShell Extensions 脚本菜单 — 用户使用手册
渗透云记已关注
分享点赞在看
已同步到看一看写下你的评论
视频详情
往期精彩:
【工具更新】EasyShell v2.0 版本更新,新增网络拓扑探索,优化内网多级网络上线,修复shellcode无法加载等诸多bug
【工具更新】EasyShell v1.9版本更新,修复存在的bug,提高程序稳定性与免杀能力
【工具更新】EasyShell v1.8版本更新,重构客户端,减小体积的同时增强免杀效果
【工具更新】EasyShell v1.7版本更新,修复诸多bug,同时新增诸多新功能
默连(morelian) 简简单单的webshell管理工具(支持常规的代码执行,文件管理等,默认支持http与socks代理,支持gui与浏览器两种运行方式)
EasyTools渗透测试工具箱V2.2.2更新(1.新增云上安全,支持oss存储桶扫描、云存储管理与云服务管理;2. 修复数据库连接bug )
鄙人的一个小博客 渗透云记,
官网地址:www.encenc.com
博客地址:b.encenc.com
目前已集成EasyTools渗透测试工具箱的登录,Webshell_Agent AI自动生成平台的登录等,一个账号,多平台联动使用。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:渗透云记 沐寒 沐寒《EasyShell Extensions 脚本菜单 — 用户使用手册》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论