admin 发表于 3 小时前

三、文件上传漏洞:从图片到服务器的跨越

三、文件上传漏洞:从图片到服务器的跨越3.1 什么是文件上传漏洞?文件上传功能是Web应用的核心交互模块,但若未实施严格的安全控制,可能成为攻击者植入恶意代码的入口。文件上传漏洞允许攻击者上传恶意文件(如WebShell)到服务器,从而获取服务器控制权。3.2 文件上传漏洞的危害此类漏洞的危害性体现在两方面:
[*]直接系统控制:上传恶意脚本(如PHP、JSP)可获取服务器Web目录执行权限,导致数据泄露或服务中断
[*]横向渗透风险:若上传文件包含Webshell,攻击者可进一步探测内网服务,扩大攻击面
根据2024年OWASP Top 10报告,文件上传漏洞连续三年位列Web应用安全风险前十。3.3 文件上传漏洞的攻击过程3.3.1 漏洞复现示例攻击者通过以下步骤利用漏洞:
[*]构造恶意文件:生成包含PHP代码的shell.php.jpg文件,内容为<?php system($_GET['cmd']); ?>
[*]篡改Content-Type:在Burp Suite中将请求头的Content-Type从image/jpeg改为application/x-php
[*]双重扩展名绕过:利用服务器解析规则漏洞,上传shell.php.jpg后,通过访问/uploads/shell.php.jpg?cmd=id触发代码执行
关键请求包:text



POST /upload.php HTTP/1.1Host: upload-labs.localContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123------WebKitFormBoundaryABC123Content-Disposition: form-data; name="file"; filename="shell.php.jpg"Content-Type: application/x-php<?php system($_GET['cmd']); ?>------WebKitFormBoundaryABC123--
3.3.2 漏洞根源剖析漏洞代码示例:php



$upload_dir = "uploads/";$file_name = $_FILES['file'['name';$tmp_name = $_FILES['file'['tmp_name';// 未校验文件类型if (move_uploaded_file($tmp_name, $upload_dir . $file_name)) {    echo "上传成功";}
核心问题:
[*]依赖客户端$_FILES['file']['name']作为文件名,未进行白名单校验
[*]未设置uploads目录的execute权限禁用
[*]未对文件内容做哈希校验,无法检测嵌入的恶意代码
3.4 文件上传漏洞的防御策略3.4.1 多层防御体系前端校验:限制文件选择类型(仅作为辅助,不可依赖)后端校验:
[*]校验真实MIME类型(使用finfo_file()或getimagesize())
[*]生成随机文件名并存储在数据库
[*]设置上传目录为noexec
安全代码示例:php



$allowed_types = ['image/jpeg', 'image/png';$finfo = finfo_open(FILEINFO_MIME_TYPE);$mime = finfo_file($finfo, $_FILES['file'['tmp_name');finfo_close($finfo);if (in_array($mime, $allowed_types)) {    $ext = pathinfo($_FILES['file'['name', PATHINFO_EXTENSION);    $safe_ext = ['jpg', 'png';    if (in_array($ext, $safe_ext)) {      $new_name = uniqid() . '.' . $ext;      move_uploaded_file($_FILES['file'['tmp_name', "uploads/" . $new_name);    }}
3.4.2 服务器配置加固在Nginx中禁用危险扩展名执行:text



location ~* \.(php|jsp|asp)$ {    deny all;}
为上传目录设置独立用户并限制权限:bash



chown -R www-data:www-data uploads/chmod -R 750 uploads/
3.4.3 WAF防护部署ModSecurity等WAF规则拦截可疑上传请求3.5 小结文件上传漏洞的防御需遵循"默认拒绝"原则,仅允许明确安全的文件类型与操作。通过多层校验、服务器加固和持续监控,可将风险降至最低。
页: [1]
查看完整版本: 三、文件上传漏洞:从图片到服务器的跨越