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对象。

相关推荐
FreeBuf_3 小时前
GNU Screen 曝多漏洞:本地提权与终端劫持风险浮现
安全·web安全·gnu
Lucky小小吴4 小时前
木马查杀篇—Opcode提取
php·opcode·木马查杀
邪恶的贝利亚7 小时前
《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》
ffmpeg·php·音视频
廖圣平8 小时前
美团核销 第三方接口供应商 (含接口文档)
开发语言·数据库·php
sunsineq8 小时前
[超级简单]讲解如何用PHP实现LINE Pay API!
开发语言·php·linepay
新老农8 小时前
php数据导出pdf,然后pdf转图片,再推送钉钉群
pdf·php·钉钉
上海合宙LuatOS9 小时前
全栈工程师实战手册:LuatOS日志系统开发指南!
java·开发语言·单片机·嵌入式硬件·物联网·php·硬件工程
it技术分享just_free9 小时前
软考教材重点内容 信息安全工程师 第24章 工控安全需求分析与安全保护工程
web安全·网络安全·信息安全·系统安全·软考
mooyuan天天9 小时前
upload-labs通关笔记-第2关 文件上传之MIME绕过
web安全·文件上传·文件上传漏洞·mime·upload-labs靶场
mooyuan天天12 小时前
upload-labs通关笔记-第3关 文件上传之黑名单绕过
web安全·文件上传·文件上传漏洞·upload-labs靶场