一、什么是条件竞争
竞争条件指多个线程或者进程在读写一个共享数据时结果依赖于它们执行的相对时间的情形。
竞争条件发生在当多个进程或者线程在读写数据时,其最终的的结果依赖于多个进程的指令执行顺序。
例如:考虑下面的例子
假设两个进程P1和P2共享了变量a。在某一执行时刻,P1更新a为1,在另一时刻,P2更新a为2。
因此两个任务竞争地写变量a。在这个例子中,竞争的“失败者”(最后更新的进程)决定了变量a的最终值。
多个进程并发访问和操作同一数据且执行结果与访问的特定顺序有关,称为竞争条件。
二、文件上传中的条件竞争
例如:我们上传一个文件上去,后端会检验上传文件是否和要求的文件是否一致。如果不能达到要求就会删除文件,如果达成要求就会保留,那么当我们上传文件上去的时候,检测是否到达要求需要一定的时间,这个时间可长可短,但是我们确确实实在某一刻文件已经上传到了指定地址。这时候就会造成条件竞争。
三、本地环境演示
如下是上传文件抓的数据包
把它放入intruder模块,设置为 Sniper
Payload设置为Null
发包数量自行设置 越多成功几率越大
在intruder 发包过程中,不断访问我们上传的shell就会发现成功访问
【默认已经知道了上传路径,如要追究路径哪来的,可以上传正常图片看返回包信息】