简介面向AWDAttack vs Defense线下赛参赛者与网络攻防实践者这套工具集合将比赛中高频使用的代码审计、流量监控、远程连接与端口扫描工具整合到一起省去四处搜集和验证兼容性的时间可直接用于靶场训练、赛前环境搭建或日常渗透测试。包体共115个文件压缩后约92.7MB其中包含大量php、aspx、jsp等Web脚本源码exe、dll运行程序与依赖库以及css、conf、ini等配置类文件既有可直接运行的攻击辅助工具也有用于环境适配的脚本与配置基本覆盖Web攻防、进程运维与可视化界面的常见需求。压缩包内还附带AWD资料集合包括比赛教程、策略指南与过往案例分析既能帮助新手理解攻防规则也能为老手提供战术复盘参考是赛前快速热身的有益补充。工具链上Nmap与masscan负责端口探测Wireshark与tcpdump用于流量审计Burp Suite等组件支撑Web漏洞分析整体形成从信息收集到攻击防御的一套完整方案对于缺少完整工具链的参赛者尤为友好。目前已有2618人学习下载。1. AWD工具集合是什么一场攻防对抗赛的兵器库先解决“一个人打三个方向”的问题AWDAttack With Defense是CTF攻防对抗赛里节奏最快的一种赛制每支队伍拿到一台或几台配置完全相同的靶机比赛一开始既要守住自己的服务器又要打穿对面的服务器每隔三十分钟到六十分钟一轮全场都在互相攻击。真正上手一次你就会发现时间根本不够用——检查源码、修漏洞、种权限维持、看流量、打对手这些工作一个人同时顾不过来。所谓“各种awd工具工具集合”就是把流量监控、漏洞利用、持久化维持、批量巡检等脚本和二进制工具按场景组织在一起让你面对一台靶机时先跑哪条命令、后跑哪条命令、异常看哪个输出都有现成的路径。这篇不打算给你罗列工具清单而是讲清楚一套可复现的搭建方法、实战节奏和翻车点让你在下一场比赛前能直接照着做。2. 理解AWD工具集合从赛制节奏到工具链选型2.1 先看清AWD的赛制与工具使用节奏AWD的核心矛盾是“你只有一台机器但对手有几十台”。以常见的Web AWD为例主办方会给每队下发一台相同配置的Linux服务器跑着LNMP或LAMP环境网站源码里藏了一定数量的漏洞。计分规则通常是存活分加攻击分你的靶机被其他人打穿每轮扣分你打穿别人的靶机每轮加分。所以工具的用途不是单一的“攻击”或“防御”而是围绕“别死”和“打死别人”这两个目标展开。我把比赛时间切成三段来安排工具的使用节奏。开局前二十分钟是防御黄金期先备份整站源码和数据库挂上文件监控查一遍原始源码里有没有别人预留的后门再决定要不要上WAF。中间一小时是攻防均衡期流量监控和文件监控保持后台运行同时用批量脚本去打同网段的其他队伍。最后半小时是抢分窗口期前面打下来的靶机要确认权限维持还在分数还能持续进账这时候更多时间花在保住已有成果上。很多第一次打AWD的人会犯一个错误上来就急着打别人结果自己靶机连备份都没做被对手一轮打穿后面全是负分。工具集合的意义就在这里——它把“防御三件套”放在最前面让你在慌乱里有顺序可依。比赛环境里常见的做法是先跑一个setup.sh把备份、监控、查马三件事一口气做完再开始攻击。2.2 工具集合的四大分类流量、漏洞、加固、信息任何一套AWD工具集合本质都在解决四类问题。第一类是信息收集对应“对面是什么环境、开放了哪些端口、跑了什么服务”第二类是漏洞利用对应“已知漏洞怎么批量打、怎么拿shell”第三类是加固防御对应“自己的机器怎么补洞、怎么发现被改的文件、怎么清掉别人种的马”第四类是流量分析对应“对手刚才用了什么姿势打进来、payload长什么样”。这四大类不是平均用力。根据我的实战观察新手队伍把八成精力花在漏洞利用上老手队伍反而把六成精力放在防御和流量上。原因很简单AWD里你能拿到的漏洞别人也能分析出来你打别人的同时别人也在用同一套公开漏洞打你。流量分析工具的价值在于当你发现自己靶机被种了后门看一眼进出流量就能还原攻击路径进而想起来去修那个漏洞、把所有同类型靶机都堵上。我一般会在工具集合里按这四个分类建四个目录而不是把一堆工具堆在同一个文件夹里。这样做的好处是比赛中途切换任务时你不用回忆某个脚本放在哪里按目录找就行。另一个好处是给目录编号之后它们会按“信息收集→漏洞利用→加固防御→流量分析”的顺序执行这是我在多场比赛里验证过压力最小的操作顺序。2.3 为什么不是“工具越多越好”武器库的取舍逻辑网上关于AWD工具集合的分享有很多动不动就是几十个工具的“全家桶”看起来气势很足实际比赛里效果往往很差。原因有三第一很多工具依赖特定的Python版本、特定的库现场环境没网、没时间装依赖工具直接跑不起来第二工具越多越容易在紧急时刻选错命令比如把清后门的脚本跑到了别人的靶机上第三部分平台会检查选手本机进程一堆扫描器和利用工具同时在跑容易被误判为作弊或触发反作弊机制。我现在的取舍标准是每个分类只保留两三个最可靠的方案而且一定是自己比赛前在本地真实跑过一遍的。信息收集用nmap和目录爆破脚本漏洞利用用sqlmap加手工EXP加固防御用md5sum做文件校验和、用inotifywait做实时监控流量分析用tcpdump抓包加一个提取HTTP请求的小脚本。这套组合看起来并不华丽但每个环节都能在三十秒内启动不需要额外装依赖稳定压倒一切。“最小可用”还有一层意思你的工具集合本身要能在离线环境运行。比赛现场网络隔离是常态不要指望现场下载任何东西所有脚本和静态二进制都要提前打包进一个压缩文件里。我习惯把这个压缩文件同时放在本地、U盘和云盘三个位置防止比赛时电脑出问题或者U盘读不出来。工具的选型不是秀肌肉而是保证你在高压状态下不会因为工具本身卡住。3. 搭建一套AWD工具集合最小清单与目录规范3.1 工具集合的最小目录结构搭建一套AWD工具集合第一步不是写脚本而是定目录结构。没有结构的工具集合比赛时你会陷入“找文件比执行文件更久”的困境。下面是我常用的最小目录结构完全可以照着抄AWD-Toolkit/ ├── 01_info/ │ ├── nmap_scan.sh │ ├── dirsearch.sh │ └── targets.txt ├── 02_pwn/ │ ├── batch_sqlmap.sh │ ├── exp/ │ │ └── exec_payload.py │ └── shellcat.sh ├── 03_defense/ │ ├── backup.sh │ ├── file_monitor.sh │ ├── webshell_check.sh │ ├── patch_weakpasswd.sh │ └── disablescan.sh ├── 04_traffic/ │ ├── sniff_http.py │ └── tcpdump_all.sh ├── 05_persist/ │ ├── gen_ssh_key.sh │ ├── install_cron.sh │ └── clean_perist.sh ├── conf/ │ ├── my_ip.txt │ └── passwd_list.txt └── tools/ ├── sqlmap/ ├── burpsuite_pro.sh └── chkrootkit.sh这个结构的逻辑是目录名自带编号比赛时按编号顺序执行即可conf目录放IP清单和弱口令字典这类信息经常要改独立出来方便统一修改tools目录放第三方工具不污染自己的脚本。值得多说一句的是targets.txt里面按行存放对手靶机的IP地址所有批量脚本都从这里读目标避免在攻击脚本里反复改IP也避免误把本机IP写进目标列表。3.2 按场景组织脚本巡检、利用、加固、绕过目录定好后真正花时间的是把每个场景的脚本写好。我的经验是一个场景一个脚本脚本要做成“无交互、白屏输出关键结果”的风格。比赛时你没有精力看满屏刷日志脚本只输出最关键的结论即可。先看加固场景最核心的备份脚本这是整个防御的基础#!/bin/bash # backup.sh - 快速备份 Web 源码和数据库到 /tmp/backup WEB_ROOT/var/www/html DB_USERroot DB_PASSyour_db_pass BACKUP_DIR/tmp/backup # 开始备份 mkdir -p $BACKUP_DIR cp -a $WEB_ROOT $BACKUP_DIR/web_bak_$(date %Y%m%d_%H%M%S) mysqldump -u$DB_USER -p$DB_PASS --all-databases backup_dir$BACKUP_DIR/db_$(date %Y%m%d_%H%M%S).sql echo [] 备份完成: $BACKUP_DIR这个脚本的逻辑很直白cp -a保留了文件属性和软链接对Web目录做全量复制mysqldump把全库导出成SQL文件。参数里WEB_ROOT和DB_PASS需要在比赛现场根据目标环境修改所以我通常会把这两个变量放在脚本开头统一标注比赛时只需改一处。备份目录选/tmp/backup而不是/root/backup是因为很多比赛环境没有多余的磁盘空间/tmp是相对安全且读写快的目录。再看文件监控脚本这个是发现对手有没有动你文件的关键#!/bin/bash # file_monitor.sh - 用 inotifywait 实时监控 Web 目录的文件变化 WEB_ROOT/var/www/html LOG_FILE/tmp/file_monitor.log inotifywait -m -r -e modify,create,delete,move $WEB_ROOT | while read path action file; do echo [$(date %H:%M:%S)] $action $path$file $LOG_FILE done-m表示持续监控-r递归监控子目录-e指定监控的事件类型。这里只监控modify、create、delete、move四种事件覆盖了对手上传webshell、修改网页、删除源文件等常见操作。脚本的弱点也很明显如果对手绕过Web目录、直接写系统级后门它就监控不到。所以这个脚本适合和下面的进程监控配合使用而不是单独依赖。比赛中我一般会在攻击阶段切出去之前把它启动并放到后台运行。3.3 常用工具与替代方案的取舍目录结构搭好之后接下来是具体工具的选择。这块我不打算报菜名只讲我在实战里验证过相对可靠的一组搭配。信息收集首选nmap扫全端口很快输出也稳定。需要扫描靶机开放端口时一条命令就够了nmap -sV -T4 -O --open -oN 01_info/nmap_result.txt 192.168.1.0/24参数说明-sV探测服务版本-T4加快扫描速度-O做操作系统识别--open只输出开放端口的结果-oN把结果保存为文本。对批量打多台靶机来说这个命令能在两分钟内给出所有队伍的服务清单。有些队伍会问为什么不用更快的masscan我的回答是masscan快但结果经常不完整而且对应用层服务的判断远不如nmap细致AWD里你不需要扫几万台机器一个网段用nmap已经足够。漏洞利用阶段sqlmap是绕不开的但直接全自动跑会很慢。我一般用--batch参数配合自己整理好的字典快速确认站点是否可注入。Web目录爆破则用dirsearch带着常见字典跑这两个工具在比赛环境里都能离线运行是我每次必带的。如果比赛平台允许带静态编译的二进制再带一个busybox里面集成了很多常用命令关键时刻能救命——比如系统自带的cat或netstat被替换成后门时busybox是保持原样的。4. 把工具集合用在实战流程从源码检查到对抗恢复4.1 源码审计阶段先摸清对方给你留的洞比赛开始后第一件事永远是备份第二件事是审计源码。很多人觉得源码审计要提前做比赛时没时间。实际上你不需要审计完所有代码只需要找出最可疑的几个文件。这里有个操作习惯值得推荐用grep直接搜索危险函数不要打开一个个文件去看。grep -rn -E eval\(|assert\(|system\(|shell_exec\(|exec\(|passthru\(|popen\(|proc_open\( /var/www/html --include*.php这条命令把所有PHP文件里调用了危险函数的行都列出来-E启用正则-rn递归并显示行号。找到结果后优先看带$_GET、$_POST、$_REQUEST参数拼接的行那就是最可能被利用的注入点。对付这种漏洞最快的方法是直接用正则替换把这些危险函数注释掉或替换成安全写法但这个操作要谨慎因为可能会影响站点正常功能导致服务不可用被扣分。在真实比赛里我见到更多的情况是漏洞分析确实花时间但对手的利用速度更快。所以更稳妥的策略是先给关键文件打好补丁再考虑修复所有漏洞。补丁的意思是把数据库里的admin用户密码改掉、把phpMyAdmin关掉或加访问控制、把/tmp目录设置成不可执行。这些操作不需要理解漏洞原理五分钟内就能完成却能把大多数停留在“默认配置利用”层面的攻击挡在门外。4.2 攻击窗口期批量利用与批量种马源码审计结束、基础防御上线之后就进入攻击窗口期。这时候最常见的操作是对同网段所有IP批量跑漏洞利用。这里有一个必须强调的纪律批量脚本一定要从conf/targets.txt读目标IP这个文件要反复检查绝不能包含自己的IP。常见的做法是在脚本里把所有目标放在一个列表中先打印出来人工确认一遍再执行。#!/bin/bash # batch_sqlmap.sh - 对多个目标批量检测 SQL 注入 while read -r target; do [ -z $target ] continue echo [*] 检测 $target ... sqlmap -u http://$target/index.php?id1 --batch --forms \ --crawl0 --level1 --risk1 \ --dbs --timeout10 --retries1 \ -o 02_pwn/report_$target.txt 2/dev/null done conf/targets.txt参数说明--batch跳过所有交互确认--forms让sqlmap自动填充页面表单--crawl0只测起始页面不加爬虫深度省时间--level1和--risk1用最低检测等级只测最常见注入点保证速度--timeout10防止卡死-o把结果输出到独立文件。最后2/dev/null把报错信息丢弃避免屏幕上全是sqlmap的调试日志影响判断。批量利用成功之后立刻要做的是权限维持。我倾向于用最轻量的方式如果拿到的是RCE权限先创建一个带SSH密钥的隐藏用户或者把公钥写到目标机器的authorized_keys里。注意不要依赖单一维持手段因为对手和主办方都会定期检查。比赛中比较稳定的维持方式是写一个定时任务每隔几分钟把当前shell反弹回来但在反弹地址上要小心别把反弹命令明文写在容易被发现的文件里。4.3 防御窗口期流量分析、文件监控与快速恢复攻击的同时防御不能停。这里说的防御不是一个固定动作而是一个持续循环发现异常、定位原因、修复漏洞、恢复文件。我习惯在攻击窗口期每十五分钟切回来看一次file_monitor.log和/tmp/backup目录确认自己的靶机没有被对手动过手脚。流量分析是这个循环里最关键的输入。一条简单的tcpdump命令可以看到谁在访问你的靶机、用了什么payloadtcpdump -i eth0 -s 0 -w /tmp/capture_$(date %s).pcap # 抓完包后用 tshark 快速提取 HTTP 请求只保留 URL 和 UA 头 tshark -r /tmp/capture_*.pcap -Y http.request -T fields \ -e ip.src -e http.request.method -e http.request.uri -e http.user_agent-i eth0指定网卡-s 0表示抓完整数据包-w保存到pcap文件。后面用tshark过滤出HTTP请求-Y是显示过滤表达式-T fields指定只输出这几个字段。这样你看到的不是乱码而是一列“谁、用什么方法、请求了什么路径、用什么User-Agent”的清单。攻击者通常会用curl或Python脚本打你UA特征明显看一眼就能锁定可疑来源。一旦确认被攻击恢复的顺序也有讲究先把后备的webshell查一遍再恢复源码和数据库最后才上WAF。很多人顺序反了先上WAF结果源码里的后门还在等于给对手留了个暗门。恢复文件时只恢复被污染的那部分不要整个目录回滚因为对手可能在你回滚后立刻再打一次你还需要留日志分析。这时候备份脚本的意义就体现出来了你有干净的源码副本就有了后悔药不至于被同一招反复打穿。5. 避坑与排查AWD工具使用中的五个常见掉链子5.1 工具版本与本地环境不匹配现象比赛现场运行python3 exploit.py报错ModuleNotFoundError: No module named requests现场又没网pip装不上整个利用流程卡死。原因很多AWD工具脚本依赖第三方库你在本地有网环境测试时一切正常比赛环境却什么都没装。这是工具集合里最高发的翻车点没有之一。还有一个隐蔽情况是目标机器上可能没有python3命令只有python但你写的脚本第一行固定调python3也会直接跑不起来。解决提前把所有脚本改成纯标准库实现不依赖第三方模块或者用静态编译的Python二进制打包进工具集合。最省事的做法是把脚本调用的解释器写成变量运行时先探测环境再决定执行方式。另外所有核心脚本至少要在一台干净的全新系统上跑通一次确认不依赖你本地安装过的任何“巧合”库。5.2 批量利用脚本误伤自己被反打现象批量脚本跑了一轮发现自己的靶机被种了马检测日志里全是自己脚本的痕迹对手顺着来源反向拿到了你的权限。原因targets.txt里手滑写入了自己的内网IP或者脚本里用网段前缀匹配时把本机IP包含了进去。另一个常见原因是某些漏洞利用payload会反弹shell到写死的IP如果之前测试时用的IP没改反弹shell会打到你自己机器上。解决给批量脚本加一个强制黑名单脚本启动时自动读取本机所有网卡IP比对后从目标列表里移除执行之前先把目标列表打印出来人工扫一眼。反弹shell的地址统一写在conf/my_ip.txt里每次比赛前单独检查这个文件。宁可慢一分钟不要打到自己人这是批量脚本的第一原则。5.3 备份恢复脚本的坑备份的是壳、丢的是马现象被对手打穿后用备份恢复源码结果上线后门还在对手持续得分你却始终找不到后门藏在哪里。原因备份脚本只备份了/var/www/html目录但对手的权限维持手段写在其他位置比如/usr/lib下的恶意so、/etc/ld.so.preload里的预加载劫持、系统定时任务里的反弹shell。你用备份恢复了网页文件系统层面的后门原封不动等于只修了表没治病。解决备份范围扩大除了Web目录还要把系统关键位置的哈希表保存下来/etc/passwd、/etc/crontab、/usr/bin下的关键命令、/tmp、/dev/shm。恢复时先对照哈希表找到新增文件再决定是否回滚。我现在的备份脚本会在备份Web目录后用一下md5sum生成全盘基线比赛中间做完整性校验就是用它比自己猜哪里有后门靠谱得多。5.4 权限维持被队友或被防护清掉现象辛辛苦苦打下来的靶机过了一轮发现权限没了分数也没进来更无语的是不知道是谁清的。原因AWD靶机通常不只有你在攻击。你种了一个后门其他队伍打进来之后顺手清理了所有可疑文件把你提权的账号也删了。另一种情况是你自己队伍里的队友不知道哪些文件是你的维持手段在“加固”时误删了权限维持文件。解决权限维持多做几层且互相独立Web层留一个不死马系统层放一个定时任务SSH再留一个密钥。多层保证其中一层被清另一层还能回来。同时要跟队友约定好防御操作只动Web源码和安全配置不碰系统级定时任务和隐藏文件让“清除可疑文件”前先口确认。比赛里最可怕的不是对手强而是队友把你的后门当作对手的后门清了。5.5 工具被上传检测拦下webshell查杀的对抗现象用常见的webshell管理工具上传小马上线刚落地就被检测系统告警站点被置为隔离状态整个攻击计划暴露。原因比赛平台大多部署了webshell查杀引擎常见的一句话木马、加密马特征太明显直接上传必然触发告警。很多选手以为绕过查杀就是改特征结果越改越夸张反而容易被盯上。解决不要执着于对抗查杀可以用更弱的痕迹换取更大的隐蔽性。比如不传文件直接通过命令执行写入内存马或者利用已有合法脚本在业务代码里注入少量逻辑再或者打持久化的落点选在日志目录、/tmp这种查杀扫描很少覆盖的位置。比赛的本质是得分不是秀免杀。只要你的攻击能让对手慢一小时发现就已经建立了巨大优势。查杀对抗这块我个人的习惯是提前准备三个不同风格的马赛前在本地查杀引擎里测一遍只保留能过检的而不是临时改。6. 让工具集合更好用本地自测沙箱与打包发布技巧6.1 用容器搭一个30秒启动的本地靶场任何工具集合都要在比赛前自测我一般用容器在本地搭一个虚拟靶场30秒内启动专门用来验证脚本的可用性。这个沙箱容器只装一个最简单的Web服务故意留一个执行漏洞然后依次跑备份、监控、利用、恢复整套流程。这样做的好处是比赛时工具集合里的每个脚本至少是刚刚验证过能跑的不会被环境问题打乱节奏。我见过太多队伍赛前不测开赛五分钟发现sqlmap连不上目标、监控脚本因为路径写错一直在报错白白浪费宝贵的防御窗口期。6.2 把常用命令封装成一条命令入口工具集合如果只是堆一堆脚本比赛时还是会手忙脚乱。我习惯在根目录放一个总控脚本把最常用的操作收拢成一条命令比如直接执行备份、启动监控、查看当前得分状态。这样一来无论多紧张你只需要记住三个操作./awd.sh backup、./awd.sh monitor、./awd.sh status。封装的核心不是炫技而是把需要思考的步骤提前变成习惯动作把注意力留给真正需要判断的攻防决策。赛事进行到最后半小时你基本没有精力在目录里翻找脚本一条命令入口的价值就会被放大好几倍。6.3 赛前工具自检清单与团队同步最后分享一个我自己的赛前自检习惯用三分钟把工具集合从上到下过一遍。第一检查targets.txt和my_ip.txt是否更新为当前赛场网段第二备份脚本在本地沙箱再跑一次确认数据库密码还能对上第三所有脚本文件权限设为可执行避免比赛时发现没有执行权限第四压缩包同时存在于本机和U盘。这四个动作做完工具集合这块就基本不会掉链子。跟团队同步是另一个容易被忽视的点至少让队友知道备份文件放在哪个目录、监控日志在哪个文件、恢复脚本要怎么启动避免你掉线之后整个防御体系瘫痪。我吃过一次亏赛前忘了告诉队友备份路径赛中被打击后队友等了一个小时也没找到怎么恢复那次之后自检清单里永远多一条“团队同步”。希望这些细节能帮到你让下一场AWD不再因为工具本身乱了阵脚。本文还有配套的精品资源点击获取