0%

upload-labs

  • JS 脚本绕过

    • burp 剔除响应 JS

      对于 JS 前端验证,直接在前端剔除即可

      Proxy-options-Response Modification-Remove all JavaScript

    • 浏览器审计剔除

      保存为新文件后删除 JS 代码,然后进行上传

  • 绕过 MIME-Type

    MIME-Type 设定某种扩展名的文件用特定程序来打开,该验证发生在服务端,通过检查 http 包的 Content-Type 字段中的值来判断上传文件是否合法

    抓包修改即可

    一个 trick 是按照提示上传正确格式文件并记下正确的 Content-Type

    weevely有点废物,连接不上,没图

  • 绕过黑名单

    • 若不允许 .php 可以尝试 .php3 , .php5 , .phtml , .phps , .pht
    • burp 修改后缀名+文件头欺骗
    • 后缀名大小写
    • 抓包后文件名加空格
    • htaccess 绕过

      先上传 .htaccess 文件,内容为

      1
      2
      3
      <FilesMatch "png">
      SetHandler application/x-httpd-php
      </FileMatch>

      设置当前目录所有文件都使用 php 解析,若符合语法则当作 php 执行,否则报错

      Apache 中仅当 http.conf 中设置

      1
      AllowOverride All

      上传成功后再上传包含有 php 代码的,符合提交要求的文件即可

    • . 绕过

      对于服务器是 Windows 的,文件后缀名最后如果是 . 会被删除

    • 特殊符号绕过

      Windows 下,若上传 1.php::$DATA 会在服务器端生成一个 test.php

    • 路径拼接绕过

      1.php. .

      一些黑名单过滤中会过滤末尾的点与空格

      deldot 删除最后一个点, trim 删除空格,那么最终上传的文件名为 1.php.

      再利用 Windows 特性删除最后一个点

    • 解析漏洞

      • Apache 解析漏洞

        Apache 会从右往左检查文件后缀名,直到遇到能执行的文件,那么可以上传如此文件来绕过后缀名检查

        1.php.qwe.asd

      • ISS6.x 解析漏洞

        • 服务器默认下不会解析 ; 后的部分,相当于截断,那么可以上传 1.asp;.jpg 来绕过

        • 该版本默认将 .asp 目录下所有文件当成 asp 执行

        • 该版本将 .asa , .cdx , .cer 解析为 asp

      • ISS7.x 解析漏洞

        在文件路径 .../qwq.png 后面加上 /.php 会将 qwq.png 当作为 php 文件解析

        即访问 qwq.png/.php 会执行 qwq 中的 php 代码

      • %00 截断(CVE-2006-7243)

        php<5.3.4 且关闭 magic_quoets_gpc

        原理是 %00c 中的 NULL ,处理函数会将其当作结束标记,类似于 sql 注入中结尾的注释符 --+ ,例;

        1
        2
        3
        4
        <?php
        $file = $_GET['file'];
        include $file.'tpl.html';
        ?>

        只需要提交

        1
        ?file=../../../etc/passwd%00

        即可访问

        get 下直接加在后缀位置,post 类型需要多进行一步 url-decode

      • exif 绕过

        exif 是针对图片马的检测方式,可以删除图片中的一句话木马

        绕过方式是比对上传前后图片的二进制,找没有被替换的部分,并将马添加到那里

      • 二次渲染与条件竞争

        对于新上传的文件,常常会定义一个暂时变量存放,之后再对其进行后续操作,即使暂时文件会在很短实践内被再次渲染为正式文件

        1
        2
        3
        4
        5
        6
            <?
        if(($fileext == "jpg") && ($filetype=="image/jpeg")){
        if(move_uploaded_file($tmpname,$target_path)){
        //使用上传的图片生成新的图片
        $im = imagecreatefromjpeg($target_path);
        ?>
        • 条件竞争

          当文件被一个进程占用时,如果不释放,下一个进程就无法占用,也就是说当访问暂时文件时,服务器无法对其进行二次渲染

          实际操作中,可以用 intruder 模块反复发送文件上传数据包,同时浏览器不断访问临时文件,直到访问成功;或者用 python 脚本访问该路径配合 repeater 重放数据包

          木马位置的获取可以通过上传合法文件分析数据包得到

          以下是一个木马案例,脚本一旦触发成功就会在路径下创建一个shell.php脚本,内容是显示php信息

          1
          <?php file_put_contents('./upload/shell.php','<?php phpinfo();?>');?>