verygoodsecbadsec/ctf-sniffer-flag-finder
GitHub: verygoodsecbadsec/ctf-sniffer-flag-finder
一个基于Bash和tshark的轻量级CTF流量嗅探工具,用于实时抓包或分析PCAP文件并快速搜索flag等关键模式。
Stars: 0 | Forks: 0
# ctf-sniffer-flag-finder
在 CTF 比赛中,flag 通常以明文形式在网络中传输,例如 HTTP 响应、UDP 数据报、自定义 TCP 服务。此脚本封装了 `tshark`,提供了一个简洁的界面,用于在实时接口上捕获流量、读取现有的 pcap 文件,并搜索任何 flag 模式。匹配结果可以导出为新的 pcap 文件,以便在 Wireshark 中进行更深入的分析。
```
$ sudo ./ctf-sniffer-flag-finder.sh -i eth0 -p "CTF{" -t 60 -e found.pcap
[*] Interface: eth0
[*] Traffic will be saved to: capture_20240812_143022.pcap
[*] Starting tshark on eth0 (all traffic)
[*] Capture will stop after 60 seconds.
[*] Capturing... (Ctrl+C to stop)
[*] Stopping capture...
[*] Capture saved to capture_20240812_143022.pcap
[*] String search: CTF{
[*] Found 3 matching packet(s):
12 TCP 10.0.0.5 10.0.0.1 54321 80
47 HTTP 10.0.0.5 10.0.0.1 54321 80
91 UDP 10.0.0.8 10.0.0.1 1337 1337
[*] Exporting matches to found.pcap
[*] Export successful.
```
## 工作原理
脚本在以下两种模式之一下运行:
**捕获模式** (`-i`) 在网络接口上启动实时的 `tshark` 捕获,将其保存到带有时间戳的 pcap 文件中,然后在捕获结束时搜索记录的流量。需要 root 权限。
**文件模式** (`-F`) 直接读取现有的 pcap 文件,完全跳过捕获步骤。
在这两种情况下,搜索都使用 tshark 显示过滤器——可以是用于明文字符串匹配的 `frame contains`,或者是用于 Wireshark 风格正则表达式的 `frame matches`。结果会输出到标准输出,并可选择导出为仅包含匹配数据包的过滤后的 pcap 文件。
## 安装
### 依赖
此脚本仅需要 `tshark`(Wireshark 的命令行组件)。
```
# Debian / Ubuntu
sudo apt install tshark
# Arch Linux
sudo pacman -S wireshark-cli
```
验证安装:
```
tshark --version
```
### 脚本设置
```
git clone https://github.com/verygoodsecbadsec/ctf-sniffer-flag-finder.git
cd ctf-sniffer-flag-finder
chmod +x ctf-sniffer-flag-finder.sh
```
## 使用方法
```
Capture mode: sudo ./ctf-sniffer-flag-finder.sh -i [options]
File mode: ./ctf-sniffer-flag-finder.sh -F [options]
```
### 选项
| 标志 | 参数 | 描述 |
|------|----------|-------------|
| `-i` | `` | 用于捕获的网络接口(需要 root 权限) |
| `-F` | `` | 要搜索的现有 pcap 文件 |
| `-p` | `` | 要搜索的 flag 模式——明文或正则表达式 |
| `-r` | — | 启用正则表达式匹配(Wireshark 显示过滤器语法) |
| `-e` | `` | 将匹配的数据包导出到新的 pcap 文件 |
| `-f` | `` | BPF 捕获过滤器,例如 `tcp port 80`(仅限捕获模式) |
| `-t` | `` | 在 N 秒后自动停止捕获(仅限捕获模式) |
| `-v` | — | 详细输出——显示包括 payload 在内的完整数据包详情 |
| `-q` | — | 安静模式——抑制信息输出 |
| `-h` | — | 显示帮助 |
## 模式
### 捕获模式
记录网络接口上的实时流量。需要 `sudo`。捕获会一直运行,直到您按下 `Ctrl+C` 或达到 `-t` 设置的超时时间。pcap 将保存为当前目录下的 `capture_YYYYMMDD_HHMMSS.pcap`,然后自动进行搜索。
```
sudo ./ctf-sniffer-flag-finder.sh -i eth0 -p "CTF{"
```
### 文件模式
读取现有的 pcap 文件。不需要 root 权限。适用于您已经拥有来自 Wireshark、`tcpdump` 或挑战下载的捕获文件时使用。
```
./ctf-sniffer-flag-finder.sh -F challenge.pcap -p "CTF{"
```
### 交互模式
如果省略 `-p`,脚本将在捕获或加载文件后进入交互循环。您可以按顺序搜索多个模式,为每次搜索切换正则表达式,并选择将每个匹配集导出到不同的文件中——而无需每次都重新读取 pcap。
```
./ctf-sniffer-flag-finder.sh -F challenge.pcap
# 交互式提示您输入 patterns
# 输入 'q' 退出
```
## 搜索语法
### 明文搜索(默认)
在整个数据包帧中的任何位置搜索文字字符串。区分大小写。
```
-p "CTF{"
-p "flag{"
-p "password="
```
### 正则表达式搜索 (`-r`)
使用 Wireshark 显示过滤器正则表达式语法(POSIX ERE,而非 PCRE)。支持锚点、字符类和交替。不支持先行断言。
```
-r -p "CTF\{[A-Za-z0-9_]+\}"
-r -p "(flag|FLAG)\{.*\}"
-r -p "Authorization: Basic [A-Za-z0-9+/]+"
```
## 输出
匹配的数据包将以表格形式打印显示:
| 列 | 字段 |
|--------|-------|
| 帧编号 | `frame.number` |
| 协议 | `_ws.col.Protocol` |
| 源 IP | `ip.src` |
| 目标 IP | `ip.dst` |
| 源端口 | `tcp.srcport` |
| 目标端口 | `tcp.dstport` |
最多显示 50 个匹配的数据包。如果超过此数量,则会显示总数。
在详细输出模式 (`-v`) 下,输出中将包含完整的 `data.text` 和 `tcp.payload` 字段。
## 导出
`-e` 标志将所有匹配的数据包写入一个新的 pcap 文件。可以在 Wireshark 中打开此文件以进行更深入的检查,或将其作为使用不同模式进行二次筛选的输入,亦或与队友共享。
```
./ctf-sniffer-flag-finder.sh -F challenge.pcap -p "CTF{" -e matches.pcap
```
如果导出文件已存在,它将被覆盖并发出警告。
## 详细级别
| 标志 | 级别 | 输出 |
|------|-------|--------|
| `-q` | 0 | 仅错误 |
| (默认) | 1 | 信息消息 + 数据包表格 |
| `-v` | 2 | 包括 payload 字段在内的完整数据包详情 |
## 为什么使用此脚本
- 不,真正的问题是,当您参与一项项目时,您是否会去寻找 flag?
- 当然,没有任何 CTF 或挑战(此脚本在 Web CTF 中非常有用)是一项真正的实战项目,但将其视为实战将是攻破目标(即找到漏洞)的必经之路。
- 通过使用此脚本,您的注意力会从仅仅试图弹出一个 flag,转变为以正常方式遵循您的方法论和笔记,而无需再为 flag 担忧。
- 通过这样做,您不仅进行了练习,还在过程中不断捕获 flag(其背后的真正目的是将心态从 flag 猎人转变为漏洞猎人)。
## 限制
- **正则表达式语法**是 Wireshark 显示过滤器正则表达式,而不是 PCRE。诸如先行断言 (`(?=...)`) 和非贪婪量词等功能不受支持。如果不确定,请先在 Wireshark 中测试模式。
- **加密流量**(没有密钥日志的 TLS)不会产生明文 flag。对于 TLS,您需要会话密钥日志文件和 Wireshark 的 TLS 解密支持——此脚本不处理解密。
- **大型 pcap 文件**可能会导致搜索结果变慢,因为在交互模式下,`tshark` 会在每次查询时重新读取整个文件。
- **实时捕获的磁盘使用量**——大规模捕获会迅速填满磁盘。请在捕获时使用 `-f` 应用 BPF 过滤器以限制范围,并使用 `-t` 限制捕获持续时间。
- 此脚本仅旨在**用于 CTF 比赛和受控实验室环境中的授权使用**。
## 法律声明
此工具仅旨在用于 CTF 比赛、安全研究和受控测试环境中的授权使用。在您不拥有或未获得明确授权进行监控的网络上捕获流量在大多数司法管辖区都是非法的。作者对未经授权的使用不承担任何责任。
## 许可证
- 此项目基于 MIT 许可证授权——有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:CTF解题工具, Flag提取, meg, PCAP分析, tshark, Windows内核, Wireshark, 信息安全, 句柄查看, 应用安全, 数字取证, 模式匹配, 流量监控, 白帽子, 网络协议分析, 网络安全, 自动化脚本, 自动化资产收集, 防御绕过, 隐私保护