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函数,文件包含这个传入的函数

传入成功

相关推荐
三少爷的鞋4 小时前
Java 线程自上而下,Kotlin 协程自下而上
android
好的佩奇6 小时前
Dart 之增强枚举
android·flutter·dart
梦影_6 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
好的佩奇8 小时前
蓝牙之无线电与通信距离
android·flutter·蓝牙
vilya9 小时前
我把一套完整的 Python Agent 运行时塞进手机 APK:依赖闭包、Rust 轮子和三个真机坑
android
呆呆敲代码的小Y11 小时前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
思想觉悟12 小时前
SEAndroid实战
android·linux·c++
思想觉悟13 小时前
Aosp开发磨刀石之ADB速查
android·c++
应用市场15 小时前
用本机跑的开源音乐模型,给安卓小游戏做 20 秒无缝循环背景音乐
android·python·游戏开发·soundpool·音频处理
企业数字化笔记15 小时前
表单发布前怎么验收?版本引用、字段兼容和历史数据回归
android·数据挖掘·回归