upload-labs:Pass-01~15

Pass-01

  1. 禁用JS
  2. burpsuit抓包修改文件后缀
  3. 直接在网站下查看元素,找到对应代码段,增加可通过的文件类型.php

Pass-02

MIME验证绕过:

先上传PHP文件,然后用burpsuit抓包修改Content-Type为image/jpeg或者image/png


Pass-03

这一关设置了黑名单,禁止上传.asp|.aspx|.php|.jsp后缀文件,但是可以上传其它任意后缀文件。我们可以上传 .php、.phtml、.phps、.php5、.pht、.Php等类似的格式绕过。
虽然这样能上传成功,但是.php5等文件不能解析,要正常解析还需要满足以下其中一种条件:

  1. Apache的 httpd.conf 中有如下配置代码:

    AddType application/x-httpd-php .php .phtml .phps .php5 .pht

  2. 上传 .htaccess 伪静态文件,内容如下:


    SetHandler application/x-httpd-php

用伪静态需要保证:
①mod_rewrite模块开启
②目录设置是AllowOverride All

Pass-04

这一关禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件

而且还加上了

$file_ext = strtolower($file_ext)

它可以将大写转换为小写,也就是说,我们不能通过改变后缀的大小写绕过,所有但是它却没有禁止.htaccess等类似后缀的文件,所以我们仍然可以通过上传.htaccess伪静态文件来绕过。

  1. 先上传一个 .htaccess 文件,内容如下:

SetHandler application/x-httpd-php//伪静态规则:所有文件都会解析为php

  1. 然后再上传一个.php6木马文件(只要不在禁止名单里,用.php几都行)

Pass-05

和之前一样,依旧是加了好多黑名单,并且还禁止了.htaccess后缀,但是却没有将后缀进行大小写统一,所以我们可以通过将后缀名改为.Php绕过


Pass-06

本关依旧是禁止了一大堆后缀,而且也不能通过大小写绕过,但是我们可以通过在后缀下面加空格来绕过。
在windows下xx.jpg[空格] 或 xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点。但是在burpsuit中不会删除末尾的点和末尾的空格,因此我们可以通过burpsuit抓包,修改后缀名为.php[空格]


Pass-07

本关加上了

$file_ext = trim($file_ext); //首尾去空

也就是说,它会把后缀中的空格去掉,但是并没有去掉点,所以可以用burp将后缀名改为.php.


Pass-08

还是黑名单,但是没有对后缀名进行去“:: D A T A ” 处 理 , 利 用 w i n d o w s 特 性 , 可 在 后 缀 名 中 加 “ : : DATA”处理,利用windows特性,可在后缀名中加“:: DATAwindows::DATA”绕过

NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$DATA。

Pass-09

黑名单,同时通过语句

$file_ext = str_ireplace('::$DATA', '', $file_ext);

对文件名进行了去::$DATA处理,但是我们可以通过.php. .来绕过,因为虽然它对文件名末尾的点进行了删除,但是只会删除一次,那么删除之后的文件名后缀为.php.,就可以绕过了。

Pass-10

本关会将敏感后缀(php)替换为空,所以我们可以将后缀名改为.pphphp双写绕过,这样即使他把php替换为空,那我们剩下的后缀还是php

Pass-11

本关提示上传路径可控;
可以用%00截断绕过。

当文件系统读取到%00时,会停止读取后面的字符串。
利用%00截断需要满足两个条件:    
1. PHP 版本 < 5.3.4
2. php.ini 中 magic_quotes_gpc=off

用Burpsuit抓包做如下修改,Go一下即可上传成功
upload-labs:Pass-01~15_第1张图片


Pass-12

本关依旧是上传路径可控,但是跟上一题不同的是这题save_path 从 GET 变成了 POST,此时不能再直接使用 %00 截断,原因是 %00 截断在 GET 中被 url 解码之后是空字符。但是在 POST 中 %00 不会被 url 解码,所以只能通过 burpsuite 修改 hex 值为 00 进行截断,也就是在post情况下,需要先对%00进行一个url编码。
upload-labs:Pass-01~15_第2张图片编码后,%00会变为空格,此时Go一下即可。


Pass-13

本关检查图标内容开头2个字节,直接上传图片马即可。(能成功上传图片马,但是如果要利用的话,还需要进行文件包含。)
文件包含步骤:

  1. 在网站根目录下新建upload.php文件,并写入

    $filename  = $_GET['filename'];
    include($filename);
?>  
  1. 将文件包含进去:http://localhost/upload.php?filename=./upload/(要包含的文件名),比如我上传成功的文件为保存在upload目录下的8420191116021239.gif,则文件包含的方式为http://localhost/upload.php?filename=./upload/8420191116021239.gif,包含成功。

Pass-14

本关使用getimagesize()检查是否为图片文件,所以直接上传图片马即可成功。


Pass-15

本关使用exif_imagetype()检查是否为图片文件,依旧是直接上传图片马。


你可能感兴趣的:(upload-labs,文件上传,upload)