第一次参加CTF-AWD比赛的新手选手,往往会被这种攻防兼备的赛制搞得手忙脚乱。AWD全称Attack With Defense,是一种集攻击与防御于一体的CTF竞赛模式。与传统的CTF解题模式不同,AWD更注重实战对抗,选手需要在保护自己靶机的同时,攻击其他队伍的靶机获取分数。
比赛开始时,每个队伍都会获得一个或多个靶机,通常包含Web服务、SSH访问权限等。关键的30分钟防御阶段是整个比赛的重中之重,这段时间内你需要完成以下工作:
我参加的第一场AWD比赛就犯了个低级错误 - 只顾着找别人的漏洞,结果自己的靶机被种了十几个后门,分数被扣得惨不忍睹。从那以后我明白了一个道理:在AWD比赛中,防御和攻击同等重要,甚至防御更为关键。
拿到靶机信息后的第一步就是建立SSH连接。我习惯使用Xshell+Xftp组合,操作起来非常顺手。具体步骤如下:
连接成功后,立即点击Xftp按钮启动文件传输。我们需要把网站源码下载到本地进行审计。一般网站根目录在/var/www/html,右键选择"传输"将整个目录下载到本地。
这里有个小技巧:传输完成后,立即在服务器上备份原始文件。执行以下命令:
bash复制cp -r /var/www/html /var/www/html_backup
这样即使后续修改出错,也能快速回滚到初始状态。
部署WAF(Web应用防火墙)是防御的关键一环。我推荐使用开源的watchbird,它有以下优势:
部署步骤:
bash复制php watchbird.php --install /var/www/html
实测下来,watchbird能有效拦截大部分常见Web攻击,如SQL注入、XSS等。更重要的是,通过分析攻击日志,你可以学习其他队伍的攻击手法,反过来用于自己的攻击策略。
下载到本地的网站源码需要进行彻底的安全检查。我常用的工具组合是:
使用D盾扫描时,重点关注以下类型的文件:
发现后门后,修复方式通常有三种:
记得每次修改后都要在本地测试功能是否正常,避免修复漏洞导致服务不可用。
对于复杂的代码审计,Seay是个不错的选择。重点关注以下漏洞类型:
我常用的审计流程:
曾经在一次比赛中,我发现了一个隐藏极深的二次注入漏洞,通过精心构造的payload,成功拿到了几乎所有队伍的flag。这种深度审计往往能发现自动化工具找不到的漏洞。
在AWD比赛中,高效的攻击策略往往能让你事半功倍。根据我的经验,最有效的攻击方式包括:
攻击时要注意隐蔽性,避免触发对方的WAF或被监控发现。我常用的技巧是:
手动攻击效率太低,好的自动化脚本能让你在比赛中占据优势。Python是最常用的语言,结合requests库可以快速开发攻击脚本。
一个基础的flag提交脚本框架:
python复制import requests
targets = ['http://team1.com', 'http://team2.com'] # 目标列表
payload = '?cmd=cat /flag' # 攻击payload
for target in targets:
try:
r = requests.get(target + payload, timeout=3)
flag = r.text.strip()
submit_flag(flag) # 提交flag的函数
except:
continue
进阶版的脚本应该包含:
我在GitHub上开源了一个AWD工具箱,包含常用的攻击和防御脚本,可以帮助新手快速上手。记住,好的工具能让你在比赛中节省大量时间。
单纯的漏洞修复还不够,你需要建立持续的监控机制。我推荐以下方案:
bash复制inotifywait -m -r /var/www/html -e modify,create,delete
发现入侵后,不要急于修复,先分析攻击路径,说不定能反制对方。有次比赛我就是通过分析入侵痕迹,找到了攻击者的控制服务器,反过来控制了他们的得分系统。
除了应用层防护,系统层的加固也很重要:
一个实用的iptables规则示例:
bash复制iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT # 只允许内网SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许Web访问
iptables -A INPUT -j DROP # 默认拒绝所有
这些措施看似简单,但在紧张的比赛中能有效阻挡大部分自动化攻击脚本。记得在修改配置前先测试,避免把自己锁在外面。
参加过十几场AWD比赛后,我总结了一些实用小技巧:
最后提醒一点:AWD比赛不仅是技术的比拼,更是心理和体力的较量。合理安排时间,适时休息,保持头脑清醒才能坚持到最后。记住,每个参赛者都是从新手开始的,多实战、多总结,你也能成为AWD高手。