1. AWDplus赛制深度解析第一次参加AWDplus比赛的朋友可能会被它的赛制搞得晕头转向。和传统CTF不同AWDplus更像是真实世界的网络攻防战。我去年参加陇警杯时就深有体会这种既要攻击别人又要保护自己的双线作战模式简直让人肾上腺素飙升。比赛的核心机制其实很简单每个战队都有自己的一套靶机系统包含Web和Pwn两类题目。你需要做两件事一是找到其他战队的漏洞获取flag攻击二是修补自己系统的漏洞防止被攻击防御。最刺激的是这两个动作要在同一时间进行而且每20分钟就会刷新一轮积分。积分规则特别有意思采用的是动态计分。攻击得分取决于你能攻破多少战队防御得分则看你能否守住自己的阵地。但要注意服务器如果因为你的修复操作崩溃了那可是要扣分的我就吃过这个亏有一次急着上传修复包结果把整个服务搞挂了一轮就被扣了200分。2. Web攻防实战技巧2.1 XSS漏洞攻防在陇警杯的Web题中XSS是最常见的漏洞之一。我记得有个题目是网抑云音乐系统的评论区攻击者可以通过注入恶意脚本获取管理员cookie。防御方法其实很简单关键是要做好输入过滤。我当时采用的防御策略是双重过滤首先用正则表达式过滤掉所有尖括号和然后把特殊字符都转义成HTML实体。这样即使攻击者尝试注入JavaScript代码也会被转义成普通文本显示。具体实现代码是这样的function xss_filter($input) { $input str_replace([, ], , $input); return htmlspecialchars($input, ENT_QUOTES); }但要注意过滤规则不能太严格否则可能影响正常功能。比如有些题目需要用户提交HTML格式的内容这时候就需要更精细的过滤策略。2.2 SQL注入防御SQL注入是另一个重灾区。在login_as_admin这道题中我们发现后台登录存在盲注漏洞。防御SQL注入的关键是理解原始SQL语句的结构。通过分析源码我们发现查询语句是这样的$sql SELECT * FROM users WHERE username.$_POST[username]. AND password.md5($_POST[password]).;这里明显存在单引号闭合问题。我们的防御方案是构建一个WAF过滤器主要做了三件事过滤所有单引号和双引号禁用危险SQL关键字如select、union等对输入进行严格的类型检查最终的过滤规则长这样$filter /xml|extractvalue|regexp|copy|read|file|create|grand|dir|insert|link|server|drop||||;|select|union|flag|ascii|subm|right|\|\^|\||\ /i;3. Pwn题目攻防策略3.1 二进制漏洞分析Pwn题和Web题完全不同它考察的是对二进制程序漏洞的利用能力。在陇警杯中我们遇到的一个典型Pwn题是栈溢出漏洞。攻击者可以通过精心构造的输入覆盖返回地址从而控制程序执行流程。防御这类漏洞需要从编译和运行两个层面入手。首先在编译时开启所有保护选项gcc -fstack-protector-all -pie -fPIE -z now -o target target.c其次在程序运行时实施ASLR地址空间布局随机化echo 2 /proc/sys/kernel/randomize_va_space3.2 修复包制作技巧比赛中最关键的一环是制作修复包。根据规则修复包必须是tar.gz格式且必须包含一个update.sh脚本。这个脚本负责将修复文件部署到正确位置。我通常这样组织修复包fix_package/ ├── update.sh ├── web/ │ └── index.php └── pwn/ └── targetupdate.sh脚本内容示例#!/bin/bash cp web/index.php /var/www/html/ chmod 755 pwn/target mv pwn/target /home/ctf/记住一定要给update.sh执行权限chmod x update.sh4. 团队协作与战术选择4.1 分工策略在AWDplus比赛中合理的分工至关重要。我们团队通常采用三三制1人负责Web题攻击1人负责Web题防御1人负责Pwn题攻防剩下1人作为自由人随时支援薄弱环节这种分工确保了每个方向都有专人负责又能保持灵活应变。特别是在最后几轮当题目难度突然加大时自由人的作用就凸显出来了。4.2 动态积分应对由于积分是动态变化的战术选择要随时调整。我们的经验法则是前期优先修复容易的漏洞快速积累防御分中期集中火力攻击得分高的题目后期保守为主确保不丢分特别要注意的是不要贪多嚼不烂。有时候专注做好一两道题的攻防比全面铺开效果更好。我就见过有战队试图同时攻击所有题目结果一个flag都没拿到反而因为服务器崩溃被扣了很多分。5. 常见踩坑与应急处理5.1 修复包上传陷阱新手最容易犯的错误就是修复包格式不对。一定要确保包名格式正确xxx.tar.gzupdate.sh位于根目录所有文件路径正确update.sh有执行权限有一次我们花了整整一轮时间debug最后发现是update.sh的换行符用了Windows格式导致在Linux环境下无法执行。现在我们都习惯先用dos2unix转换一下。5.2 服务器崩溃应急如果修复导致服务器崩溃一定要立即处理首先尝试一键恢复正常如果不行考虑回滚修复包实在解决不了就重置靶机但注意次数有限记住服务器异常状态会持续扣分所以必须在本轮内解决。我们团队专门制定了应急预案确保任何时候都有人能立即响应服务器异常。