CTF 文件上传

目录

  • 一、客户端校验
    • 1、禁用JS
    • 2、抓包改包
  • 二、服务端校验
    • 1、MIME类型检测
    • 2、后缀名黑名单校验
    • 3、后缀名白名单校验
    • 4、内容头校验
    • 5、竞争上传
    • 6、过滤php

两种校验方式

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

一、客户端校验

绕过方法

  • 抓包改包
  • 禁用JS

1、禁用JS

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

2、抓包改包

用bp抓包后直接改后缀名

二、服务端校验

1、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字段
    • 改文件名后上传抓包后再改回文件名
    • 上传正常文件改文件内容
    • 。。。

2、后缀名黑名单校验

  • 绕过方法
    • 大小写绕过,例如Php、PhP
    • 利用黑名单中没有的,但是又能够被解析的后缀名,例如php、php3、php4、php5、php7、pht、phtml、phps
    • 配合Apache的.htaccess文件上传解析
      该文件可以理解为Apache的分布式配置文件,在一个特定的文档中放置,以作用于此目录及其所有子目录。管理员可以通过Apache的AllowOverride指令来设置/etc/apache2/apache2.conf,默认是NONE,需要为ALL
      CTF 文件上传_第1张图片
    
    SetHandler application/x-httpd-php
    

    不能写时使用伪协议
    AddType application/x-httpd-php .wuwu php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.wuwu"

    • .user.ini上传
      刷题记录:[SUCTF 2019]CheckIn
    • 使用00截断(需要magic_quotes_gpc=Off)
      基于一个组合逻辑漏洞
    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)
      使用./或.

3、后缀名白名单校验

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

4、内容头校验

CTF 文件上传_第2张图片

  • 绕过方法
    在恶意脚本前加上允许上传文件的头标识
    CTF 文件上传_第3张图片

    GIF89a
    

5、竞争上传

  • 情景
    文件上传后,检测是否合法,不合法就删除
  • 利用方式
    在删除前访问到上传的文件
    '; file_put_contents($file,$shell); ?>
    用bp同时上传和访问
  • 例子
    https://github.com/backlion/demo/blob/master/lfi_phpinfo.py

6、过滤php

  • js标签绕过,需要php小于7.0
  • PHP开启短标签即short_open_tag=on时,可以使用输出变量

你可能感兴趣的:(CTF 文件上传)