darkdisaster08/ctf-writeups
GitHub: darkdisaster08/ctf-writeups
一份记录 CTF 挑战赛解题过程的文档仓库,涵盖网络取证、渗透测试、权限提升等网络安全基础技能的实操题解与防御建议。
Stars: 3 | Forks: 0
# 🚩 CTF 挑战赛题解
## 📋 目录
| # | 挑战赛 | 类别 | 工具 | 状态 |
|---|-----------|----------|-------|--------|
| 01 | [从 PCAP 提取隐藏图像与 Flag](#01---hidden-image--flag-extraction-from-pcap) | 网络取证 | Wireshark | ✅ |
| 02 | [Netcat Flag 捕获 — 端口监听器](#02---netcat-flag-capture--port-listener) | 网络渗透 | Netcat | ✅ |
| 03 | [SSH + Snort IDS — Flag 捕获](#03---ssh--snort-ids--flag-capture) | 网络安全 | SSH, Snort | ✅ |
| 04 | [SUID Bit 可执行文件 — 权限提升侦察](#04---suid-bit-executables--privilege-escalation-recon) | 权限提升 | Linux CLI | ✅ |
| 05 | [SCP — 机器间的安全文件传输](#05---scp--secure-file-transfer-between-machines) | 网络 | SCP, SSH | ✅ |
| 06 | [基于 SSH 密钥的身份验证设置](#06---ssh-key-based-authentication-setup) | 网络安全 | ssh-keygen | ✅ |
## 01 - 从 PCAP 提取隐藏图像与 Flag
**类别:** 网络取证 | **工具:** Wireshark
### 目标
从网络数据包捕获中找到并提取隐藏的图像文件,并获取嵌入的 flag。
### 步骤
```
1. Opened capture file in Wireshark
2. File → Export Objects → HTTP
3. Filtered exported objects for image files
4. Previewed extracted image — flag embedded inside
```
### 结果
### 核心要点
- Wireshark 的 Export Objects 功能可以重建通过 HTTP 传输的文件——图像、文档、可执行文件都可以恢复
- 未加密的 HTTP 会暴露所有传输的文件——务必使用 HTTPS
- 网络取证可以从保存的捕获数据中恢复证据(即使事后也可以)
- 此技术被用于真实的事件响应中,以识别数据泄露
### 缓解措施
- 在所有 Web 流量中强制使用 HTTPS
- 在网络边界使用 TLS 检测
- 使用 DLP 工具监控异常的文件传输
## 02 - Netcat Flag 捕获 — 端口监听器
**类别:** 网络渗透 | **工具:** Netcat
### 目标
在目标机器的特定端口上启动 Netcat 监听器并捕获传入的 flag。
### 步骤
```
# 在目标机器上启动监听器
nc -lvp 3535
# 等待传入连接 — Flag 自动发送
```
### 结果
### 核心要点
- Netcat (`nc`) 是网络领域的瑞士军刀——用于监听、连接、文件传输和端口扫描
- `-l` = 监听模式,`-v` = 详细输出,`-p` = 指定端口
- 开放的端口监听器是攻击者在初始入侵后常用的**持久化和后门技术**
- 系统上任何意外的监听端口都应被视为可疑
### 缓解措施
- 定期使用 `netstat -tulpn` 或 `ss -tulpn` 审计开放端口
- 实施基于主机的防火墙规则以阻止未经授权的监听器
- 使用 EDR/IDS 工具检测意外的 Netcat 使用情况
## 03 - SSH + Snort IDS — Flag 捕获
**类别:** 网络安全 | **工具:** SSH, Snort
### 目标
使用基于密钥的身份验证通过 SSH 登录目标机器,在控制台模式下启动 Snort IDS,然后通过 ping 触发警报以捕获 flag。
### 步骤
```
# 步骤 1: 使用私钥认证通过 SSH 连接
ssh user@[target] -i [keyfile]
# 步骤 2: 启动 Snort IDS 监听网络接口
sudo snort -A console -i eth0 -c /etc/snort/snort.conf
# 步骤 3: 从攻击机 — 触发 Snort 规则
ping [target-ip]
# Flag 出现在 Snort 控制台输出中
```
### 结果
### 核心要点
- **Snort** 是一个开源的网络入侵检测系统 (NIDS)——在企业环境中被广泛使用
- `-A console` 模式将警报实时输出到终端——适用于测试和监控
- 如果配置正确,即使是简单的 ICMP ping 也能触发 Snort 规则——这演示了 IDS 规则的工作原理
- SSH 密钥身份验证 (`-i keyfile`) 彻底消除了密码暴力破解的风险
### 缓解措施
- 在关键网段部署 Snort 或 Suricata 作为 NIDS
- 为特定环境的威胁检测编写自定义规则
- 将 IDS 警报与 SIEM 结合以进行集中监控
## 04 - SUID Bit 可执行文件 — 权限提升侦察
**类别:** 权限提升 | **工具:** Linux CLI
### 目标
在 Linux 系统上查找所有设置了 SUID bit 的可执行文件——这是权限提升侦察的关键一步。
### 命令
```
find / -perm -4000 -type f -exec ls -la {} \; 2>/dev/null
```
### 理解命令
```
find / → search entire filesystem
-perm -4000 → find files with SUID bit set
-type f → files only (not directories)
-exec ls -la {} → show detailed permissions for each match
2>/dev/null → suppress permission errors
```
### 如何识别 SUID 文件
在输出中,查找所有者执行位置的 `s`:
```
-rwsr-xr-x → SUID set (runs as file owner, often root)
-rwxr-xr-x → Normal executable (no SUID)
```
### 核心要点
- SUID 文件以**文件所有者的权限**执行——如果由 root 拥有,任何用户都可以以 root 身份运行它
- 查找配置不当的 SUID 二进制文件是标准的后渗透步骤
- 常见的合法 SUID 二进制文件:`passwd`、`sudo`、`ping`——其他任何文件都值得调查
- 像 GTFOBins 这样的工具记录了如何滥用 SUID 二进制文件进行权限提升
### 缓解措施
- 定期审计 SUID 文件并移除不必要的 SUID bit
- 使用 `chmod u-s filename` 移除不需要它的文件的 SUID 属性
- 使用文件完整性监控工具监控 SUID 的更改
## 05 - SCP — 机器间的安全文件传输
**类别:** 网络 | **工具:** SCP, SSH
### 目标
在远程机器上创建一个文件,并使用 SCP 将其安全地传输到本地机器。
### 步骤
```
# 步骤 1: 在远程机器上创建文件
cd /tmp
echo "test content" >> transferfile.txt
# 步骤 2: 确保目标机器上正在运行 SSH 服务
sudo service ssh start
# 步骤 3: 使用 SCP 将文件从远程传输到本地
scp transferfile.txt user@[destination-ip]:/home/user/
```
### SCP 语法参考
```
scp [source-file] [user]@[destination-ip]:[destination-path]
# 远程到本地:
scp user@remote:/path/to/file /local/destination/
# 本地到远程:
scp /local/file user@remote:/path/to/destination/
```
### 核心要点
- SCP (Secure Copy Protocol) 使用 SSH 加密——所有文件数据在传输过程中都是加密的
- 始终优先于以明文形式传输数据的 FTP
- 掌握 SCP 对于事件响应、日志收集和取证数据传输至关重要
- 可以使用 `-r` 参数传输整个目录
### 缓解措施
- 完全禁用 FTP——替换为 SCP 或 SFTP
- 使用 SSH `AllowUsers` 配置限制 SCP 访问
- 记录所有 SCP 传输以用于审计目的
## 06 - 基于 SSH 密钥的身份验证设置
**类别:** 网络安全 | **工具:** SSH, ssh-keygen
### 目标
使用 RSA 密钥对身份验证设置无密码 SSH 登录——用加密密钥替代基于密码的登录。
### 步骤
```
# 步骤 1: 在本地机器上生成 RSA 密钥对
ssh-keygen -t rsa
# 生成: ~/.ssh/id_rsa (私钥) 和 ~/.ssh/id_rsa.pub (公钥)
# 步骤 2: 将公钥复制到目标机器
ssh-copy-id user@[target-ip]
# 将公钥追加到目标的 ~/.ssh/authorized_keys
# 步骤 3: 无密码登录
ssh user@[target-ip]
# 使用私钥进行认证 — 无密码提示
```
### 工作原理
```
Local Machine Remote Machine
┌─────────────────┐ ┌─────────────────┐
│ Private Key │ │ Public Key │
│ (~/.ssh/id_rsa)│◄────────────►│ (authorized_ │
│ NEVER shared │ Handshake │ keys) │
└─────────────────┘ └─────────────────┘
```
### 核心要点
- 私钥保留在你的机器上——**永远不要分享它**
- 公钥可以安全地放置在你想要访问的任何服务器上
- 彻底消除密码暴力破解攻击
- `ssh-copy-id` 自动将公钥添加到正确位置
### 密钥设置后的加固
```
# 在 /etc/ssh/sshd_config 中禁用密码认证
PasswordAuthentication no
PermitRootLogin no
# 重启 SSH 服务
sudo systemctl restart sshd
```
### 缓解价值
- 基于密钥的身份验证 + 禁用密码登录 = SSH 暴力破解攻击变得不可能
- 结合 fail2ban 实现完整的 SSH 加固
## 🛠️ 所有挑战赛使用的工具
`Wireshark` `Netcat` `SSH` `SCP` `Snort` `Kali Linux` `ssh-keygen` `find`
*6个月网络安全专业课程的一部分 — CEH 认证正在进行中(2026年7月)*
标签:CTF题解, HTTPS, Netcat, SSH, SUID, TLS, Wireshark, 内存分配, 协议分析, 取证, 句柄查看, 安全演练, 技术博客, 提权, 权限提升, 漏洞复现, 网络协议分析, 网络安全, 防御工具, 隐私保护