详解php://filter--理论
什么是php://filter?
是PHP伪协议的一种,常用于文件包含漏洞。
php://
用于访问输入/输出流。
filter
意为过滤器,用于在访问数据流之前对数据进行过滤。
而php://filter
的功能就是访问数据流,并对其进行过滤操作。
使用方法
这是php://filter
的基本形式:
php://filter/resource=flag.php //文件形式的数据流
php://filter/resource=https://blog.csdn.net //URL形式的数据流
这种形式中,只包含了一个参数resource
(该参数是必须的)
参数的值 是我们要访问的 文件形式的数据流 或 URL形式的数据流。
用于过滤的参数 read
(该参数是可选的):
php://filter/read=convert.base64-encode/resource=flag.php
php://filter/convert.base64-encode/resource=flag.php //read也可以省略不写
该参数的值作用是:将读取的文件的内容以base64加密的形式输出。
read参数的值就是我们要使用到的过滤器。
常用过滤器
convert.base64-encode:
php://filter/convert.base64-encode/resource=<目标文件名> //base64编码读取文件内容
string.rot13:
php://filter/read=string.rot13/resource=<目标文件名> //rot13编码后读取文件内容
convert.iconv.<input-encoding>.<output-encoding> :
php://filter/convert.iconv.utf-8.utf-7/resource=<目标文件名> //将utf8编码转换utf7编码
php://filter/convert.iconv.utf8.utf16/resource=<目标文件名> //将utf8编码转换utf16编码
<input-encoding>
和<output-encoding>
可以选取的编码形式有:
UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
ISO-2022-JP
ISO-2022-JP-MS
CP932
CP51932
SJIS-mac (alias: MacJapanese)
SJIS-Mobile#DOCOMO (alias: SJIS-DOCOMO)
SJIS-Mobile#KDDI (alias: SJIS-KDDI)
SJIS-Mobile#SOFTBANK (alias: SJIS-SOFTBANK)
UTF-8-Mobile#DOCOMO (alias: UTF-8-DOCOMO)
UTF-8-Mobile#KDDI-A
UTF-8-Mobile#KDDI-B (alias: UTF-8-KDDI)
UTF-8-Mobile#SOFTBANK (alias: UTF-8-SOFTBANK)
ISO-2022-JP-MOBILE#KDDI (alias: ISO-2022-JP-KDDI)
JIS
JIS-ms
CP50220
CP50220raw
CP50221
CP50222
ISO-8859-1*
ISO-8859-2*
ISO-8859-3*
ISO-8859-4*
ISO-8859-5*
ISO-8859-6*
ISO-8859-7*
ISO-8859-8*
ISO-8859-9*
ISO-8859-10*
ISO-8859-13*
ISO-8859-14*
ISO-8859-15*
ISO-8859-16*
byte2be
byte2le
byte4be
byte4le
BASE64
HTML-ENTITIES (alias: HTML)
7bit
8bit
EUC-CN*
CP936
GB18030
HZ
EUC-TW*
CP950
BIG-5*
EUC-KR*
UHC (alias: CP949)
ISO-2022-KR
Windows-1251 (alias: CP1251)
Windows-1252 (alias: CP1252)
CP866 (alias: IBM866)
KOI8-R*
KOI8-U*
ArmSCII-8 (alias: ArmSCII8)