【渗透测试】任意文件上传下载漏洞原理、复现方式、防范措施

文章目录

任意文件上传下载漏洞原理、复现方式、防范措施

一、任意文件下载

原理

任意文件下载漏洞(Unrestricted File Download)是由于服务端未对用户请求的文件路径进行严格校验,导致攻击者可通过构造恶意路径(如目录穿越)下载系统敏感文件。常见于文件下载接口(如download.php?file=)未限制访问范围。

一句话 :服务端未对文件下载路径进行合法性校验,攻击者通过路径遍历(如../../)或直接指定路径,下载服务器敏感文件。

示例

pikachu 网站,任意文件下载。

通过 ?filename=../../../index.php,下载了首页的php文件。

产生原因

1.传递过来的文件名称没有做任何的过滤

2.没有限定只能在某个目录下下载文件

​ 比如写一个绝对路径,只能在这个绝对路径下下载文件等

复现方式

1、判断是否有下载漏洞

  1. 判断链接
    • download.php?path=
    • down.php?file=
  2. 判断包含参数
    • &src=
    • &path=
    • &filepath=

2、尝试下载文件

  1. 路径穿越攻击

    • 示例 :通过filename=../../../../etc/passwd下载Linux用户信息文件。
    • 实战 :攻击者利用../跳转至根目录,获取/etc/shadow(密码哈希文件)或/root/.ssh/id_rsa(SSH私钥)。
  2. URL编码绕过

    • 示例 :将../编码为%2e%2e%2f%252e%252e%252f(二次编码),绕过简单过滤规则。
    • 实战 :构造file=..%252f..%252fetc%252fpasswd绕过WAF检测。
  3. 利用系统特性

    • 示例 :下载/var/lib/mlocate/mlocate.db文件(Linux全文件路径数据库),使用locate命令快速定位敏感文件路径。
    • 实战 :通过locate mlocate.db .ssh查找SSH密钥文件。

防范措施

  1. 路径过滤与白名单

    • 过滤.././等特殊字符,仅允许访问指定目录(如/downloads/)。

    • 代码示例

      php 复制代码
      $file = str_replace(array('../', './'), '', $_GET['file']);
  2. 配置访问限制

    • 在PHP中启用open_basedir,限制文件访问范围(如open_basedir = /var/www/html/)。
  3. 日志监控与权限控制

    • 记录文件下载请求日志,监控异常访问(如频繁请求/etc/passwd)。
    • 设置敏感文件权限为600(仅所有者读写)。

二、任意文件上传

原理

任意文件上传漏洞(Unrestricted File Upload)源于服务端未对上传文件的类型、内容、路径进行有效校验,导致攻击者可上传恶意脚本(如Webshell),进而控制服务器。常见于未校验文件扩展名、MIME类型或依赖客户端检测的场景。

一句话:服务端未对上传文件类型、内容或存储路径进行严格校验,攻击者上传Webshell等恶意文件,通过访问该文件执行任意代码。

复现方式

1、寻找上传接口

只要看到有文件上传的地方都可以进行测试

2、前端js校验情况

绕过客户端检测

  • 示例 :删除前端JavaScript校验函数,直接上传.php文件。
  • 实战 :使用Burp拦截上传请求,修改文件名为shell.php

3、服务端校验情况

检查内容情况
MIME类型欺骗
  • 示例 :上传PHP木马时,将Content-Type改为image/png绕过服务端校验。
  • 实战 :构造请求头Content-Type: image/png上传恶意文件。
getimagesize()
  1. 直接伪造头部GIF89A
  2. copy /b test.png+muma.txt muma.png
  3. 使用工具增加备注写入一句话木马

利用前提:上传图片马不能直接利用,还需要配合文件包含漏洞利用。

检查后缀情况

解析漏洞利用

  • 示例 :利用Apache解析特性(如test.php.abc被解析为PHP文件)。
  • 实战 :上传.htaccess文件配置AddType application/x-httpd-php .jpg,使所有.jpg文件以PHP执行。

防范措施

  1. 检查后缀:白名单校验与文件重命名

    • 仅允许上传指定扩展名(如.jpg, .png),使用随机字符串重命名文件(如20250502_abc123.jpg)。
  2. 检查内容:内容检测与二次渲染

    • 使用getimagesize()验证图片真实性,对上传图片进行二次渲染(破坏嵌入的恶意代码)。
  3. 禁用危险解析配置

    • 在Apache/Nginx中关闭.htaccess覆盖权限,避免解析漏洞(如配置php_admin_value engine Off)。

三、综合防御策略

技术层面

  1. 输入过滤与输出编码

    • 使用正则表达式严格校验文件名(如/^[a-z0-9_\-]+\.(jpg|png)$/i)。
  2. 最小权限原则

    • 上传目录设置为不可执行(如chmod 755 uploads/),Web服务器以低权限用户运行。
  3. 安全框架与组件更新

    • 采用成熟框架(如Spring FileUpload)处理上传逻辑,及时修复解析漏洞(如Tomcat、Nginx补丁)。

管理层面

  1. 渗透测试与代码审计

    • 定期扫描文件上传/下载接口,使用工具(如Burp Suite)模拟攻击路径。
  2. 安全意识培训

    • 开发人员需掌握安全编码规范(如OWASP Top 10),避免直接拼接用户输入。

总结

任意文件上传/下载漏洞的核心在于信任用户输入缺乏纵深防御。通过白名单校验、内容检测、权限隔离等技术手段,结合持续的安全测试与团队培训,可有效降低风险。攻防对抗中需关注新兴绕过技术(如AI生成恶意文件),动态调整防御策略。

相关推荐
这儿有一堆花1 小时前
安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
linux·服务器·安全
上海云盾第一敬业销售4 小时前
高防IP可以防护什么攻击类型?企业网络安全的第一道防线
网络·tcp/ip·web安全
饮长安千年月4 小时前
JavaSec-SpringBoot框架
java·spring boot·后端·计算机网络·安全·web安全·网络安全
大咖分享课5 小时前
容器安全最佳实践:云原生环境下的零信任架构实施
安全·云原生·架构
淡水猫.6 小时前
ApacheSuperset CVE-2023-27524
安全·web安全
恰薯条的屑海鸥6 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
网络·学习·安全·web安全·渗透测试·csrf·网络安全学习
Bruce_Liuxiaowei6 小时前
Web安全深度解析:源码泄漏与未授权访问漏洞全指南
安全·web安全
代码搬运媛7 小时前
React 中 HTML 插入的全场景实践与安全指南
安全·react.js·html
珹洺9 小时前
数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
java·数据库·sql·安全·oracle
网安INF9 小时前
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
java·web安全·网络安全·kafka·漏洞·jndi注入