前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【逻辑漏洞】通过条件竞争进行文件上传

【逻辑漏洞】通过条件竞争进行文件上传

作者头像
一名白帽的成长史
发布2020-06-24 15:54:02
5K0
发布2020-06-24 15:54:02
举报

Part.1

基本概念

基本概念

基本概念:竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。

漏洞逻辑:首先将文件上传到服务器,然后检测文件后缀名,如果不符合条件再删掉。

攻击思路:首先上传一个php文件,当然这个文件会被立马删掉,所以我们使用多线程并发的访问上传的文件,总会有一次在上传文件到删除文件这个时间段内访问到上传的php文件,一旦我们成功访问到了上传的文件,那么它就会向服务器写一个shell。

Part.2

漏洞分析

漏洞分析

以upload-labs-master的第17关为例:

查看提示,需要代码审计:

查看源代码如下:

会发现上传逻辑为:

  1. 先通过move_uploaded_file(temp_file,upload_file)将文件上传至服务器中。
  2. 上传完毕后通过in_array(file_ext,ext_arr)检查文件名后缀
  3. 如果后缀名合法,则对文件进行重命名,上传完成
  4. 如果后缀名非法,则删除文件。

随意上传一张图片:

成功后查看图片,可以看到上传后的路径如下:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一名白帽的成长史 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档