利用条件竞争突破优惠券仅能使用一次逻辑限制

Portswigger练兵场之条件竞争

目录

  • Portswigger练兵场之条件竞争
    • 🦄条件竞争-突破一次逻辑限制
      • 🚀实验前置必要知识点
      • 🏆实验要求
      • ⚡️渗透开始
          • 1. 站点分析
          • 2. 登录
          • 3.日志探查
          • 4.功能点探究
          • 5.完成实验
        • 修复方案

🦄条件竞争-突破一次逻辑限制

Lab: Limit overrun race conditions

🚀实验前置必要知识点

利用条件竞争有概率超过应用程序的业务逻辑的某种限制

例如,考虑一个在线商店,它允许您在结账时输入促销代码以获得订单的一次性折扣。若要应用此折扣,应用程序可以执行以下高级步骤:

  1. 检查您是否尚未使用此代码。
  2. 将折扣应用于订单总额。
  3. 更新数据库中的记录以反映您现在已使用此代码的事实。

如果以后尝试重用此代码,则在进程开始时执行的初始检查应阻止您执行以下操作:

如果以前从未应用过此折扣代码的用户尝试在几乎完全相同的时间应用两次,会发生什么:

应用程序通过临时子状态转换;也就是说,在请求处理完成之前,它进入然后再次退出的状态。在这种情况下,子状态在服务器开始处理第一个请求时开始,在更新数据库以指示您已使用此代码时结束。

这引入了一个小的比赛窗口,在此期间可以根据需要多次重复申请折扣。

这种攻击有许多变体,包括:

  • 多次兑换礼品卡
  • 多次对产品进行评级
  • 提取或转移超过您账户余额的现金
  • 重用单个验证码解决方案
  • 绕过反暴力破解速率限制

限制超支是所谓的“检查时间到使用时间”(TOCTOU)缺陷的一个子类型。

🏆实验要求

此实验室的购买流包含一个竞态条件,允许您以非预期的价格购买物品。为了解决实验室的问题,需要成功购买了一件L33t轻型皮夹克您可以使用以下凭据登录到您的帐户:wiener:peter

⚡️渗透开始

  • 访问对应靶场界面
https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
  • 启动靶场
1. 站点分析

这是SHOP类型的网站

我们的最终目的是花费1337刀买下夹克

2. 登录

首先根据提示登录账户wiener:peter


根据信用可以发现我们具有50美元


尝试购物以及添加商品,进行功能点的操作

3.日志探查

在进行整体操作的过程中,发现存在20%的折扣(购买优惠)

POST /cart添加购物车端点

POST /cart/coupon添加折扣端点

在该端点多次添加-20%折扣发现是被阻止的

GET /cart端点

访问该端点会显示自身的购物车,从cookie来看是session记录,尝试修改cookie

通过修改cookie后我们来到了一个空购物车,证明是通过cookie将购物信息存储在后端
任何的操作都是以cookie信息为准

4.功能点探究

从逻辑来说,只能应用一次折扣,第二次应用就会出现折扣已被使用

如果逻辑判定不严谨,同一时间使用N次折扣会使被允许的操作,将折扣移除后
启动5个发送数据包


添加为1组,尝试按顺序发送请求组,使用单独的连接以减少干扰的可能性


发送后发现只有第一个是添加折扣成功,后4个没有成功

尝试使用并发条件竞争,发送到枚举模块,以100的线程发现通过这种方法可以重复多次利用购物券,突破了只能用一次的限制

跳转到购物界面,发现购物券已被多次使用

5.完成实验


添加夹克到购物车,再次使用同样的方法成功购买夹克

修复方案

增加新的校验,防止并发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Vue前端框架构建BI应用程序

一、什么是Vue? Vue(Vue.js)是一个轻量级、高性能、可组件化的MVVM库。简而言之,是一个构建数据驱动的web界面的渐进式框架。它采用MVVM思想,通过数据双向绑定实现数据的动态渲染,同时也支持组件化的开发方…

深度学习论文分享(八)Learning Event-Driven Video Deblurring and Interpolation

深度学习论文分享(八)Learning Event-Driven Video Deblurring and Interpolation 前言Abstract1 Introduction2 Motivation2.1 Physical Model of Event-based Video Reconstruction2.2 Spatially Variant Triggering Threshold 3 Proposed Methods3.1 …

无涯教程-Android - List fragments函数

框架的ListFragment的静态库支持版本,用于编写在Android 3.0之前的平台上运行的应用程序,在Android 3.0或更高版本上运行时,仍使用此实现。 List fragment 的基本实现是用于创建fragment中的项目列表 List in Fragments 示例 本示例将向您说明如何基于…

如何在windows下使用masm和link对汇编文件进行编译

前言 32位系统带有debug程序,可以进行汇编语言和exe的调试。但真正的汇编编程是“编辑汇编程序文件(.asm)->编译生成obj文件->链接生成exe文件”。下面,我就来说一下如何在windows下使用masm调试,使用link链接。 1、下载相应软件 下载…

gif怎么转换成mp4格式视频

gif怎么转换成mp4格式视频?GIF格式是一种广泛应用的公用图像文件格式标准,具有许多优势。它占用的内存较小,可以实现自动循环播放,并且兼容多个平台。然而,GIF格式也存在一些缺点。例如,它无法处理复杂的图…

如何提高工业网关的数据传输速度?

工业网关是工业物联网系统中不可或缺的设备,提高工业网关的数据采集、传输速度,是保障和优化物联网系统运营效率的基础。如何提高工业物联网关的数据传输速度?本篇就为大家简单介绍一下。 1、选用高品质网络设备 选用具有足够带宽容量的高质…

hive问题总结

往往用了很久的函数却只知道其单一的应用场景,本文将不断完善所遇到的好用的hive内置函数。 1.聚合函数或者求最大最小值函数搭配开窗函数使用可以实现滑动窗口 例: collect_list函数,搭配开窗函数,实现了在滑动窗口内对事件路径…

idea 常用插件和常用快捷键 - 记录

idea 常用插件 记得下载插件完成后,点击 Apply 和 OK Alibaba Java Coding Guidelines 作用:使用该插件可以,自动提示相关的语法格式问题,格式参考 阿里巴巴代码规范 详情链接: 代码规范之Alibaba Java Coding G…

js深拷贝三种方法

使用递归函数实现深拷贝 const obj {name: zzz,age: 18,hobby: [篮球, 足球],family: {baby: baby}} // 深拷贝 数组 对象 一定要先筛数组再筛对象,因为万物皆对象function deepcopy(newObj, oldObj) {for (const k in oldObj) {// 判断值是否属于array类if (oldObj[k] i…

深度学习怎么学?

推荐这本小白看的《深度学习:从基础到实践(上下册)》。 深度学习:从基础到实践(上下册) 深入浅出的讲述了深度学习的基本概念与理论知识,不涉及复杂的数学内容,零基础小白也能轻松掌…

2023-8-31 Dijkstra求最短路(二)

题目链接&#xff1a;Dijkstra求最短路 II #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue>using namespace std;typedef pair<int, int> PII;const int N 150010;int n, m; int h[N…

QT Creator工具介绍及使用

一、QT的基本概念 QT主要用于图形化界面的开发&#xff0c; QT是基于C编写的一套界面相关的类库&#xff0c;如进程线程库&#xff0c;网络编程的库&#xff0c;数据库操作的库&#xff0c;文件操作的库等。 如何使用这个类库&#xff1a;类库实例化对象(构造函数) --> 学习…

数据结构(Java实现)-二叉树(上)

树型结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;称为根结点&…

Docker搭建elasticsearch+kibana测试

最近需要做大数据画像&#xff0c;所以先简单搭建一个eskibana学习使用&#xff0c;记录一下搭建过程和遇到的问题以及解决办法 1.拉取es和kibana镜像 在拉取镜像之前先搜索一下 elasticsearch发现是存在elasticsearch镜像的&#xff0c;我一般习惯性拉取最新镜像&#xff0c…

信息化发展12

数字民生 数字民生建设重点通常强调&#xff1a; 1 &#xff09; 普惠&#xff1a; 充分开发利用信息技术体系&#xff0c; 扩大民生保障覆盖范围&#xff0c; 助力普惠型民生建设&#xff0c; 解决民生资源配置不均衡等问题。 2&#xff09; 赋能&#xff1a; 信息技术体系与…

若依富文本 html样式 被过滤问题

一.场景 进入页面&#xff0c;富文本编辑框里回显这条新闻内容&#xff0c;如下图&#xff0c; 然后可以在富文本编辑框里对它实现再编辑&#xff0c;编辑之后将html代码提交保存到后台数据库。可以点击详情页进行查看。 出现问题&#xff1a;在提交到后台controller时&#x…

通过HTTP进行并发的数据抓取

在进行大规模数据抓取时&#xff0c;如何提高效率和稳定性是关键问题。本文将介绍一种可操作的方案——使用HTTP代理来实现并发的网页抓取&#xff0c;并帮助您加速数据抓取过程。 1. 选择合适的HTTP代理服务供应商 - 寻找信誉良好、稳定可靠且具备较快响应时间的HTTP代理服务…

单片机通用学习-​什么是寄存器?​

什么是寄存器&#xff1f; 寄存器是一种特殊的存储器&#xff0c;主要用于存储和检查微机的状态。CPU寄存器用于存储和检查CPU的状态&#xff0c;具体包括计算中途数据、程序因中断或子程序分支时的返回地址、计算结果为零时的负值、计算结果为零时的信息、进位值等。 由于CP…

相机SD卡数据丢失如何恢复?

出门在外&#xff0c;相机是人们记录生活点滴的重要工具&#xff0c;是旅游的最佳玩伴。人们每到一个地方&#xff0c;都喜欢用相机来见证自己来过的痕迹&#xff0c;拍好的照片都会被放到相机卡里&#xff0c;但在使用相机时&#xff0c;有时我们会意外删除了重要的照片或视频…

微服务事务管理(Dubbo)

Seata 是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 一、示例架构说明 可在此查看本示例完整代码地址&#x…