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

相关推荐
小白跃升坊30 分钟前
PHP2Shell:AI 两天挖出 9.2 分漏洞,让全球 70% 网站连夜打补丁!1Panel 已经把修复版本封装好,推到了你的应用商店里。
php·开源安全·1panel·ai安全·漏洞披露
m0_敲代码的彭于晏1681 小时前
Vercel 前端部署平台深度评测
前端
怕浪猫3 小时前
外包和大厂的前端代码,差在凌晨三点
前端·面试·github
m0_敲代码的彭于晏1683 小时前
Vercel 前端部署与全栈开发实战指南
前端·状态模式
Json____3 小时前
PHP 突发严重安全漏洞,AI 开始改变网络安全的攻防方式
人工智能·web安全·php·it学习·wwwoop.com
徐小夕3 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
贾伟康3 小时前
【化学实验室|17】HarmonyOS ArkTS 亮暗色与视觉令牌实战:集中颜色、间距和交互状态避免页面割裂
前端·移动开发·harmonyos·arkts·arkui
catchadmin4 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
福建佰胜张工4 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
Csvn4 小时前
SSR/SSG/ISR(上):峡谷与渲染策略的时间预算
前端