当前位置: 首页 > news >正文

文件类漏洞总结, 文件包含, 文件上传, 文件下载

文件类漏洞总结

一, 文件包含

1. 文件包含绕过

实际环境中不是都是像$_GET['file']; incude $file 这样直接把变量传入包含函数的。
在很多时候包含的变量文件不是完全可控的,比如下面这段代码指定了前缀和后缀:

<?php
$file = S_GET['filename'];
include '/opt/lampp/htdocs/security/' . $file . '/test/test.php';
?>
  1. 目录穿越绕过指定前缀,构造 file =…/…/./etc/passwd

  2. 编码绕过前缀: ../ 的编码为: %2e%2e%2f..\ 的编码为: %2e%2e%5

  3. 二次编码绕过前缀: ../ 的二次编码为: %252e%252e%252f, 的二次编码为: %252e%252e%255C

  4. 对于远程包含,使用 ? 号绕过后缀,此时后缀将变成参数的一部分.

    前端提交: http://xxx/xxx/read.php?filename=http://xxx/xxx/mm.php
    后端包含: http://xxx/xxx/mm.php/test/test.php, 由于后端添加了后缀, 导致路径错误
    "?"绕过 : http://xxx/xxx/read.php?filename=http://xxx/xxx/mm.php?

  5. %00截断后缀,只适用于PHP5.3以前的版本

  6. 使用伪协议 phar:// 构造一个与后缀同路径的压缩包,比如此时 file = phar://test.zip

2. 文件包含防御

(1) 配置open_basedir,只允许包含某个目录下的内容
(2) 不允许文件包含让用户可控,直接写在代码中
(3) 尽量包含一个确定的文件,而不是一个变量或参数值
(4) 检测用户输入参数,确保路径可控
(5) 过滤各种./../ 或经过编码的 %2e%2E
(6) 不使用远程包含,关闭 allow_url_include (默认关闭)
(7) 如果需要使用,则限定域名或路径
(8) 使用白名单,只要不在白名单列表中的内容,则验证不通过

二, 文件上传

1. 文件上传绕过:
1. 前端绕过
2. 类型MIME绕过
3. 黑名单绕过
4. 大小写绕过
5. 双写绕过
6. 空格绕过
7. 点绕过
8. 点空格点绕过
9. 图片马
2. 文件上传防御:

(1) 前后端一起校验,校验后缀名,校验MIME类型
(2) 后缀名的校验必须全部转换成小写进行处理
(3) 使用白名单,不是白名单的一律禁止.
(4) 去除文件名后续的各种符号,如空格
(5) 针对图片文件,使用二次渲染或压缩技术处理图片,并另存
(6) 对文件名进行重命名,则先命名再移动,避免条件竞争
(7) 将上传文件所在目录的权限设置为不可执行

三, 文件下载

1. 文件下载绕过:
参考文件包含绕过.
2. 文件下载防御:

(1)过滤特殊字符"."(点),使用户在url中不能回溯上级目录
(2)正则严格判断用户输入参数的格式
(3)php.ini配置open_basedir限定文件访问范围
(4)将文件路径保存于数据库中,通过 file?id=3 的数据库序号id方式下载文件, 而不是通过具体的文件名.

http://www.lryc.cn/news/212095.html

相关文章:

  • SpringBoot篇---第四篇
  • Knife4j使用教程(一) -- 在不同版本SpringBoot,选用不同的Knife4j相关的jar包
  • Octave Convolution学习笔记 (附代码)
  • SpringSecurity 认证实战
  • echarts中横向柱状图的数字在条纹上方
  • 【仙逆】尸阴宗始祖现身,王林修得黄泉生窍诀,阿呆惊险逃生
  • C++二叉树剪枝
  • ZooKeeper中节点的操作命令(查看、创建、删除节点)
  • el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果
  • 预安装win11的电脑怎么退回正版win10?
  • MATLAB——多层小波的重构
  • 解锁高效创作艺术!AI助力文章生成与精美插图搭配完美融合
  • ✔ ★【备战实习(面经+项目+算法)】 10.29学习
  • 微服务-Ribbon负载均衡
  • UC3845BD1R2G一款专门针对离线和 DC-DC 转换器应用 高性能电流模式PWM控制器
  • vivo自研AI大模型即将问世,智能手机行业加速迈向AI时代
  • 探索JavaScript事件流:DOM中的神奇旅程
  • 听GPT 讲Rust源代码--library/std(8)
  • Hbase基本使用,读写原理,性能优化学习
  • 添加主仓库后报错error: remote upstream already exists.
  • 香港服务器如何做负载均衡?
  • 前端 :用HTML , CSS ,JS 做一个秒表
  • BIOS MBR UEFI GPT详解
  • 2023NOIP A层联测20-点餐
  • 3D LUT 滤镜 shader 源码分析
  • 五分钟理解Java跨平台原理(适合小白)
  • 从初级测试工程师到测试专家,你的晋升路线是什么?
  • 合肥中科深谷嵌入式项目实战——人工智能与机械臂(四)
  • Zynq-Linux移植学习笔记之64- 国产ZYNQ在linux下配置国产5396芯片
  • 系统架构设计师-第19章-大数据架构设计理论与实践-软考学习笔记