[SWPUCTF 2022 新生赛]numgame

[SWPUCTF 2022 新生赛]numgame

image-20240305193737161

进来直接问我10+10等于几

加到20发现变成负数了,根本不行,直接view-source

image-20240305193927921

查看两个js文件,第二个直接出来了

image-20240305194015593

一眼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,访问看看

image-20240305194233675

提示我们类是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

image-20240305194844988

访问后页面是空白的,因为它用的是include,要查看源代码才能看到

image-20240305194945999

posted @ 2024-03-05 19:52  redfish999  阅读(60)  评论(0编辑  收藏  举报