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, 内存分配, 协议分析, 取证, 句柄查看, 安全演练, 技术博客, 提权, 权限提升, 漏洞复现, 网络协议分析, 网络安全, 防御工具, 隐私保护