1. 项目概述:为什么Pikachu是通往实战的必经之路
如果你刚开始接触Web安全,或者已经啃了几本理论书,但一面对真实网站就感觉无从下手,那你一定对“靶场”这个词不陌生。Pikachu,这个以宝可梦命名的漏洞靶场,在安全圈里几乎无人不晓。它不是一个炫技的工具,而是一个精心设计的“训练场”。很多新手会陷入一个误区:在靶场里通关了所有关卡,就觉得自己掌握了漏洞。但现实是,靶场环境是“无菌”的,而真实网络环境是“复杂且肮脏”的。你可能会遇到各种WAF(Web应用防火墙)、奇奇怪怪的过滤规则、框架自带的防护机制,甚至目标系统一个不经意的配置差异,都能让你的“标准攻击姿势”失效。
这就是为什么我们需要从“靶场”走向“实战”。这个过程不是简单的知识搬运,而是一种思维和方法的迁移。Pikachu的价值在于,它把最常见的Web漏洞,如SQL注入、XSS、文件上传、SSRF等,封装成了一个个独立、典型且带有提示的场景。它像一本带答案的习题集,让你先理解漏洞的“标准形态”。但我们的目标不是记住答案,而是通过这5个关键步骤,学会如何拆解漏洞原理、如何将靶场里的“理想模型”适配到实战中千变万化的环境里,最终形成你自己的渗透测试方法论。接下来,我会结合自己踩过的坑,把这套从靶场复现到实战应用的完整路径拆解给你看。
2. 核心思路拆解:从“知其然”到“知其所以然”的跨越
很多人用靶场就是点点点,看到“You are in”或者弹个窗就过了,这完全浪费了靶场的价值。我们的核心思路必须转变:靶场不是用来“通关”的,而是用来“解剖”的。每一个漏洞场景,都是一次完整的“漏洞生命周期”模拟:漏洞是如何被程序员无意中引入的(代码层)、攻击者是如何发现并利用它的(利用层)、以及最终应该如何修复它(防御层)。只有同时走通这三层,你才算真正吃透了一个漏洞。
2.1 第一步:环境搭建与“上帝视角”观察
动手之前,先别急着攻击。搭建Pikachu环境本身就是一个学习过程。我强烈建议你不要直接用Docker一键部署,而是手动在本地搭建一个PHP+MySQL+Apache(例如用XAMPP)的环境。这个过程会让你熟悉Web应用的基本运行依赖。把Pikachu源码拖到Web目录后,重点来了:打开 inc/config.inc.php 文件,看看数据库连接配置是怎么写的。你会看到类似 $dbuser='root'; $dbpass='root'; 的配置。在实战中,这种弱口令或默认配置本身就是一种常见漏洞(敏感信息泄露/默认配置漏洞)。
安装完成后,先别点漏洞菜单。用你的编辑器或IDE打开Pikachu的源码目录,找到 vul 文件夹。这里按漏洞类型分门别类存放着所有漏洞的前后端代码。比如,打开 vul/sqli/sqli_str.php ,这就是一个基于字符串的SQL注入点。先以“开发者”或“防御者”的身份,而不是攻击者的身份,去读这段代码。看看漏洞是怎么产生的:是不是直接把 $_GET['id'] 拼接进了SQL语句?有没有用 mysql_real_escape_string() 或预处理语句?这种“上帝视角”能让你一眼看穿漏洞的本质。
注意:在Windows上用XAMPP时,如果访问安装页面提示数据库连接失败,八成是MySQL服务没启动,或者
config.inc.php里的密码没改成你本地MySQL的密码。别急着搜“pikachu链接数据库失败”,先检查服务管理器和配置文件。
2.2 第二步:漏洞原理深度还原与手工利用
现在,我们进入靶场漏洞页面。以“SQL注入 - 字符型注入”为例。页面上有个输入框让你查用户信息。常规操作是输入 1' or '1'='1 来绕过。但这一步,我们要做三件事:
- 推测后端代码逻辑 :根据输入和回显,反推后端可能的SQL语句。比如输入
kobe(它给出的示例)有回显,输入kobe'报错,输入kobe' --+又正常。这就能反推出原语句大概是:SELECT ... FROM ... WHERE name='$_GET[name]'。输入的单引号闭合了前面的引号,--+注释掉了后面的引号。 - 手工构造每一步Payload :不要用Sqlmap之类的工具(这个阶段禁用)。用手工尝试:
- 判断注入点:
'报错,' and '1'='1正常,' and '1'='2无结果。确认存在注入。 - 判断字段数:
' order by 4 --+正常,' order by 5 --+报错,说明当前查询字段数是4。 - 联合查询获取数据:
' union select 1,2,3,4 --+看看哪个位置会回显到页面(假设是2和3)。然后替换为' union select 1,database(),user(),4 --+,获取数据库名和用户。
- 判断注入点:
- 开启后端日志,观察完整交互 :修改PHP配置或中间件配置,将SQL查询日志打开。当你提交Payload时,去日志里查看最终被执行的确切SQL语句是什么。这能帮你验证你的推测是否正确,并理解任何潜在的过滤或转换。
这个过程对于XSS、文件上传等漏洞同样适用。对于文件上传,不要只会上传一个 shell.php ,要尝试分析前端JS校验、后端MIME类型检查、文件头检查、后缀黑名单/白名单逻辑。通过修改Burp Suite拦截的请求包,一点点试探服务器的检测边界在哪里。
2.3 第三步:漏洞利用链的扩展与组合思维
靶场漏洞常常是孤立的,但实战中,一个入口点往往需要串联多个漏洞才能达到最终目标,这就是“利用链”。在Pikachu里,你要主动做联想和组合练习。
例如,你通过一个SQL注入点拿到了后台管理员账号密码(可能是MD5哈希)。Pikachu的“暴力破解”模块可能教你用Burp Intruder跑字典。但接下来呢?你找到了后台登录地址(“敏感信息泄露”或“目录遍历”可能帮你找到 /admin 目录)。登录后台后,发现有一个“文件上传”功能可以上传网站插件或头像。这就是一个简单的“SQL注入 -> 后台登陆 -> 文件上传Getshell”链条。
再比如,你发现一个“反射型XSS”漏洞,弹个窗就完了吗?不,你要结合“CSRF”漏洞去思考。能不能构造一个恶意页面,当管理员触发XSS时,利用管理员的会话(Cookie)悄悄发起一个CSRF请求,后台添加一个管理用户?这就需要你研究Pikachu里CSRF漏洞的表单构造方式,然后将其payload化,嵌入到XSS的利用代码中。这种跨漏洞类型的思维串联,是突破靶场局限的关键。
2.4 第四步:防御机制绕过与模糊测试(Fuzzing)
Pikachu的部分关卡其实自带简单的防御,或者你可以手动给它“加戏”。这是模拟实战中遇到WAF或自定义过滤的场景。
- SQL注入绕过 :如果代码里用了
addslashes()转义单引号,怎么办?尝试宽字节注入(在GBK等编码环境下)。或者利用注入点位于数字型参数(id=1),根本不需要引号。又或者,使用LIKE、REGEXP等子句进行盲注,这些语句的payload构造往往和UNION SELECT不同。 - 文件上传绕过 :这是重灾区。前端JS校验?直接禁用JS或Burp改包。后端检查
Content-Type为image/jpeg?那就把包里的这个字段改了。检查文件头(Magic Numbe


1036

被折叠的 条评论
为什么被折叠?



