[典型漏洞分享]多线程同步问题导致越过程序限制

在涉及到钱的问题时,多线程同步问题一定要重点考虑,如果处理不当可能造成无法预料的损失。

YS 电商优惠券漏洞可以使一张优惠券被多次使用来生成订单【高】

问题描述:

         用户在YS电商可以使用我们提供的优惠券购买设备,并得到一定金额的优惠,一张优惠券只能使用一次,在提交生成订单的接口时需要带上该优惠券号码,后台系统会根据该优惠券的类型自动减少额度并最终生成订单,但该接口在后台未做并发同步处理,导致一张优惠券可以使用多次并最终生成多个用于支付的订单。

测试步骤:

1、  登录YS MALL,选择需要购买的设备CX(此处CX价格为880,优惠券优惠额度为300RMB),并进入购物车提交订单,如图所示:

2、  在订单信息中使用使用优惠券,如下图所示:

3、  提交订单并拦截生成订单请求,转入burp intruder,设置相关参数后,发起快速请求,可以看到有4个请求被成功处理,如图所示:

4、  转入“我的订单”页面,可以看到成功生成4个订单,并且每个订单都成功地使用了同一个优惠券,如下图所示:

5、  查看后台优惠券使用记录也验证了这一点,如图:

问题扩展:

         理论上所有的接口都有可能出现此类问题,对于牵涉到敏感业务的接口可能会造成不可预料的后果。

解决建议:

1、  处理代码增加同步锁做并发同步处理。

时间: 2024-12-26 17:26:09

[典型漏洞分享]多线程同步问题导致越过程序限制的相关文章

[典型漏洞分享]业务逻辑导致的隐私泄露2

视频广场分享在删除分享或删除设备时未立即停止断流,可导致用户隐私泄漏[高] 问题描述:          用户在删除分享或删除设备时,查看分享的视频的用户如果不刷新页面,那么视频流不会停止,即还可以继续观看该被取消分享或删除的视频. 测试步骤: 1.  使用账户A为设备A创建视频广场分享.注:设备A是账户A的设备. 2.  使用账户B登录并观看设备A的分享视频. 3.  此时账户A删除设备A的视频广场分享或者解除账户A和设备A的绑定关系,账户B仍然可以在当前的分享页面上观看设备A的视频. 4. 

[典型漏洞分享]业务逻辑导致的隐私泄露1

业务逻辑漏洞是跟业务自身强相关的,必须结合业务本身进行分析. 视频广场存在业务逻辑等漏洞,可导致用户隐私泄漏[高] 问题描述:          经测试,视频广场存在如下漏洞: 1.  被进行好友分享的设备可以被好友进行广场分享,可导致用户隐私泄漏. 2.  发表评论和进行回复时未限制次数和频率,可利用进行恶意刷屏或灌水. 测试步骤:          问题1: 1.  将用户A的设备à设备A通过好友分享给用户B. 2.  登录用户B,可以得到设备A的序列号以及新的cameraID(通道号).

[典型漏洞分享]上传导致的应用层DOS攻击

YS 视频封面设置功能可上传大量图片,可进行资源消耗型DOS攻击[中] 问题描述:          YS允许用户为设备设置封面,后台在处理时允许用户间接可控上传图片的二级路径以及直接可控保存图片的文件名,相当于用户可以受限地去控制图片上传的路径,而在用户上传新设备封面时又未删除旧的封面图片,导致用户可以往后台不停地发送封面图片,进而耗尽资源,经测试,单个用户最多可以上传2147483647(2的31次方-1)次不相互覆盖的图片,而每次上传都会生成3张图片,xxx.jpg,xxx_web.jpg

[典型漏洞分享]关于智能硬件设备的近程攻击

以YS的一个实际案例说明一个几乎属于智能硬件设备专属的攻击类型 设备串口登录不需要认证[低] 问题描述:          在进行底层的嵌入式开发时,开发人员为了方便调试,往往会在设备上预留一个调试接口(比如:串口),而这种设备接口一般是不需要认证即可登录进行调试的,而且往往获取到的是最高权限,服务器以及智能手机终端都可能预留这样的调试接口,但它们受到的威胁和在物联网中很多放在无人看管的区域的智能硬件设备是不一样的,由于服务器有机房的重重把手和看护,手机一般始终在用户身上,所以威胁要小不少,但对

Qt 多线程同步 与 通信

转自网络 1 多线程同步 Qt提供了以下几个类来完成这一点:QMutex.QMutexLocker.QSemphore.QWaitCondition. 当然可能还包含QReadWriteLocker.QReadLocker.QWriteLocker,但线程同步是应用很少,这里只做简单的讲解! QMutex.QMutexLocker QMutex类提供了一个保护一段临界区代码的方法,他每次只允许一个线程访问这段临界区代码.QMutex::lock()函数用来锁住互斥量,如果互斥量处于解锁状态,当前

java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)

本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: [java] view plain copy print? package com.zejian.test; /** * @author zejian * @time 2016年3月12日 下午2:55:42 * @decrition 模拟卖票线程 */ public class Ticket implements Runnable { //当前拥有的票数 private 

C# 中 多线程同步退出方案 CancellationTokenSource

C# 中提供多线程同步退出机制,详参对象: CancellationTokenSource CancellationTokenSource 中暂未提供复位操作,因此当调用Cancle 之后,若再次调用,需重新初使化对象. 代码示例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.

嵌入式 Linux进程间通信(十二)——多线程同步

嵌入式 Linux进程间通信(十二)--多线程同步 多线程编程中有三种线程同步机制:互斥锁.信号量.条件量.本文将使用生产者消费者问题编程实践三种线程同步方式. 生产者.消费者问题:生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费.消费者线程从缓冲区中获得物品,然后释放缓冲区.当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区.当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来. 一.互斥锁

(转) Java多线程同步与异步

Java线程 同步与异步 线程池1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲 系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制 同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求 不到,怎么办,A线程只能等待下去