WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
22-并发漏洞
浏览
1
## 定义 并发漏洞(Race Condition Vulnerability)是指当多个线程 / 进程 / 请求同时竞争访问或修改共享资源时,由于程序未正确处理同步逻辑,导致资源状态出现非预期结果的安全问题。 并发漏洞是软件在多线程、分布式或高并发场景下,因资源竞争、顺序依赖或状态不一致导致的安全缺陷。其核心原理在于系统设计未充分考虑并发环境下的同步与一致性,导致攻击者可利用时间差或竞争条件实施攻击。 ## 原理 核心原因是共享资源的 “非原子操作” 被并发触发,具体可分为以下几类: ### 同步机制缺失 程序对共享资源(如数据库记录、内存变量、文件等)的读写操作未加锁或同步控制,导致多个请求同时修改资源时,后一个操作覆盖前一个操作的中间状态,最终结果与预期不符。 例:两个请求同时读取到 “库存 = 1”,各自执行 “库存 - 1”,最终库存变为 - 1(超卖),而不是 0。 ### 操作的 “非原子性” 一个看似简单的逻辑(如 “检查 - 修改 - 保存”),实际由多个步骤组成(如先查库存、再减库存、最后保存),步骤之间存在 “时间差”,给并发攻击留下可乘之机。 ### 多线程 / 进程调度的不确定性 操作系统对线程 / 进程的调度顺序是随机的,若程序依赖 “操作按顺序执行” 的假设,未考虑调度随机性,就可能出现逻辑漏洞。 ## 漏洞类型 并发漏洞在需要 “多用户共享资源” 的系统中尤为常见,以下是高频场景及案例: > 电商 / 支付系统 库存超卖:秒杀、促销活动中,多个用户同时抢购限量商品,因并发修改库存时未控制同步,导致实际卖出数量超过库存(如库存 10 件,最终卖出 15 件)。 重复支付 / 扣款异常:用户多次点击支付按钮,并发请求导致重复扣款;或支付流程中 “验证余额 - 扣减余额” 步骤被并发触发,导致余额不足仍支付成功。 > 权限与会话管理 权限越权:用户 A 注销账号时,程序删除会话的操作与用户 B 使用 A 的会话访问资源的请求并发,可能导致 B 在 A 注销后仍能短暂访问 A 的权限。 会话 ID 竞争:用户登录时,程序生成会话 ID 的过程被并发请求干扰,可能导致多个用户共用一个会话 ID(权限混乱)。 > 数据存储与计算 账户余额异常:多个转账请求同时操作同一账户,因并发计算错误,导致余额多增 / 少减(如转账 100 元,实际到账 200 元)。 文件竞争:多个请求同时读写同一文件(如日志、配置文件),可能导致文件内容错乱、权限被篡改,甚至通过竞争写入恶意代码。 > API 与接口调用 接口未限制并发请求频率,攻击者通过脚本同时发送大量请求,利用并发漏洞绕过 “单次请求限制”(如限制单次最多提现 1000 元,并发 10 次提现成功 10000 元)。 ## 插件安装 在burp商城中进行安装,搜索关键词【turbo】  安装成功之后,只需要在抓到的数据包中找到需要并发的位置使用参数%s,就可以将数据包发送到并发插件中。  右键,将数据包发送到插件中  由于新版本中,将并发脚本删除掉了,所以需要手动上传并发脚本。  选择脚本所在的路径后,  设置好之后,点击最下方的【Attack】即可  > race.py脚本分析 目的是模拟多个请求同时竞争访问目标资源。 ```python def queueRequests(target, wordlists): engine = RequestEngine(endpoint=target.endpoint, concurrentConnections=30, requestsPerConnection=100, pipeline=False ) for i in range(30): engine.queue(target.req, target.baseInput, gate='race1') engine.openGate('race1') engine.complete(timeout=60) def handleResponse(req, interesting): table.add(req) ``` queueRequests函数 ```python def queueRequests(target, wordlists): # 初始化请求引擎 engine = RequestEngine( endpoint=target.endpoint, concurrentConnections=30, # 并发连接数 requestsPerConnection=100, # 每个连接发送的请求数 pipeline=False # 是否启用HTTP管道 ) # 批量排队请求(30个连接 × 100请求 = 3000总请求) for i in range(30): engine.queue( target.req, # 请求模板 target.baseInput, # 基础输入参数 gate='race1' # 请求门控标识 ) # 释放所有被门控的请求 engine.openGate('race1') # 设置超时并完成请求 engine.complete(timeout=60) ``` handleResponse函数 ```python def handleResponse(req, interesting): # 将请求信息添加到结果表格 table.add(req) ```
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~