zoukankan      html  css  js  c++  java
  • DVWA全级别之File Upload(文件上传)

    File Upload

    File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

     

    Low

    查看服务器核心代码;

     

    basename(path,suffix) 

    函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。

    可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。

    件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知

    创建ztt1.php文件,内容输入一句话木马;

     

    上传成功,并且返回了上传路径

    打开中国菜刀,右键添加,

    地址栏填入上传文件所在路径http://192.168.17.111/DVWA-master/hackable/uploads/ztt1.php

    参数名(一句话木马口令)为ztt

     然后菜刀就会通过向服务器发送包含gxy参数的post请求,在服务器上执行任意命令,获取webshell权限。

    可以下载、修改服务器的所有文件

     

    Medium

    可以看到,Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是jpeg或者png,大小不能超过100000B(约为97.6KB)

    方法一:文件包含+文件上传

    因为采用的是一句话木马,所以文件大小不会有问题,至于文件类型的检查,尝试修改文件名为ztt1.png

    启用中国菜刀;

    http://192.168.17.111/DVWA-master/hackable/uploads/ztt1.png

     

     

     

    不幸的是,虽然成功上传了文件,但是并不能成功获取webshell权限,在菜刀上无论进行什么操作都会返回如下信息

     

    中国菜刀的原理是向上传文件发送包含apple参数的post请求,通过控制apple参数来执行不同的命令,而这里服务器将木马文件解析成了图片文件,因此向其发送post请求时,服务器只会返回这个“图片”文件,并不会执行相应命令

    那么如何让服务器将其解析为php文件呢?我们想到文件包含漏洞。这里可以借助Medium级别的文件包含漏洞来获取webshell权限,打开中国菜刀,右键添加,在地址栏中输入

    http://192.168.17.111/DVWA-master/vulnerabilities/fi/?page=hthttp://tp://192.168.17.111/DVWA-master/hackable/uploads/ztt1.png

    参数名为ztt,脚本语言选择php

     

     

     

     

     

     

     方法二:抓包修改文件类型(上传ztt1.png文件,进行抓包)

     

     可以看到文件类型为image/png,尝试修改filenameztt1.php

    成功上传。

     

    打开菜刀,获取webshell权限

    http://192.168.17.111/DVWA-master/hackable/uploads/ztt1.php

    方法三:截断绕过规则

    php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断,所以可以把上传文件命名为ztt1.php%00.png

    可以看到,包中的文件类型为image/png,可以通过文件类型检查

     

     

     

     

     

    High

    查看服务器端核心代码;

    strrpos(string,find,start)

    函数返回字符串find在另一字符串string中最后一次出现的位置,如果没有找到字符串则返回false,可选参数start规定在何处开始搜索。

    getimagesize(string filename)

    函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。

    可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”*.jpg”、”*.jpeg” ”*.png”之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。

    我们直接上传一句话木马,然后把文件名改为 ztt1.jpg

    所以我们在文件头部加上了jpg格式的 GIF89 

    在文件头部加了jpg格式的 GIF89 标识后成功上传!

     

     

     

     

  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/199904-04/p/12318982.html
Copyright © 2011-2022 走看看