freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

条件上传之竞争漏洞
2021-11-23 11:04:00

文件上传

WEBRESOURCE6d0a2274b7ff169239a71b3b97c8d363.png

用一张图片简单描述一下文件上传时发送的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文件

image
image
image
burpsuite工具采用多线程重放数据包手工打开浏览器快速点击URL访问shell.php,直到界面出现如下所示:
image

漏洞修复与防范

条件竞争漏洞产生的很大一部分原因是程序不严谨,对于并发操作没有做好同步制约,毕竟开发者在进行代码开发的时候,常常倾向于代码会以线性的方式执行,而并行服务器会同时执行多个线程,这就会导致意想不到的结果。

解决条件竞争的方法就是要让存取公共变量的线程进行同步,也就是线程安全,目的是让过程实现原子性。例如读和写某一变量的过程是原子性的,不可分割的,在读写的过程中,其他指令无法插入,等待设置完值后才可以读其中的数据,这就使得每次读取的值就是最新值。一般线程安全可通过锁(互斥所、读写锁等)、条件变量、信号量、事件等方式实现。“引狼入室”的方法不可取,最好先进行充分的检测,再上传到服务器。


本文参考多篇文章,联系侵删。

# web安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者