upload-labs解题

目录

  • Pass-01 js检查
  • Pass-02 验证Content-type
  • Pass-03 黑名单绕过
  • Pass-04 .htaccess绕过
  • Pass-05 点+空格+点绕过
  • Pass-06 大小写绕过
  • Pass-07 空格绕过
  • Pass-08 点绕过
  • Pass-09 ::$DATA绕过
  • Pass-10 点+空格+点绕过
  • Pass-11 双写绕过
  • Pass-12 00截断
  • Pass-13 00截断
  • Pass-14 图片马绕过
  • Pass-15 getimagesize()-图片马
  • Pass-16 exif_imagetype()-图片马
  • Pass-17 二次渲染
  • Pass-18 条件竞争
  • Pass-19 条件竞争
  • Pass-20 00截断

Pass-01 js检查

条件:前端对后缀名(.jpg/.png/.gif)做限制
upload-labs解题_第1张图片

Pass-02 验证Content-type

条件:后端对MIME做限制
upload-labs解题_第2张图片

Pass-03 黑名单绕过

条件:后端对后缀名(.asp/.aspx/.php/.jsp)做限制(黑名单)
可以上传.phtml .phps .php5 .pht
前提是apache的httpd.conf中有如下配置代码

AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml

upload-labs解题_第3张图片

Pass-04 .htaccess绕过

条件:.htaccess绕过
黑名单拒绝了几乎所有有问题的后缀名,除了.htaccess
前提条件(1.mod_rewrite模块开启。2.AllowOverride All)
因此先上传一个.htaccess文件,内容如下:

SetHandler application/x-httpd-php 

这样所有文件都会当成php来解析
upload-labs解题_第4张图片
upload-labs解题_第5张图片
upload-labs解题_第6张图片

Pass-05 点+空格+点绕过

可以用第十关的方法来进行绕过也就是点空格点绕过(. .),因为它的验证首先会删除文件名两端的空格,但是我们构造的后缀名的两端没有空格,所以此验证无效,接着它会删除我们后缀名中最后的一个点,然后又会过滤掉我们的一个空格,此时上传文件的后缀名为.php.不在黑名单里面,所以可以成功被上传,而且又因为windows操作系统的原因,文件后缀名最后的点也会被删除,所以我们就完成了绕过。
upload-labs解题_第7张图片
upload-labs解题_第8张图片

补充:其实这道题要考察的是通过**.user.ini**进行绕过,但尝试了几次,没成功,以后成功了,在补充这一种方法。

Pass-06 大小写绕过

条件:大小写绕过
upload-labs解题_第9张图片

Pass-07 空格绕过

条件:空格绕过
这题没有对后缀名进行去空,因此可以在后缀名加空格绕过
upload-labs解题_第10张图片

Pass-08 点绕过

条件:点绕过
没有对后缀名末尾的点进行处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过:
upload-labs解题_第11张图片

Pass-09 ::$DATA绕过

没有对后缀名中的’:: D A T A ’ 进 行 过 滤 。 在 p h p + w i n d o w s 的 情 况 下 : 如 果 文 件 名 + " : : DATA’进行过滤。在php+windows的情况下:如果文件名+":: DATAphp+windows+"::DATA"会把:: D A T A 之 后 的 数 据 当 成 文 件 流 处 理 , 不 会 检 测 后 缀 名 . 且 保 持 " : : DATA之后的数据当成文件流处理,不会检测后缀名.且保持":: DATA,."::DATA"之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过:
upload-labs解题_第12张图片

Pass-10 点+空格+点绕过

代码先是去除文件名最后所有的.,再去除文件名前后的空格,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过
upload-labs解题_第13张图片

Pass-11 双写绕过

黑名单过滤,将黑名单里的后缀名替换为空且只替换一次,因此可以用双写绕过
upload-labs解题_第14张图片

Pass-12 00截断

白名单判断,但$img_path是直接拼接,因此可以利用%00截断绕过。

截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态。

upload-labs解题_第15张图片

Pass-13 00截断

save_path参数通过POST方式传递,还是利用00截断,因为POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改
upload-labs解题_第16张图片
upload-labs解题_第17张图片

Pass-14 图片马绕过

通过读文件的前2个字节判断文件类型,因此直接上传图片马即可,制作图片马:
在这里插入图片描述
upload-labs解题_第18张图片
直接访问图片并不能把图片当做PHP解析,因此还需要利用文件包含漏洞
upload-labs解题_第19张图片

Pass-15 getimagesize()-图片马

这题是用getimagesize函数判断文件类型,还是可以图片马绕过,方法同pass-14
upload-labs解题_第20张图片

Pass-16 exif_imagetype()-图片马

这里用到php exif_imagetype模块来判断文件类型,用图片马绕过,方法同pass-14

Pass-17 二次渲染

判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,具体可以参考链接: 这篇文章 。可是在复现的时候还是因为二次渲染以后php代码还是出被修改。

Pass-18 条件竞争

这里是条件竞争,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除,因此我们可以上传1.php只需要在它删除之前访问即可,可以利用burp的intruder模块不断上传,然后我们不断的访问刷新该地址即可。
upload-labs解题_第21张图片
upload-labs解题_第22张图片

Pass-19 条件竞争

也存在条件竞争的问题,不过这题对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。
upload-labs解题_第23张图片
upload-labs解题_第24张图片

Pass-20 00截断

move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过
upload-labs解题_第25张图片
upload-labs解题_第26张图片

你可能感兴趣的:(web安全测试,php,安全漏洞)