java中的接口是类吗
594
2022-10-01
CTF中basename()绕过小结(ctf base)
基本用法
概念:basename()函数返回路径中的文件名部分。语法:basename(path,suffix)主要参数:Path
描述:必需,规定要检查的路径。例子:
输出:
home.php、home
basename绕过最早出自于basename broken with non-ASCII-chars报告,大致意思是:
With the default locale setting "C", basename() drops non-ASCII-chars at the beginning of a filename.
在使用默认语言环境设置时,basename()会删除文件名开头的非ASCII字符。测试代码:
返回结果:
= 'index.php';for($i=0; $i<255; $i++){ $filename = $filename.'/'.chr($i); if(basename($filename) === "index.php"){ echo $i.'
'; } $filename = 'index.php';}
返回结果:ASCII值为47、128-255的字符均可以绕过basename()
其中47对应的符号为'/',在实际场景中没有利用价值那么也就是说我们可以利用一部分不可见字符来绕过basename()
同时,在测试中也可以发现中文字符也是可以绕过basename()
例如汉字、?、《、》、;等中文字符
例题:
[Zer0pts2020]Can you guess it?
If your guess is correct, I'll give you the flag.
= $message ?>
重点关注:
if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) { exit("I don't know what you are thinking, but I won't let you read it :)");}if (isset($_GET['source'])) { highlight_file(basename($_SERVER['PHP_SELF'])); exit();}
preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])
这个正则匹配了config.php/为$_SERVER['PHP_SELF']的结尾,我们可以在config.php/后面加上不可见字符污染来绕过正则匹配题目的考点在于highlight_file(basename($_SERVER['PHP_SELF']));这里存在一个任意文件读取的漏洞,但是前提是需要source值存在,这里的技巧在于:当我们传入index.php/config.php时,仍然请求的是index.php,但是当basename()处理后,highlight_file()得到的参数就变成了config.php,从而我们就实现了任意文件包含。
结合上面的特性,我们可以构造出payload:
/index.php/config.php/啊?source
在鹤城杯2021EasyP题目中也是同样的方法,只不过传递的参数变成了show_source,用.或者[就可以将参数传过去,老Trick就不过多赘述了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
评论列表