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

PortSwigger靶场之Exploiting server-side parameter pollution in a query string通关秘籍

一、靶场分析

好这个靶场的目标是利用服务器端参数污染(Server-Side Parameter Pollution, SSPP)漏洞。


二、解决靶场

我们需要利用参数污染来注入并控制后端服务器的查询

1. 发现漏洞:后端 API 的“回声” 👂

注入有效参数整个攻击的突破口。我们先通过注入无效参数来试探后端是否反应

首先题目只给了账户名所以我们利用忘记密码的请求包来尝试

username=administrator%26x=y
  • %26& 的 URL 编码。你发送的 username 值其实是 administrator&x=y

  • 前端服务器的操作:它构建了一个类似 https://api.internal/reset?username=administrator&x=y 的后端请求。

  • 后端的反应:后端 API 收到了两个参数,usernamex。但它的程序里并不认识 x 是什么,于是报错“Parameter is not supported”(不支持的参数)。

  • 关键信息:这个报错证明了我们可以成功注入一个完整的参数!我们输入的值没有被当成一个整体的用户名,而是被后端拆分解析了。

username=administrator%23

  • %23# 的 URL 编码。在 URL 中,# 后面的内容是片段标识符,服务器在处理时会忽略它。

  • 前端服务器的操作:它构建了后端请求,比如原本应该是 ...&username=administrator&field=email。但因为你注入了 #,后端请求变成了 ...&username=administrator#&field=email

  • 后端的反应:后端 API 只看到了 # 前面的部分,即 ...&username=administrator。它发现后面缺少了一个它必需的参数 field,于是报错“Field not specified”(未指定字段)。

  • 关键信息:这个报错不仅再次确认了注入有效,还泄露了一个隐藏的、必需的参数名:field


2. 刺探情报:寻找隐藏参数的值 🕵️

现在我们知道了可以注入参数,并且有一个隐藏参数叫 field。那么 field 的有效值是什么呢?

username=administrator%26field=x%23

  • 我们主动构造一个 field 参数,并给它一个无效的值 x,然后用 # 截断,防止前端服务器自己附加的 field 参数干扰我们。

  • 后端收到了我们伪造的 field=x,发现 x 不是它能接受的值,于是报错“Invalid field”(无效字段)。

  • 关键信息:这证明了后端确实在校验 field 参数的值。

  • 使用 Burp Intruder 进行暴力破解

    • 通过将 field 的值设为变量,并使用内置的“服务器端变量名”字典进行爆破,我们发现当值为 usernameemail 时,服务器返回了 200 OK,说明这两个是有效的 field 值。这符合一个密码重置功能的正常逻辑(通过用户名或邮箱来重置)。


3. 终极利用:偷取重置令牌 🔑

这是最精彩的一步。通过阅读前端的 JavaScript 文件 (forgotPassword.js) 发现,重置密码的下一步需要一个名为 reset_token 的参数。

攻击者的猜想:既然后端 API 可以根据 field 参数返回 usernameemail 相关的信息,那它是否也能返回其他敏感信息,比如 reset_token

  • 最终的攻击载荷 (Payload)

    username=administrator%26field=reset_token%23
    • 前端服务器的操作:它将这个值拼接到后端请求中,最终后端收到的请求被我们劫持为:

      ...lookup?username=administrator&field=reset_token
    • 后端的反应:后端 API 的逻辑可能是“根据用户名查找用户,然后返回该用户指定的字段信息”。它接收到指令,查找 administrator 用户的 reset_token 字段,并直接将令牌返回给了你

    • 漏洞根源:后端 API 过度相信了前端传来的 field 参数,没有设置一个白名单来限制哪些字段是允许被查询的,导致了敏感信息的泄露。


4. 收尾工作:接管账户 👑

拿到了管理员的密码重置令牌后,剩下的就非常简单了:

  1. 访问密码重置链接

    /forgot-password?reset_token=d1cre6vbql3s34hp1u7zaw8w2w79i2mo
  2. 设置一个新密码。

  3. administrator 和新密码登录。

  4. 进入后台删除 carlos,完成任务。

总而言之,这个靶场完美地展示了当一个系统存在分层架构(前端应用 -> 后端 API)时,如果层与层之间的信任和数据传递没有得到妥善处理,攻击者就可以如何利用这些缝隙,通过巧妙的注入和试探,一步步地获取信息并最终完全控制系统。

三、成功通关

http://www.dtcms.com/a/409970.html

相关文章:

  • OpenLayers地图交互 -- 章节十三:拖拽旋转交互详解
  • 前端常见安全问题都有哪些以及解决方案
  • 算法专题(三)01背包问题理论
  • pycharm 运行不报错,但是调试报错,
  • 原型模式了解
  • 基于hive和mapreduce的地铁数据分析及可视化_hive作为数据库
  • 使用虚幻引擎(UE5)制作开箱爆金币功能
  • 网站在线考试答题系统怎么做泰兴网页定制
  • 展示型商城订单网站建设网页设计网站方案
  • 【MySQL数据库】InnoDB实现MVCC(多版本并发控制)底层原理
  • 自己做网站推广关键词网站开发和合同
  • 【Qt开发】输入类控件(二)-> QTextEdit
  • 攻克音频顽疾:基于QCC3095/QCC5181/QCC3040实现全域无冲击声的实战分享
  • 视频融合平台EasyCVR构筑智慧交通可视化管理与智能决策中枢
  • 从特征到应用:用 dlib+OpenCV 实现实时疲劳检测(基于眼睛纵横比)
  • 【买机器人,上BFT】北京大学联合项目 论文解读 | H2R:一种用于机器人视频预训练的人机数据增强技术
  • 音频库管理在数字媒体中的应用探索
  • BLE配网协议 - 分包、组包和重传功能指南
  • MediaHuman YouTube to MP3 多语便携版:高效音频提取工具
  • Java 数组的定义与使用
  • 自建站有哪些站点wordpress前台压缩图片
  • R语言中的获取函数与替换函数
  • 微前端中iframe集成方式与使用微前端框架方式对比
  • 【NOI】在信奥赛中 什么是函数交互题?
  • 电脑上怎么做网站963中华室内设计网
  • Python调用优云智算安装的ComfyUI服务器
  • ACA云原生工程师认证知识点脑图
  • 用 Flink 打造事件驱动流式应用从 DataStream 到 ProcessFunction
  • MySQL学习笔记05:MySQL 索引原理与优化实战指南
  • 【提示工程】Ch2(续)-提示技术(Prompt Technique)