zoukankan      html  css  js  c++  java
  • [HarekazeCTF2019]Avatar Uploader 1

    [HarekazeCTF2019]Avatar Uploader 1 :finfo_file()和getimagesize()关于文件类型的区别

    一、简介

      分析题目关键的地方,可知:

    二、本地测试

      搭建本地环境,echo关键变量进行调试:

    // check whether file is uploaded
    if (!file_exists($_FILES['file']['tmp_name']) || !is_uploaded_file($_FILES['file']['tmp_name'])) {
      error('No file was uploaded.');
    }
    echo $_FILES['file']['tmp_name'].'<br>';
    
    // check file size
    if ($_FILES['file']['size'] > 256000) {
      error('Uploaded file is too large.');
    }
    
    // check file type
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    echo $finfo.'<br>';
    $type = finfo_file($finfo, $_FILES['file']['tmp_name']);
    echo $type.'<br>';
    finfo_close($finfo);
    if (!in_array($type, ['image/png'])) {
      error('Uploaded file is not PNG format.');
    }
    
    // check file width/height
    $size = getimagesize($_FILES['file']['tmp_name']);
    echo var_dump($size).'<br>';
    if ($size[0] > 256 || $size[1] > 256) {
      error('Uploaded image is too large.');
    }
    echo var_dump(IMAGETYPE_PNG);
    if ($size[2] !== IMAGETYPE_PNG) {
      // I hope this never happens...
    echo 'YES';
     error('What happened...? OK, the flag for part 1');
    }

    1、首先上传给出的符合条件的图片,如下:

      

    finfo_file函数应该是直接打开文件,来获取文件类型。而getimagesize函数是通过图片尺寸数组中第三个元素是否为int型的3来判断的。
    2、一点点删除图片来测试
    在此处存在一个空格,仍是正常的:

    如果删除此空格,则getimagesize函数就异常了,如下:

    
    


  • 相关阅读:
    试算平衡
    对账服务
    会计科目与账户
    支付系统难点全面梳理剖析:核算对账核心
    支付系统设计——你不可不知的会计核心(转发整理)
    支付系统设计之查漏补缺的一环:差错账处理
    支付清算业务总结
    财务对账系统v1.0立项到结项的整体回顾
    DNS视图及压力测试(四)
    一个快速检测系统CPU负载的小程序
  • 原文地址:https://www.cnblogs.com/or4nge/p/13473885.html
Copyright © 2011-2022 走看看