客户端校验(javascript校验)

例题:http://106.12.37.37:10001/
绕过方法:

  • 抓包改包
  • 禁用js

    服务端校验

    1.content-type字段校验(MIME类型检测)

    例题:http://106.12.37.37:10002/
  • 检测content-type的代码示例:
    1
    2
    3
    4
    if($_FILES["upfile"]["type"]!="image/gif"){
    echo "只允许上传GIF图片";
    exit;
    }
    绕过方法:
  • 抓包改content-type字段
  • 改文件名后上传抓包后再改回文件名
  • 长传正常文件改文件内容

    2.后缀名黑名单校验

    例题:http://106.12.37.37:10003/
  • 判断后缀名示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $uptypes = array("php","php3");
    $filename=$_FILES["upfile"]["name"];
    function getFileExt($file_name){
    while($dot = strpos($file_name,".")){
    $file_name = substr($file_name,$dot+1);
    }
    return $file_name;
    }
    $filetype = strtolower(getFileExt($filename));
    if(in_array($filetype,$uptypes)){
    echo "非法文件禁止上传";
    exit();
    }
    绕过方法:
  • 大小写绕过,例如Php,PhP
  • 利用黑名单中没有但是能够被解析的后缀名,例如php3,php4,php5,php7,pht,phtml,phps(在/etc/apache2/mods-enabled/phpxxx.conf查看可解析的后缀名)
  • 配合apache的.htaccess文件上传解析
    前提:/etc/apache2/apache2.conf中的AllowOverride设为ALL
    .htaccess文件示例:
    1
    2
    3
    <FilesMatch "jpg">
    SetHandler application/x-httpd-php
    </FilesMatch>
  • 使用00截断
    详见:https://blog.csdn.net/Fly_hps/article/details/79658059

    http://www.admintony.com/%E5%85%B3%E4%BA%8E%E4%B8%8A%E4%BC%A0%E4%B8%AD%E7%9A%8400%E6%88%AA%E6%96%AD%E5%88%86%E6%9E%90.html
    例题:http://ctf5.shiyanbar.com/web/upload/
  • 超长文件名截断上传
    windows 258byte | linux4096byte