第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即可

相关推荐
RFID舜识物联网6 分钟前
NFC与RFID防伪标签:构筑产品信任的科技防线
大数据·人工智能·科技·嵌入式硬件·物联网·安全
笨笨狗吞噬者8 分钟前
【uniapp】解决小程序分包下的json文件编译后生成到主包的问题
前端·uni-app
IT_陈寒21 分钟前
Redis 7个性能优化技巧,让我们的QPS从5k提升到20k+
前端·人工智能·后端
qqxhb34 分钟前
系统架构设计师备考第67天——数据库系统的安全&系统架构的脆弱性
数据库·安全·系统架构·访问控制·完整性·脆弱性·身份鉴别
.又是新的一天.44 分钟前
健身房预约系统SSM+Mybatis(五、预约展示)
前端·mybatis
九河云1 小时前
无人机测绘数字化实践:AI 驱动地形建模与数据标注革新
科技·安全·无人机·数字化转型
晴殇i1 小时前
DOM嵌套关系全解析:前端必备的4大判断方法与性能优化实战
前端·javascript·面试
安娜的信息安全说1 小时前
供应链安全:数字时代的关键防线
安全·供应链·法律
似水流年_zyh1 小时前
canvas涂抹,擦除功能组件
前端
胖虎2651 小时前
前端多文件上传核心功能实现:格式支持、批量上传与状态可视化
前端