CTF SHOW
Web89~150plus
Web89
1 2 3 4 5 6 7 8 9 10 11 12
| include("flag.php"); highlight_file(__FILE__);
if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; } }
|
要求输入数字,却使用正则表达绕过了数字。
这是preg_match相关绕过,更准确一些这里是数组绕过
与preg_match函数的特性相关,该函数要求第二个参数是字符串形式,如果传入数组时会返回flase。
Web90
1 2 3 4 5 6 7 8 9 10 11 12 13
| include("flag.php"); highlight_file(__FILE__); if(isset($_GET['num'])){ $num = $_GET['num']; if($num==="4476"){ die("no no no!"); } if(intval($num,0)===4476){ echo $flag; }else{ echo intval($num,0); } }
|
需要输入的num的十进制值为4476,但是不能直接输入将其字符串赋值为4476
这个实际上是intval相关绕过,采取换进制的做法
Web91
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| show_source(__FILE__); include('flag.php'); $a=$_GET['cmd']; if(preg_match('/^php$/im', $a)){ if(preg_match('/^php$/i', $a)){ echo 'hacker'; } else{ echo $flag; } } else{ echo 'nonononono'; }
|
模式部分很容易看懂。 /
是分割符,^
表示开头,$
表示结尾。说明这里需要精确匹配
但这里需要理解修饰符的意思。-i
表示不区分大小写,-m
表示多行模式(^和$会匹配每行的开始和结束)
分析题目,需要cmd多行包含php,但不能精确匹配到php
使用换行符绕过:%0a
Web92
题重复了
不是后面怎么这么多重复的是我的问题吗