欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件上传绕过

程序员文章站 2022-07-16 20:52:00
...
  1. 查看是否前端检查文件类型
  2. 抓包修改content-type
    文件上传绕过
  3. 黑名单验证的话,可以使用php3,php5,phtml,pht等来绕过,但需要在httpd-conf中开启
    默认是被注释掉的,且默认只有.php 和 .phtml
    文件上传绕过
  4. 使用.htaccess绕过
    因此先上传一个.htaccess文件,这样所有文件都会当成php来解析
    然后上传一个1.jpg的文件
    .htaccess文件内容如下:
    文件上传绕过
    上传test.htacess,但是上传的时候抓包将名字去掉,改为.htaccess
    文件上传绕过
    上传1.jpg,然后访问连接,然后使用菜刀连接
    文件上传绕过
  5. 先上传一个以auto_prepend_file=1.gif为内容的**.user.ini**文件
    然后再上传一个内容为php的一句话的脚本,命名为1.gif
    .user.ini文件里的意思是:所有的php文件都自动包含1.gif文件
    .user.ini相当于一个用户自定义的php.ini。
    所以上传1.gif后,访问图像地址,将文件名改为readme.php,然后通过密码连接
    文件上传绕过
  6. 大小写绕过
  7. 通过文件名末尾加空格的方式绕过
    文件上传绕过
  8. 通过文件末尾加点的方式进行绕过
    文件上传绕过
  9. 特殊字符::$DATA绕过
    使用::$DATA前提:
    必须是windows, 必须是php, 必须是那个源文件
    php在window的时候如果文件名+::$DATA,会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持::$DATA之前的文件名
  $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
  这一句,我们可以采用Windows文件流特性绕过,文件名改成::$DATA之前的文件名

文件上传绕过

  1. 代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过
    文件上传绕过
  2. 如果代码使用str_ireplace()函数只替换一次,可以通过修改文件名双写1.pphphp来绕过
  3. 使用%00截断
    前提:
    1.php版本小于5.3.4;2.php的magic_quotes_gpc为OFF状态(phpinfo中可以查看,在php.ini中可以修改)
    原理:
    php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
    在magic_quotes_gpc=On的情况下,如果输入的数据有
    单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
    …/upload/1.php%00会截断后面的1.jpg(因为代码中使用拼接的方式来取得文件路径)
    在上传后,访问…/upload/1.php,然后使用该链接连接菜刀
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
  1. 如果POST传参使用00截断的话
    save_path参数通过POST方式传递
    POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改
    将25改为00
    文件上传绕过
  2. 条件竞争
    如果文件是先上传后验证,发现非法就删除
    就可以利用条件竞争,通过burp暴破模块,寻找还没来得及删除的文件
相关标签: Web攻击