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

阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染

所需知识

要解决这个实验室问题,您需要了解以下内容:

  • 如何确定用户输入是否包含在服务器端的 URL 路径或查询字符串中。
  • 如何使用路径遍历序列尝试更改服务器端请求。
  • 如何查找 API 文档。

这些内容在我们的 API 测试学院主题中有涵盖。

进入实验室

研究行为

1、 在 Burp Suite 的浏览器中,触发管理员(administrator)用户的密码重置。

2、 在 Proxy > HTTP history 中,注意到 POST /forgot-password 请求和相关的 /static/js/forgotPassword.js JavaScript 文件。

3、 右键点击 POST /forgot-password 请求,并选择发送到 Repeater。

4、 在 Repeater 标签页中,重新发送请求以确认响应是一致的。

5、 发送各种修改过的 username 参数值的请求,以确定输入是否被放置在服务器端请求的 URL 路径中而没有进行转义:

  1. 将 URL 编码的 administrator# 作为 username 参数的值提交。注意到返回一个 Invalid route 错误消息。这表明服务器可能将输入放置在了服务器端请求的路径中,并且片段截断了一些尾随数据。观察到消息还提到了一个 API 定义。

        2. 将 username 参数的值从 administrator%23 改为 URL 编码的 administrator?,然后发送请求。注意到这同样返回一个 Invalid route 错误消息。这表明输入可能被放置在了 URL 路径中,因为 ? 字符指示查询字符串的开始,因此截断了 URL 路径。

        3. 将 username 参数的值从 administrator%3F 改为 ./administrator,然后发送请求。注意到这返回了原始响应。这表明请求可能访问了与原始请求相同的 URL 路径。这进一步表明输入可能被放置在了 URL 路径中。

        4. 将 username 参数的值从 ./administrator 改为 ../administrator,然后发送请求。注意到这返回一个 Invalid route 错误消息。这表明请求可能访问了一个无效的 URL 路径。

导航到 API 定义

1、 将 username 参数的值从 ../administrator 改为 ../%23。注意到返回一个 Invalid route 响应。

2、 逐步增加更多的 ../ 序列,直到达到 ../../../../%23。注意到返回一个 Not found 响应。这表明您已经导航到 API 根目录之外。

3、 在这个级别上,向 URL 路径添加一些常见的 API 定义文件名。例如,提交以下内容:

username=../../../../openapi.json%23

注意到返回一个错误消息,其中包含如下用于查找用户的 API 端点:

/api/internal/v1/users/{username}/field/{field}

利用这个漏洞

1、 更新 username 参数的值,使用已识别的端点结构。为 field 参数添加一个无效值(例如:usernmae,password,id,uid,sid,eamil,token):

username=administrator/field/foo%23

发送请求。注意到返回一个错误消息,因为 API 只支持 email 字段。

2、 将 email 作为 field 参数的值:

username=administrator/field/email%23

发送请求。注意到返回了原始响应(响应包中可以获得添加的参数值,且返回值 200)。这可能表明服务器端应用程序识别了注入的 field 参数,并且 email 是一个有效的字段类型。

3、 在 Proxy > HTTP history 中,查看 /static/js/forgotPassword.js JavaScript 文件。识别密码重置端点,它引用了 passwordResetToken 参数:

###访问路径###
###也是从json中判断可能存在该功能###
/forgot-password?passwordResetToken=${resetToken}

4、 在 Repeater 标签页中,将 field 参数的值从 email 改为 passwordResetToken:

username=administrator/field/passwordResetToken%23

发送请求。注意到返回一个错误消息,因为密码重置端点不支持 passwordResetToken 参数。

5、 使用之前识别的 /api/ 端点,将 API 版本改为 username 参数的值:

该实验默认一直 API v1 的目录结构

如果不能遍历路径,不能文件读取,该方法不适用

username=../../v1/users/administrator/field/passwordResetToken%23

发送请求。注意到返回一个密码重置令牌,请记下这个令牌。

6、 在 Burp Suite 的浏览器中,输入密码重置端点地址栏。将您的密码重置令牌添加为 reset_token 参数的值。例如:

/forgot-password?passwordResetToken=aa3eqz8ug2igm3zq4quplq13g0jmwae3
###拼接链接###
https://0a030035031db30981807ace007900da.web-security-academy.net/forgot-password?passwordResetToken=aa3eqz8ug2igm3zq4quplq13g0jmwae3

7、 设置一个新密码。

8、 使用您的新密码以管理员身份登录。

9、 转到管理员面板,并删除 carlos 以解决实验室问题。

http://www.lryc.cn/news/425282.html

相关文章:

  • [游戏开发] LuaTable转string存读二进制文件
  • 光伏业务管理系统的一些妙用功能
  • Java面试八股之请简述消息队列的发布订阅模式
  • 七、2 ADC数模转换器有关函数介绍(Keil5)
  • 了解载波侦听多路访问CSMA(上)
  • 开启教育新征程:“集师” 知识付费平台搭建
  • Vue3 + Electron 创建新的子窗口 且子窗口唯一
  • 海康VisionMaster使用学习笔记2-相机取图及参数设置
  • 【网络】【Linux】Linux内核中连接的组织形式与全连接队列
  • 记录一次 npm ERR! cb() never called! 解决过程
  • WEB渗透免杀篇-加载器免杀
  • 什么是反人性设计?
  • 如何进行长截图的两种方法
  • 基于轨迹的汽车跟随系统横向控制方法
  • 2024年8月15日嵌入式学习
  • C++引用和指针的区别还分不清楚?
  • 【Cesium开发实战】相机捕捉功能,获取当前视图,设定分辨率可下载当前视图图片
  • 基于spring boot的疫情信息管理系统
  • 【秋招笔试】8.11大疆秋招(第二套)-测开岗
  • Vitis AI 基本认知(训练过程)
  • 《SQL 约束:保障数据完整性与准确性的关键防线》
  • Temu半托管即将开通日韩站点,Temu半托管怎么上产品?
  • 谷歌、火狐、Edge浏览器使用allWebPlugin中间件加载ActiveX控件
  • Python利用openpyxl复制Excel文件且保留样式—另存为副本(附完整代码)
  • ITL-Internet Technology Letters
  • Mapreduce_wordcount自定义单词计数
  • 安卓开发中的AppCompat框架使用详解
  • docker中挂桶什么意思
  • 鸿蒙开发Location Kit(位置服务)如何设置
  • O2OA开发知识-后端代理/接口脚本编写也能像前端一样用上debugger