EasyShell Extensions 脚本菜单 — 用户使用手册

easyshell Extensions 脚本菜单 — 用户使用手册

本文是 Extensions 脚本菜单 的统一说明,涵盖:部署使用、内置插件集、自定义 JSON 插件编写,以及从 Cobalt Strike CNA 迁移。
适用于操作人员与需要扩展菜单的用户。


目录

  1. 简介
  2. 快速开始
  3. 控制台使用
  4. 内置插件集
  5. 执行方式与输出
  6. 内存执行
  7. 自定义插件
  8. 从 CNA 迁移
  9. 常见问题

1. 简介

1.1 是什么

Extensions 脚本菜单 是 EasyShell Web 控制台中的右键扩展能力:在已上线主机上,通过树形菜单一键下发命令、内存执行工具、凭据抓取等操作。

  • 配置以 JSON 文件 描述,放在服务端 Extensions/ 目录
  • 不解析 Cobalt Strike 的 .cna(Sleep 脚本);CNA 需转换为 JSON 后使用
  • 与交互式 Shell 分离:菜单执行走 非交互通道,结果在 输出坞 展示

1.2 与 Cobalt Strike CNA 的区别

项目Cobalt Strike CNAEasyShell Extensions
运行环境CS 客户端 + Sleep 运行时Web 控制台 + 静态 JSON
命令下发bshell / beacon_*shell / memory_exec 等步骤
工具路径script_resource()relPath(相对 Extensions/,正斜杠)
执行方式Beacon 交互控制台cmd.exe /C 非交互 + 输出坞轮询

2. 快速开始

2.1 目录结构

Extensions 文件夹放在 easyshell 服务端程序同级(与 easyshell.exe 同目录):

easyshell.exe
easyshell.db
Extensions/
  EasyShell插件集/              ← 内置插件包(推荐直接使用)
    main.json                   ← 菜单入口与模块加载顺序
    modules/                    ← 各分类菜单 JSON
      Windows信息收集.json
      权限提升.json
      ...
    tools/                      ← 内存执行二进制(部分需自行放入)
    scripts/                    ← PowerShell 等脚本

若程序同级没有 Extensions/,服务端会回退到启动时工作目录下的 Extensions/(便于开发调试)。

2.2 加载菜单

  1. 登录 Web 控制台
  2. 选中已上线客户端,进入 脚本菜单
  3. 点击 重新加载配置(或重新进入该页面,会自动刷新)

菜单会按主机系统(Windows / Linux / macOS)和架构自动过滤显示项。

2.3 执行一项插件

  1. 在左侧菜单树点击 叶子菜单(最底层一项)
  2. 若需要参数,在弹窗中填写(如端口、网段、路径)
  3. 若有危险操作提示,确认后继续
  4. 页面底部 输出坞 自动展开并轮询显示执行结果

3. 控制台使用

3.1 脚本菜单页

操作说明
点击菜单项对当前选中会话下发对应步骤
参数弹窗填写后替换命令中的 {{参数名}}
二次确认高危项(提权、持久化等)会先弹出确认框
输出坞展示命令回显;可在此继续输入命令
重新加载配置修改 JSON 后点此刷新,无需重启服务

3.2 输出坞与 Shell 的关系

  • 脚本菜单执行结果写入 会话缓冲区,在输出坞以文本形式展示
  • 客户端 Shell → 非交互式 共用同一缓冲区
  • 不会混入交互式 PTY(xterm)输出,避免乱序

慢链路(如 DNS Beacon)回显可能延迟,可点 刷新输出;最长轮询约 13 分钟。

3.3 输出坞中直接内存执行

在输出坞或 非交互式终端 命令框中,可直接输入(不要shell 前缀):

memory-exec EasyShell插件集/tools/fscan.exe -h 192.168.1.0/24
memory-exec EasyShell插件集/tools/postex_helper.exe inline-bin getsystem 3

语法:memory-exec <Extensions相对路径> [模式] [参数...]


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.exegetsystem、rev2self 等(构建产物,自带)
bof_helper.exeBOF 内联执行(构建产物,自带)
fscan.exe / fscan.o内网扫描(有 .o 时优先 BOF,更稳定)
mimikatz.exe凭据抓取
AdFind.exe / SharpHound.exe域信息
hack-browser-data.exe / lazagne.exe本地凭据
其他 .exe / .o按菜单说明按需放入

5. 执行方式与输出

5.1 步骤类型一览

插件每一项(叶子菜单)由一条或多条 步骤 组成:

类型作用典型场景
shell在目标机执行命令whoaminetstatschtasks
cd切换工作目录进入指定路径后再执行
log输出提示文字标记阶段开始/说明
delay等待若干毫秒多步链之间留间隔
memory_exec内存加载执行文件EXE、BOF、PS1、ELF
credentials_refresh刷新控制台凭据库抓取后同步到凭据页
search_sensitive敏感文件扫描搜索配置、密钥等
dump_browser浏览器密码协议Chromium 系密码

5.2 Windows 命令注意事项

菜单中的 shell 命令经 cmd.exe /C 非交互执行,请注意:

  1. 路径含空格:用引号,如 "C:\Program Files\app.exe"
  2. sc 服务命令binPath=start=等号后要有空格
  3. schtasks:任务名和 /TR 路径建议加引号
  4. for /L %i:在菜单命令里写 %i(不是 %%i
  5. 避免交互命令doskey /historymore 等无效或会卡住
  6. 慢命令:避免 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/DLLCLR 内存加载
inline-bin原生 PEDonut 或侧车子进程执行
inline-execute.o BOF轻量 COFF,推荐 x64 会话
powershell.ps1脚本内存执行
shellcode-inject.raw裸 shellcode
elfLinux 无扩展名二进制Linux 无盘执行

服务端会自动优化以降低掉线概率:

  • 有同名 .o 时优先走 BOF(inline-execute
  • 检测到 .NET 程序自动改用 execute-assembly
  • 大体积 PE 或 postex_helper 走侧车 spawn,不经 Donut 同进程

6.2 高危能力正确用法

能力正确做法错误做法
getsystemmemory_exec + postex_helper.exe,参数 getsystem 3shell getsystem 文本命令
Mimikatzmemory_exec + mimikatz.exe + 参数串交互式 mimikatz 输入
浏览器密码dump_browser 步骤

getsystem 说明: 成功后植入体会以 SYSTEM 令牌自动重启并接替当前会话(同 uid 重连),控制台无需重新选中主机。成功标志:[+] token elevation succeeded[+] elevated implant relaunched

6.3 配置示例

fscan(EXE + BOF 优先):

{
  "type": "memory_exec",
  "relPath": "EasyShell插件集/tools/fscan.exe",
  "bofRelPath": "EasyShell插件集/tools/fscan.o",
  "preferBof": true,
  "mode": "inline-bin",
  "pluginOs": "windows",
  "args": "{{args}}"
}

getsystem:

{
  "type": "memory_exec",
  "relPath": "EasyShell插件集/tools/postex_helper.exe",
  "mode": "inline-bin",
  "pluginOs": "windows",
  "args": "getsystem 3"
}

relPath 使用正斜杠,前缀为包名 EasyShell插件集/args 按程序命令行原样传递,不要额外套 cmd 引号。


7. 自定义插件

7.1 包结构

可在 Extensions/ 下新增自己的插件包(文件夹),或直接向 EasyShell插件集 追加菜单。

Extensions/
  我的插件包/
    main.json
    modules/
      自定义功能.json
    tools/
    scripts/

main.json 示例:

{
  "menu": "我的插件包",
  "order": [
    "自定义功能"
  ]
}
  • menu:右键菜单根名称
  • order:子模块文件名(不含 .json),顺序即菜单展开顺序
  • 新增模块后必须把名称加入 order,否则不会加载

7.2 模块 JSON 结构

{
  "version": 1,
  "platforms": ["windows"],
  "roots": [
    {
      "label": "自定义功能",
      "children": [
        {
          "label": "分组一",
          "children": [
            {
              "label": "查看当前用户",
              "steps": [
                { "type": "shell", "command": "whoami /all" }
              ]
            },
            {
              "label": "按端口查连接",
              "params": [
                { "key": "port", "label": "端口", "placeholder": "443", "required": true }
              ],
              "steps": [
                { "type": "shell", "command": "netstat -ano | findstr {{port}}" }
              ]
            }
          ]
        }
      ]
    }
  ]
}

7.3 常用字段

字段说明
label菜单显示名称
children子菜单(分支节点)
steps执行步骤(叶子节点)
params参数:keylabelplaceholderdefaultrequired
confirm执行前确认提示文案
platformswindows / linux / darwin / all,可写在任意节点

7.4 完整叶子节点模板

{
  "label": "示例菜单",
  "confirm": "确定执行?",
  "params": [
    { "key": "target", "label": "目标", "placeholder": "192.168.1.1", "required": true }
  ],
  "steps": [
    { "type": "log", "text": "开始执行", "echo": true },
    { "type": "shell", "command": "ping -n 2 {{target}}" },
    { "type": "delay", "ms": 500 },
    {
      "type": "memory_exec",
      "relPath": "EasyShell插件集/tools/工具.exe",
      "mode": "inline-bin",
      "pluginOs": "windows",
      "args": "{{target}}"
    }
  ]
}

修改 JSON 后,在控制台点击 重新加载配置 即可生效。

7.5 并入内置插件集的建议

若扩展的是官方分类,建议合并进 EasyShell插件集/modules/ 对应文件,而不是新建独立包:

功能类型合并到
主机/网络枚举Windows信息收集.json
扫描探测Windows内网探测.json
域与 ADWindows域环境.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 对照

CNAEasyShell 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 / 简单 dialogparams + 命令里 {{key}}
bexecute_assemblymemory_exec + execute-assembly
beacon_inline_execute + .omemory_exec + inline-execute
binput + alias找到 alias 实现,转为对应 steps

不易直接迁移的: bdllspawn(反射 DLL)、bupload 落盘链、复杂 if 分支、CS 界面函数(openListenerManager 等)——需改写成内存执行或拆成多个固定菜单项。

8.3 自动转换(初稿)

仓库提供脚本,可批量转换 简单 shell 类 CNA:

python tools/convert_cna_to_manifest.py --pack Extensions/你的插件包
  • 输入:你的插件包/modules/*.cna
  • 输出:同名 modules/*.json
  • 支持:bshellblogbcd、简单 prompt_text
  • 不支持beacon_*、程序集、BOF、复杂 dialog → 需人工补充

8.4 推荐迁移流程

1. 按 CNA 的 menu 划分模块
2. 运行 convert_cna_to_manifest.py 生成 JSON 初稿
3. 手工处理:
   - bexecute_assembly → memory_exec + tools/
   - beacon_inline_execute → .o 放入 tools/ + inline-execute
   - 复杂 dialog → 拆成多个菜单或简化为 params
   - Windows 命令改为 cmd /C 友好写法
4. 复制 EXE/BOF/PS1 到 EasyShell插件集/tools 或 scripts/
5. 合并进 modules/*.json,更新 main.json 的 order
6. 控制台重新加载并实测

8.5 转换案例

案例 1 — 简单命令:

CNA:

item "systeminfo" {
    bshell($1, "systeminfo");
}

JSON:

{
  "label": "systeminfo",
  "steps": [{ "type": "shell", "command": "systeminfo" }]
}

案例 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:

{
  "label": "Ping 扫描",
  "params": [
    { "key": "subnet", "label": "网段前三段", "placeholder": "192.168.1", "required": true }
  ],
  "steps": [
    {
      "type": "shell",
      "command": "for /L %i in (1,1,254) do @ping -n 1 -w 100 {{subnet}}.%i | findstr /i \"TTL=\""
    }
  ]
}

案例 3 — .NET 程序集:

CNA:bexecute_assembly($bid, script_resource("scripts/Tool.exe"), $args)

步骤:

  1. 复制 Tool.exeEasyShell插件集/tools/Tool.exe
  2. JSON:
{
  "type": "memory_exec",
  "relPath": "EasyShell插件集/tools/Tool.exe",
  "mode": "execute-assembly",
  "pluginOs": "windows",
  "args": "{{args}}"
}

案例 4 — BOF:

CNA:beacon_inline_execute + wifipasswords.o

步骤:

  1. 复制 .oEasyShell插件集/tools/wifipasswords.o
  2. JSON:
{
  "type": "memory_exec",
  "relPath": "EasyShell插件集/tools/wifipasswords.o",
  "mode": "inline-execute",
  "pluginOs": "windows",
  "args": ""
}

8.6 转换后检查清单

  • [ ] main.jsonorder 已包含新模块名
  • [ ] 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.pyCNA 自动转换脚本(让ai参考,直接修改复用即可)

文档版本:与 EasyShell Extensions 脚本菜单功能同步维护。

插件集及转换skills下载地址

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容