用一张图片大略描述一下文件上传时发送的http协议内容
文件上传漏洞的缘故原由对付上传文件的后缀名(扩展名)没有做较为严格的限定对付上传文件的MIMETYPE(content-type)(用于描述文件的类型的一种表述方法)没有做检讨权限上没有对付上传的文件目录设置不可实行权限web server对付上传文件或者指定目录的行为没有做限定在WEB中进行文件上传的事理是通过将表单设为multipart/form-data,同时加入文件域,而后通过HTTP'协议将文件内容发送到做事器,做事器端读取这个分段(multipart)的数据信息,并将个中的文件内容提取出来并保存的。
条件竞争漏洞是一种做事器真个漏洞,是由于开拓者设计运用程序并发处理时操作逻辑不合理而造成。当运用面临高并发的要求时未能同步好所有要求,导致要求与要求之间产生等待时涌现逻辑毛病

程序在利用多线程时,没有做好线程同步,导致产生非预期结果。
比如:先存储文件,再判断是否合法,然后又删除。。。首先将文件上传到做事器,然后检测文件后缀名,如果不符合条件,就删掉,范例的“引狼入室”攻击:首先上传一个php文件当然这个文件会被立马删掉,以是我们利用多线程并发的访问上传的文件,总会有一次在上传文件到删除文件这个韶光段内访问到上传的php文件,一旦我们成功访问到了上传的文件,那么它就会向做事器写一个shell。
<?php fputs(fopen("shell.php",'w'), '<?php @eval($_POST["x"]);?>');?>上传的php文件被删除,但是会保留新天生的shell.php文件
burpsuite工具采取多线程重放数据包手工打开浏览器快速点击URL访问shell.php,直到界面涌现如下所示:
漏洞修复与戒备
条件竞争漏洞产生的很大一部分缘故原由是程序不严谨,对付并发操作没有做好同步制约,毕竟开拓者在进行代码开拓的时候,常常方向于代码会以线性的办法实行,而并行做事器会同时实行多个线程,这就会导存问想不到的结果。
办理条件竞争的方法便是要让存取公共变量的线程进行同步,也便是线程安全,目的是让过程实现原子性。例如读和写某一变量的过程是原子性的,不可分割的,在读写的过程中,其他指令无法插入,等待设置完值后才可以读个中的数据,这就使得每次读取的值便是最新值。一样平常线程安全可通过锁(互斥所、读写锁等)、条件变量、旗子暗记量、事宜等办法实现。“引狼入室”的方法不可取,最好前辈行充分的检测,再上传到做事器。
本文参考多篇文章,联系侵删。