Web开发-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() 函数用于检查指定的路径是否是一个目录

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

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

复制代码
<?php
$path='E:\\004Web\\php\\32';
//安全问题,我们可以进行任意文件目录遍历

$filehandle=opendir($path);
while (($file = readdir($filehandle))!==false){
    echo $file."<br>";
}

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

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

复制代码
<?php
//文件显示函数返回指定目录中的文件和目录列表,以数组形式返回
$path='E:\\004Web\\php\\32';
$file_dist=scandir($path);
foreach($file_dist as $file){
    echo $file."<br>";
}

//安全问题,我们可以进行任意文件读取

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

文件删除:

unlink() 文件删除函数

//安全问题,我们可以进行任意文件删除

unlink('1.txt');

这里就删除成功了

调用命令删除:system shell_exec exec等

system('del 1.txt');

这里也可以调用系统命令进行删除

文件下载:

修改HTTP头实现文件读取解析下载:、

$file='1.php';

header("Content-Type: application/octet-stream");//这里就是固定Content-Type为这个格式

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

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

readfile($file);

这里就成功下载了

这里直接访问1.php的数据包里面就是这个CT头

文件读取:

1、file_get_contents() 读取文件内容

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

这里就读取到了

复制代码
$file = fopen('1.php','r');
$data=fread($file,filesize('1.php'));
echo $data;
fclose($file);
//安全问题,我们可以进行任意文件读取

这里使用file_get_contents()也是可以的

复制代码
echo file_get_contents('1.php');

文件包含:

include、require、include_once、require_once等

复制代码
#文件包含
//include('1.txt');

include函数,就是我们创建一个1.txt文件,内容是php,但是我们网页职业访问就没办法执行php命令,然后我们用include()函数将1.txt内容包含进来然后执行

执行成功,包含即执行,任何后缀都可以

代码审计案例

1、Rrzcms遍历读取

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

这里先进行黑盒测试

这里安装一套源码然后看一下漏洞

伪静态mvc格式,这里就是admin模块,login加载器,index.html操作

这里登录后台只能看到当前目录下的文件,我们打开源码看一下

这就能找到这个文件目录了,然后我们能尝试访问其他目录的

复制代码
http://127.0.0.1/index.php/admin/Template/fileList.html?path=..\\

白盒审计:

这里我们看到了他的修改请求也是mvc格式的,那我们就按照思路去修改他的url

这里是admin,Template加载器,然后是addFile

这就是按照他的路径找到的文件找到的操作,就是这个操作,看一下

这里是需要template的,检测值有没有这个东西,没有的话就是显示错误

http://127.0.0.1/index.php/admin/Template/fileList.html?path=..\\

这里就读取到了哦我们的index.php文件穿越了目录进行修改

这里再加一个../又穿越了一个目录

复制代码
http://127.0.0.1/index.php/admin/Template/addFile.html%20?path=template%2F../../index.php

2、Metinfo文件下载

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

复制代码
http://127.0.0.1/include/thumb.php?dir=htpp\..\..\config\config_db.php

源码过滤了htpp和./就试用\即可

3、Xhcms文件包含

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

因此我们?r=1,这样然后传入的1作为$action传入,inculde包含的文件就是1.php

这里我们创建一个1.php里面是phpinfo(),然后我们这个源码里用r接收传参值,然后定义$action函数,文件包含这个传入的函数

传入成功

相关推荐
用户693717500138416 小时前
OS级AI Agent:手机操作系统的下一个战场
android·前端·人工智能
私人珍藏库16 小时前
[Android] 亿连车机版V7.0.1
android·app·软件·车机
用户693717500138417 小时前
315曝光AI搜索问题:GEO技术靠内容投喂操控答案,新型营销操作全揭秘
android·前端·人工智能
进击的cc17 小时前
彻底搞懂 Binder:不止是 IPC,更是 Android 的灵魂
android·面试
段娇娇17 小时前
Android jetpack LiveData (三) 粘性数据(数据倒灌)问题分析及解决方案
android·android jetpack
用户20187928316717 小时前
TabLayout被ViewPager2遮盖部分导致Tab难选中
android
法欧特斯卡雷特17 小时前
Kotlin 2.3.20 现已发布,来看看!
android·前端·后端
闻哥17 小时前
深入理解 MySQL InnoDB Buffer Pool 的 LRU 冷热数据机制
android·java·jvm·spring boot·mysql·adb·面试
ii_best18 小时前
安卓/ios开发辅助软件按键精灵小精灵实现简单的UI多配置管理
android·ui·ios·自动化
码农xo18 小时前
android 设备实时传输相机采集的视频到电脑pc端 通过内网wifi 方案
android·数码相机·音视频