Part.1
基本概念
基本概念
基本概念:竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
漏洞逻辑:首先将文件上传到服务器,然后检测文件后缀名,如果不符合条件再删掉。
攻击思路:首先上传一个php文件,当然这个文件会被立马删掉,所以我们使用多线程并发的访问上传的文件,总会有一次在上传文件到删除文件这个时间段内访问到上传的php文件,一旦我们成功访问到了上传的文件,那么它就会向服务器写一个shell。
Part.2
漏洞分析
漏洞分析
以upload-labs-master的第17关为例:
查看提示,需要代码审计:
查看源代码如下:
会发现上传逻辑为:
随意上传一张图片:
成功后查看图片,可以看到上传后的路径如下:
Part.3
漏洞利用
漏洞利用
我们先在本地创建一个test.php文件:
//访问该页面,就会在本地写入一个info.php文件。
直接上传的话,肯定会被删除:
这里尝试一下条件竞争。
已知文件上传后的路径为upload-labs-master/upload/test.php
现在访问肯定不存在:
使用burp抓取上传报文:
再抓取一个访问报文:
将以上两个报文都发送至intruder模块。
在报文url中加上?a=1,并将a设置为变量,用于不断发送:
访问包设置a参数:
都选择类型为Numbers的字典,数量为一万:
将线程都调到20:
开始攻击,当出现200时,上传成功:
尝试访问生成的info.php:
成功~
Part.4
防护手段
防护手段
对于文件上传类的条件竞争漏洞,一定要先充分检查之后再进行上传。
而不是先上传,之后再检测。
最后附上乌云的实际案例:
https://wooyun.laolisafe.com/bug_detail.php?wybug_id=wooyun-2014-049794