type
status
slug
tags
category
icon
password
Property
Nov 16, 2022 06:52 AM
date
summary
前言
因为准备双11购物节相关原因吧,最近给客户渗透测试经常接触到会员活动、会员积分、会员抽奖之类的功能。因为这些系统都比较新,而且也做过很多轮的渗透测试,所以常规漏洞例如:sql注入、xss还是比较少的。正好这些会员积分抽奖相关功能也是并发漏洞的高发区,所以就特地记录一下
原理
假设某限购程序代码逻辑如下
这时候如果有大量并发线程出现
代表就会变成如下,首先会有大量线路执行第一行,查询是否购买的代码。因为这时候都是没有买过,所以buy参数获取的结果都是0,从而都可以通过限购校验 就造成了并发漏洞
引用网上一张图片
案例
其实了解原理之后主要就是并发某个请求
可以看到对应有增加
如果只需要验证漏洞是否存在使用burp自带的Intruder模块就够了,但是如果想要最大并发我找了一下有个工具就是apache 的JMeter, 我也是试了一些不知道是设置错误还是什么原因并没有达到理想的效果。忘了截图就不贴图了
总结
修复方式其实还算是比较简单,主要就是使用数据库锁,redis可以使用
INCR
、SETNX
、SET
mysql可以
lock tables
这些方式来算锁定数据库。但是为什么还是这么多并发漏洞呢?其实我觉得可能原因1. 首先锁表操作比不锁表操作代码量是多了很多的。2. 关键原因就是在于要锁的表很多开发并不能每次都想到那些表需要锁(例如:新用户首次优惠5折抽奖,这种情况其实需要锁的表就有两个1.是新用户这个flag,2.就是抽奖消耗积分。这种情况开发可能只会想到锁定积分表,就会导致一个用户使用多次新人抽奖优惠漏洞)