条件竞争-v1
v1:基本流程。
基础
概念
条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现bug。尤其在当前我们的系统中大量对资源进行共享,如果处理不当的话,就会产生条件竞争漏洞。说的通俗一点,条件竞争涉及到的就是操作系统中所提到的进程或者线程同步的问题,当一个程序的运行的结果依赖于线程的顺序,处理不当就会发生条件竞争。
产生条件
-
并发:至少存在两个并发执行流。这里的执行流包括线程,进程,任务等级别的执行流。 -
共享对象:多个并发流会访问同一对象。常见的共享对象有共享内存,文件系统,信号。一般来说,这些共享对象是用来使得多个程序执行流相互交流。此外,我们称访问共享对象的代码为临界区。在正常写代码时,这部分应该加锁。 -
改变对象:至少有一个控制流会改变竞争对象的状态。因为如果程序只是对对象进行读操作,那么并不会产生条件竞争。
常见发生场景
-
提现:利用条件竞争可能获取到大量money。(不要尝试,你不会有机会的。)
-
文件上传(CTF中最常见的场景)
-
Dos攻击
利用
Burpsuite的intruder模块
实现过程:
-
构造好要上传的文件,Burpsuite抓包并放到
Intruder模块。 -
配置好相关payloads设置,选择
Null payloads并勾选无限重放。

-
设置多线程重放。

-
检测到成功上传后,直接利用马即可。
python脚本
"""
仅用作举例展示大致过程,具体情况具体分析
"""
import threading
# 要执行的方法,一般写为请求
def increment(resource):
for _ in range(10000):
resource += 1
# 共享资源,请求中一般需要session等认证信息
shared_resource = 0
# 建立并开启多线程
thread1 = threading.Thread(target=increment, args=(shared_resource,))
thread2 = threading.Thread(target=increment, args=(shared_resource,))
thread1.start()
thread2.start()
参考内容
https://www.freebuf.com/articles/web/275557.html
https://blog.51cto.com/u_16175500/11583428

浙公网安备 33010602011771号