第32天:Web开发-PHP应用&文件操作安全&上传下载&任意读取删除&目录遍历&文件包含

#知识点
1、安全开发-原生PHP-文件安全操作

2、安全开发-原生PHP-上传读取删除包含等

3、安全开发-原生PHP-代码审计文件安全

本质->任意文件读取/删除/修改/上传/下载等漏洞存在的原因->本质上是存在"可控变量"来传递参数->如果过滤不严->这些可控变量原则上可通过../等方式绕过->从而导致可控变量可以是任意目录位置的文件->造成漏洞
一、文件上传->任意文件上传漏洞

$_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。

通过以下调用,可使用上传文件信息的数组中的信息,做数据传输

$_FILES["表单值"]["name"] 获取上传文件原始名称

$_FILES["表单值"]["type"] 获取上传文件MIME类型

$_FILES["表单值"]["size"] 获取上传文件字节单位大小

$_FILES["表单值"]["tmp_name"] 获取上传的临时副本文件名

$_FILES["表单值"]["error"] 获取上传时发生的错误代码

move_uploaded_file() 将上传的文件移动到指定位置的函数

二、文件显示(可显示目录结构)->目录遍历漏洞

1.打开目录读取文件列表

2.递归循环读取文件列表

3.判断是文件还是文件夹

4.PHP.INI目录访问控制

is_dir() 函数用于检查指定的路径是否是一个目录

案例1:opendir()+readdir()

opendir() 函数用于打开指定的目录,返回句柄,用来读取目录的文件和子目录

readdir() 函数用于从打开的目录句柄中,读取目录中的文件和子目录

open_basedir:PHP.INI中的设置用来控制脚本程序访问目录

案例2:scandir()

①scandir() 函数返回指定目录中的文件和目录列表,以数组形式返回

ini_set('open_basedir',DIR); 设置配置文件中,只能访问本目录

②目录遍历漏洞触发点->下图$path这个变量,如果该变量可以控制,则可以遍历任意目录

三、文件删除->任意文件删除漏洞

1、unlink() 文件删除函数

2、调用系统命令删除:system、shell_exec、exec等

如果文件名可控,则易出现任意文件删除漏洞

四、文件下载->任意文件下载漏洞

修改相应包的HTTP头实现文件读取解析为下载协议->从而实现文件下载

header("Content-Type: application/octet-stream");

header("Content-Disposition: attachment; filename=\"" . $file . "\"");

header("Content-Length: " . filesize($file));

readfile($file);

如果文件名可控,则易出现任意文件下载漏洞

五、文件读取->任意文件读取漏洞

1、file_get_contents() 读取文件内容

2、fopen() +fread() 文件打开读入

如果文件名可控,则易出现任意文件读取漏洞

六、文件包含

可利用文件包含执行恶意脚本,前提恶意脚本可以通过1.txt等格式上传成功

include()、require、include_once、require_once等

七、文件管理器案例->直观演示漏洞

包含文件上传、修改、读取、删除等功能

八、代码审计案例

1、Rrzcms遍历读取

https://xz.aliyun.com/t/10932

验证审计出的漏洞点

上图使用../../index.php->为什么知道这个index.php?->这个是我们看代码中有的,所以拿这个文件来验证漏洞->实战中可以用字典来枚举一些常见的文件名来验证漏洞

2、Metinfo文件下载

https://mp.weixin.qq.com/s/te4RG0yl_truE5oZzna3Eg

找到文件下载涉及关键函数->readfile()

漏洞验证:

3、Xhcms文件包含

https://xz.aliyun.com/t/11310

漏洞验证:

为什么此处拼接?r=../1->在文件中include()定位到files/目录下,而1.php在根目录下,所以需要用../向上跳一级;另外include()中是$action.php,所以不需要传参1.php,传参r=../1即可

相关推荐
崔庆才丨静觅2 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
Hello.Reader3 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅3 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅3 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
智驱力人工智能3 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
数据与后端架构提升之路4 小时前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全