MENU

upload-labs文件上传漏洞练习

2020 年 08 月 18 日 • 阅读: 149 • 阅读设置

upload-labs

pass-01 JS前端过滤

前端js过滤,修改php文件后缀为jpg,上传过程通过brup修改后缀即可。

pass-02 MIME绕过

只判断content-type1,通过brup修改为图片类型即可。

  • image/gif
  • image/jpeg
  • image/png
  • image/gif

pass-03 上传特殊可解析后缀

  1. 查看源码发现,禁止上传.aspx|.asp|.php|.jsp文件,但是后缀为php3php4php5phtmlpht等的后缀php解析,抓包修改为以上后缀即可。
    (需要网页解析器支持)
  2. 从源码来看,上传的文件,会修改文件名,所以需要抓包后的第二个包,该包会显示修改后的路径及文件名。

pass-04 上传.htaccess

  1. 先上传一个.htaccess文件,文件中写SetHandler application/x-httpd-php
  2. 然后上传一个jpg格式的php文件,可以用winhex或者命令行给一个jpg后面添加上php语句。
  3. 上传成功后会显示正常图片,在网址栏打开图片,代码执行成功。可以查看phpinfo。

pass-05 后缀大小写绕过

  1. 过滤所有后缀以及htaccess,尝试后缀大小写
  2. 上传phpinfo.PHp,抓包显示图片路径,打开图片网址,显示phpinfo。

pass-06 空格绕过

  1. 过滤大小写
  2. 尝试空格绕过
  3. 上传phpinfo.php文件,抓包修改文件名为info.php ,上传成功。
  4. 抓包获取图片路径,打开获得phpinfo。

pass-07 点绕过

  1. Windows特性,会自动忽略文件名最后的点
  2. 修改文件后缀为.php.,上传
  3. 抓包获得文件路径
  4. 打开文件,获得phpinfo

pass-08 ::$DATA绕过

  1. 只能在php+Windows环境下生效
  2. 文件后缀后添加::$DATA在Windows下,会将::$DATA后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名。
  3. 抓包修改
  4. 获得图片地址,进入,获得phpinfo

pass-09 . .(点,空格,点)绕过

  1. 过滤前后空格、末尾的点,所以使用点、空格、点绕过
  2. 系统会过滤掉最后的点以及空格,但是不会过滤第二个点。
  3. 上传phpinfo.php,抓包修改为phpinfo.php. .
  4. 进入图片地址,查看phpinfo

pass-10 双写或者多写

  1. 过滤所有格式,并且过滤大小写,考虑双写或者多写
  2. 上传phpinfo.php,抓包修改php文件名后缀为pphphp或者pphphphppphp等,上传成功
  3. 进入图片网址,查看phpinfo

pass-11 %00截断

  1. 截断条件2
  2. 原理3
  3. 上传phpinfo.php,抓包,修改filename为phpinfo.jpg,在POST头中修改save_path为../upload/phpinfo.php%00
  4. 查看图片地址,删掉地址中多余的部分,获得phpinfo

pass-12 0x00截断

  1. 上传phpinfo.php,抓包,修改filename为phpinfo.jpg,在Content-Disposition中的name=“save_path”为../upload/phpinfo.php+,然后在Hex中修改+号的Hex,即2b00
  2. 查看图片地址,删掉地址中多余的部分,获得phpinfo

pass-13 文件头检查

  1. phpinfo.php添加文件头,如GIF89a,然后利用文件包含漏洞访问该gif即可。
    http://127.0.0.1/include.php?file=upload/8120200729135831.gif
  2. 上传图片马,同样利用文件包含漏洞访问该图片即可。
    http://127.0.0.1/include.php?file=upload/8120200729135831.jpg

pass-14 突破getimagesize()

getimagesize()这个函数返回一张图像文件的大小并返回图像的尺寸以及文件类型、图像的高度和宽度。

  1. 上传图片马,使用文件包含漏洞,访问该图片地址http://127.0.0.1/include.php?file=upload/5220200729141211.jpeg,查看到phpinfo。

pass-15 绕过exif_imagetype()

exif_imagetype()函数用来读取一个图像的第一个字节并检查其签名。

  1. 上传图片马,使用文件包含漏洞,访问该图片地址http://127.0.0.1/include.php?file=upload/8320200729142355.jpg,查看到phpinfo。

pass-16 二次渲染绕过

  1. 上传一张gif,然后下载下来,和原gif进行对比,在没有被二次渲染的地方通过WinHex加入php语句<?php phpinfo() ?>
  2. 上传修改过的gif,通过文件包含漏洞访问该gif,查看到phpinfo。

pass-17 条件竞争

  1. 尝试图片马,成功显示phpinfo

pass-18

  1. 图片马,成功显示phpinfo

pass-19 ./绕过

  1. 上传phpinfo.php,抓包修改name="save_name"将其中的参数upload-19.jpg修改为upload-19.php/.
  2. 访问图片地址,查看到phpinfo

pass-20 数组绕过

  1. 修改Content-Type: application/octet-streamContent-Type: image/jpeg
  2. 修改-----------------------------1170497331662411661951140142 Content-Disposition: form-data; name="save_name" upload-20.jpg-----------------------------67722368135993815771449811323 Content-Disposition: form-data; name="save_name[0]" upload-20.php/ -----------------------------67722368135993815771449811323 Content-Disposition: form-data; name="save_name[2]" jpg
  3. 上传成功,进入图片地址,查看phpinfo

  1. 在HTTP协议消息头中,使用content-type来表示具体请求的媒体类型信息。
  2. 截断只能在php小于5.3.4版本,以及php的magic_quotes_gpc为OFF状态。
  3. 0x00,%00,/00都是截断,表示不同。在url中,%00表示ASCII中的0,在ASCII中0作为特殊字符保留,表示字符串结束,所以当url中出现%00是就认为读取已经结束;0x00就是%00解码成的16进制;
最后编辑于: 2020 年 12 月 22 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码