Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
22并发漏洞
## 定义 并发漏洞(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) ```
毛林
2025年9月10日 18:16
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码