所有的授权实战入侵网站已添加“如何入侵”标签,在侧边栏的归档中选择“如何入侵”即可查看所有文章

MENU

upload-labs文件上传漏洞练习

August 18, 2020 • Read: 2255 • 常山阅读设置

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 上传特殊可解析后缀

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

    pass-04 上传.htaccess

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

    pass-05 后缀大小写绕过

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

    pass-06 空格绕过

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

    pass-07 点绕过

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

    pass-08 ::$DATA绕过

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

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

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

    pass-10 双写或者多写

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

    pass-11 %00截断

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

    pass-12 0x00截断

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

    pass-13 文件头检查

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

    pass-14 突破getimagesize()

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

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

    pass-15 绕过exif_imagetype()

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

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

    pass-16 二次渲染绕过

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

    pass-17 条件竞争

  • 尝试图片马,成功显示phpinfo

pass-18

  1. 图片马,成功显示phpinfo

pass-19 ./绕过

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

    pass-20 数组绕过

  3. 修改Content-Type: application/octet-streamContent-Type: image/jpeg
  4. 修改-----------------------------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
  5. 上传成功,进入图片地址,查看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进制;
Last Modified: August 16, 2021
Archives QR Code Tip
QR Code for this page
Tipping QR Code