NSS [鹤城杯 2021]Middle magic

NSS [鹤城杯 2021]Middle magic

源码直接给了。

粗略一看,一共三个关卡

先看第一关:

php 复制代码
if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){
    $aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);
    if(preg_match('/pass_the_level_1#/', $aaa)){
        echo "here is level 2";

(1条消息) PHP正则表达式_php 正则_无痕之意的博客-CSDN博客

正则表达式含义:

/^(.*)level(.*)$/:包含字符串"level"的字符串

/pass_the_level_1#/:字符串"pass_the_level_1#"

这种正则写法是存在缺陷的:.用于任意字符匹配并不包括换行符,而且^ $界定了必须在同一行,否则匹配不到,直接利用%0a(换行符)进行绕过。

所以我们GET传入aaa=%0apass_the_level_1#就行了。不对,不是这样。

如果直接传入#的话,#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。

只有将#转码为%23,浏览器才会将其作为实义字符处理。

所以这一关的payload:

?aaa=%0apass_the_level_1%23

来到第二关:

php 复制代码
if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
            if ($_POST['admin'] == $_POST['root_pwd'])
                echo '<p>The level 2 can not pass!</p>';
        // START FORM PROCESSING    
            else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){
                echo "here is level 3,do you kown how to overcome it?";

我们需要POST两个变量,adminroot_pwd。要求两个变量不能弱相等并且两个变量的sha1值强相等。

我们可以sha1强碰撞或者数组绕过。方便一点,这里用哈希数组绕过,强碰撞payload太长了。

admin[]=1&root_pwd[]=2

来到第三关:

php 复制代码
if (isset($_POST['level_3'])) {
                    $level_3 = json_decode($_POST['level_3']);
                    if ($level_3->result == $result) {
                        echo "success:".$flag;

要求我们POST提交一个level_3变量,是json格式的。要满足level_3变量的result键的值 与$result变量相等,但是$result变量在index.php中未定义,在result.php中是否定义,未知,所以$result变量具体值是多少我们无从得知。暂且将他当成未定义,那么值就是空,NULL

这里据说用php的弱比较。以下是一些可能是原理的资料。

(1条消息) CTF(JOSN弱类型)_ctf json_sunshinelv99的博客-CSDN博客

(1条消息) JASON格式与布尔绕过弱类型比较_json数组绕过_王俊凯迷妹的博客-CSDN博客

实际测试证明,这里level_3只要POST了就行,值是多少都可以。因为空NULL和什么东西弱比较都是true,那么就验证了我们的猜想,$result变量未定义。

payload:

&level_3={"result":"chxvjxkvjckvrfghrekj"}
&level_3={"result":0} 
&level_3={"result":} 
&level_3=

扩展阅读:json数组、json对象。

相关推荐
YUJIANYUE2 小时前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
龙哥·三年风水11 小时前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统
centos0814 小时前
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]
网络安全·二进制·pwn·ctf
Dingww101115 小时前
梧桐数据库中的网络地址类型使用介绍分享
数据库·oracle·php
mingzhi6116 小时前
渗透测试-快速获取目标中存在的漏洞(小白版)
安全·web安全·面试·职场和发展
Genius Kim19 小时前
SpringCloud Sentinel 服务治理详解
spring cloud·sentinel·php
Sweet_vinegar19 小时前
变异凯撒(Crypto)
算法·安全·ctf·buuctf
安胜ANSCEN19 小时前
加固筑牢安全防线:多源威胁检测响应在企业网络安全运营中的核心作用
网络·安全·web安全·威胁检测·自动化响应
Mr_Fmnwon20 小时前
【我的 PWN 学习手札】House of Roman
pwn·ctf·heap