1. 什么是AWD线下攻防赛?
AWD(Attack With Defense)攻防赛是一种结合攻击与防守的网络安全竞赛形式。与传统的CTF(Capture The Flag)比赛不同,AWD更贴近真实攻防场景,参赛队伍需要在保护自己服务器不被攻破的同时,尝试攻击其他队伍的服务器获取flag。
我第一次参加AWD比赛是在2018年的某次省级网络安全竞赛,当时我们团队三个人面对这种实时对抗模式完全手忙脚乱。比赛开始不到10分钟,我们的Web服务就被植入了后门,整个比赛过程就是在不断"救火"。这种惨痛经历让我深刻认识到:AWD比赛不仅考验技术实力,更是对团队协作和应急响应能力的全面检验。
2. AWD比赛的典型环境搭建
2.1 常见比赛拓扑结构
大多数AWD比赛采用类似下面的网络架构:
[参赛队A] ←→ [中心交换机] ←→ [参赛队B] ↑ ↑ ↑ Flag服务器 计分系统 Web漏洞环境每支队伍会获得:
- 1-3台Linux服务器(通常Ubuntu/CentOS)
- 1个Web应用(常见如Discuz、WordPress等)
- 特定端口服务(如SSH、FTP)
- 统一的初始密码(需要第一时间修改)
2.2 比赛中的重要服务
根据我的参赛经验,这些服务最常出现攻防点:
| 服务类型 | 常见漏洞 | 防守重点 |
|---|---|---|
| Web应用 | SQL注入、文件上传、RCE | WAF规则、权限控制 |
| SSH服务 | 弱密码、暴力破解 | 密钥登录、fail2ban |
| 数据库 | 未授权访问、注入 | 权限隔离、备份机制 |
| 系统层 | 提权漏洞、后门 | 补丁更新、进程监控 |
3. 赛前准备:必须掌握的技能清单
3.1 攻击技能树
信息收集:
- 使用nmap进行端口扫描(
nmap -sV -Pn 目标IP) - 目录爆破工具(dirsearch、gobuster)
- 指纹识别(WhatWeb、Wappalyzer)
- 使用nmap进行端口扫描(
漏洞利用:
- SQL注入:sqlmap自动化利用
- 文件上传:绕过前端验证、Content-Type欺骗
- RCE漏洞:命令注入、反序列化利用
权限维持:
- WebShell管理(蚁剑、冰蝎)
- 后门植入(crontab定时任务、.ssh/authorized_keys)
- 隐藏进程(nohup、screen)
3.2 防守技能树
系统加固:
# 修改默认SSH端口 sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config # 禁用root远程登录 echo "PermitRootLogin no" >> /etc/ssh/sshd_config # 安装fail2ban防爆破 sudo apt install fail2banWeb防护:
- Nginx/Apache配置安全头
- 使用ModSecurity添加自定义规则
- 定期检查网站目录文件完整性
监控预警:
# 实时监控系统进程 watch -n 1 'ps aux | grep -v grep' # 检查异常网络连接 netstat -antp | grep ESTABLISHED
4. 比赛中的实战策略
4.1 开局黄金5分钟
比赛开始后的前5分钟至关重要,我通常会按这个顺序操作:
修改所有默认密码:
- SSH密码、数据库密码、Web后台密码
- 使用
passwd命令修改系统账户密码
备份关键文件:
tar -zcvf backup.tar.gz /var/www/html /etc/nginx关闭非必要服务:
systemctl stop vsftpd systemctl disable vsftpd建立监控机制:
# 监控网站目录文件变化 watch -n 1 'ls -la /var/www/html | grep -v "cache\|log"'
4.2 攻防节奏控制
根据多次参赛经验,我总结出这样的时间分配建议:
| 比赛阶段 | 时间占比 | 重点工作 |
|---|---|---|
| 0-15分钟 | 30% | 系统加固、漏洞修复 |
| 15-30分钟 | 20% | 攻击尝试、获取flag |
| 30分钟后 | 50% | 持续监控、应急响应 |
重要提示:不要一开始就全力攻击,先确保自己的服务稳定。我见过太多队伍因为专注攻击而忽略防守,最后被反向攻破。
5. 常见攻防场景与应对方案
5.1 WebShell查杀与防护
攻击手法:
- 通过文件上传漏洞植入WebShell
- 利用文件包含执行恶意代码
防御方案:
// 在php.ini中禁用危险函数 disable_functions = exec,passthru,shell_exec,system查杀技巧:
# 查找最近修改的php文件 find /var/www/html -name "*.php" -mtime -1 # 检查文件内容特征 grep -r "eval(" /var/www/html5.2 不死马处理方案
不死马是AWD比赛中最让人头疼的后门形式,它会:
- 通过crontab定时恢复
- 监控自身文件并自动修复
- 多进程互相守护
根除步骤:
# 1. 停止所有php进程 killall -9 php # 2. 删除恶意文件 find /var/www/html -name "*.php" -exec rm -f {} \; # 3. 清理crontab crontab -r5.3 数据库安全加固
常见问题:
- 默认空密码
- 允许远程连接
- 敏感表未加密
加固命令:
-- 修改root密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; -- 删除匿名账户 DELETE FROM mysql.user WHERE User=''; -- 禁止文件导出 SET GLOBAL secure_file_priv = '/tmp';6. 团队协作与工具链
6.1 团队分工建议
根据我们团队的经验,这种分工效率最高:
防守专员:
- 负责系统加固
- 监控异常行为
- 漏洞修复
攻击手:
- 研究漏洞利用
- 编写自动化脚本
- 获取flag提交
指挥员:
- 协调攻防节奏
- 决策资源分配
- 处理突发情况
6.2 实用工具推荐
防守工具:
- Lynis:系统安全审计
- Chkrootkit:rootkit检测
- Rkhunter:后门扫描
攻击工具:
- SQLMap:自动化SQL注入
- Metasploit:漏洞利用框架
- Cobalt Strike:红队协作平台
监控工具:
- Glances:实时系统监控
- GoAccess:Web日志分析
- Osquery:端点检测
7. 赛后复盘与提升建议
每次比赛后,我们团队都会做这些复盘工作:
攻击路径分析:
- 检查被攻破的入口点
- 重现攻击者利用链
防守漏洞总结:
- 哪些防护措施失效了
- 应急响应是否及时
工具脚本优化:
- 自动化脚本的改进空间
- 常用命令封装成快捷方式
知识库更新:
- 记录新发现的漏洞利用方式
- 补充防守checklist
我强烈建议建立一个本地知识库,内容可以包括:
- 常见漏洞修复方案
- 应急响应流程
- 工具使用手册
- 比赛经验记录
8. 给新手的实用建议
结合我带新人的经验,这些建议能帮你少走弯路:
不要依赖图形界面:
- 比赛环境通常只有命令行
- 提前熟悉vim、nano等编辑器
建立自己的工具包:
# 我常用的工具目录结构 ~/tools/ ├── exploit/ # 漏洞利用脚本 ├── scanner/ # 扫描工具 └── defense/ # 防守脚本学会快速文档检索:
- 提前收藏关键文档(如Linux命令大全)
- 使用
cheat.sh快速查询命令用法
保持冷静心态:
- 被攻击时不要慌乱
- 按照预案逐步排查
- 及时与队友沟通情况
最后分享一个真实案例:在某次比赛中,我们发现系统每隔5分钟就会重新被植入后门,经过层层排查,最终发现攻击者利用了sudoers文件的配置漏洞。这个经历让我明白:在AWD比赛中,细节决定成败,每一个配置项都可能是攻防的关键点。