NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP

直接给了源码

image-20230623220649607

<?php
include 'utils.php';if (isset($_POST['guess'])) {$guess = (string) $_POST['guess'];if ($guess === $secret) {$message = 'Congratulations! The flag is: ' . $flag;} else {$message = 'Wrong. Try Again';}
}if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {exit("hacker :)");
}if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){exit("hacker :)");
}if (isset($_GET['show_source'])) {highlight_file(basename($_SERVER['PHP_SELF']));exit();
}else{show_source(__FILE__);
}
?> 

代码解析如下

1. `include 'utils.php';` 这行代码用于包含名为 "utils.php" 的外部文件。通过包含该文件,可以访问其中定义的变量和函数。2. `if (isset($_POST['guess'])) { ... }` 这个条件判断语句检查是否存在名为 "guess" 的 POST 参数。它用于判断用户是否提交了一个名为 "guess" 的表单字段。3. `$guess = (string) $_POST['guess'];` 这行代码将用户提交的 "guess" 表单字段的值转换为字符串,并将其赋值给变量 `$guess`。4. `if ($guess === $secret) { ... } else { ... }` 这个条件判断语句用于比较用户提交的猜测值 `$guess` 是否与变量 `$secret` 的值相等。- 如果两者相等,将会设置 `$message` 变量的值为 "Congratulations! The flag is: " 加上 `$flag` 的值,表示猜测正确。- 如果两者不相等,将会设置 `$message` 变量的值为 "Wrong. Try Again",表示猜测错误。5. `if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) { ... }` 这个条件判断语句用于检查请求的 PHP 文件名是否以 "utils.php" 结尾。如果是的话,会输出 "hacker :)" 并终止程序的执行,以防止直接访问该文件。6. `if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){ ... }` 这个条件判断语句用于检查请求的 URL 是否包含 "show_source"。如果是的话,会输出 "hacker :)" 并终止程序的执行,以防止直接访问源代码。7. `if (isset($_GET['show_source'])) { ... } else { ... }` 这个条件判断语句用于检查是否存在名为 "show_source" 的 GET 参数。如果存在,会使用 `highlight_file()` 函数显示show_source变量的源代码,并终止程序的执行。如果不存在,会使用 `show_source()` 函数显示当前 PHP 文件的源代码。这段代码的作用是:根据用户提交的猜测值判断是否正确,并根据判断结果显示不同的消息。同时,对访问的文件和请求进行一些安全检查,以防止直接访问敏感文件或源代码。如果请求不符合预期的条件,会输出 "hacker :)" 并终止程序的执行。

这个题目出现了$_SERVER[‘PHP_SELF’]

这个是你调用的脚本的路径,意思就是读取文件夹下的一个文件

如果你访问的是

如下即为执行脚本的文件:www.errorr0.com/errorr1/errorr2/        ------>     /errorr1/errorr2/index.phpwww.errorr0.com/errorr1/errorr2/index.php   -------->   /errorr1/errorr2/index.phpwww.errorr0.com/errorr1/errorr2/flag.php    --------->  /errorr1/errorr2/flag.phpwww.errorr0.com/errorr1/errorr2/index.php?key=value    -------->  index.php

而$_SEVER[‘REQUEST_URL’]

它的值这个时候和$_SERVER[‘PHP_SELF’]的值是一样的。

区别在于,如果你用get传参的时候 S E V E R [ ′ R E Q U E S T U R L ′ ] 是会加上那个参数的,而 _SEVER['REQUEST_URL']是会加上那个参数的,而 SEVER[REQUESTURL]是会加上那个参数的,而 _SERVER[‘PHP_SELF’]不会。

www.errorr0.com/errorr1/errorr2/flag.php    --------->  /errorr1/errorr2/flag.phpwww.errorr0.com/errorr1/errorr2/index.php?key=value    -------->  index.php?key=value

basename函数返回路径中的文件名字。

如果你访问的是

http://1.14.71.254:28189/index.php/utils.php

那么它的值就会是utils.php

basename函数遇到非ascii字符时会将其舍弃

思路
代码分析前四点都没有用,主要看这一段:

if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {exit("hacker :)");
}if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){exit("hacker :)");
}if (isset($_GET['show_source'])) {highlight_file(basename($_SERVER['PHP_SELF']));exit();
}else{show_source(__FILE__);
}
if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){exit("hacker :)");
}

这个正则的绕过方法就是利用特性来绕过,可以用

 [ (空格) + .

这些都可以被处理成_

if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {exit("hacker :)");
}

这个正则是匹配末尾有没有/utils.php/+任意字符

绕过办法很简单

因为后面要调用basename,所以可以利用中文来绕过,中文不属于ascii编码中的。

payload:靶机网址+/index.php/utils.php/给我弗莱格?show.source=1可以放vps上试试

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

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

相关文章

【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法 (Particle Swarm Optimization, PSO) 1. 算法概述 粒子群算法是一种基于群体智能的优化算法&#xff0c;模拟鸟群觅食的行为。算法中的每个粒子代表问题的一个可能解&#xff0c;并且具有位置和速度两个属性。粒…

Vue3:将表格数据下载为excel文件

需求 将表格数据或者其他形式的数据下载为excel文件 技术栈 Vue3、ElementPlus、 实现 1、安装相关的库 下载xlsx 和 file-saver 库 npm install -S file-saver npm install -S xlsx引入XLSX库和FileSaver库 import XLSX from xlsx; import FileSaver from file-saver;…

vue3响应式对象:ref和reactive

ref() <template><button click"changeMsg">改变信息</button><div>{{ msg }}</div><div>{{ man }}</div> </template><script lang"ts"> import { defineComponent,ref,Ref } from vueexport def…

【SEC 学习】美化 Linux 终端

一、步骤 1. 进入 /etc/bash.bashrc vim /etc/bash.bashrc2. 重新加载 bash.bashrc source /etc/bash.bashrc二、各参数指标 符号含义\u当前用户的账号名称\h仅取主机的第一个名字&#xff0c;如上例&#xff0c;则为fc4&#xff0c;.linux则被省略\H完整的主机名称。例如&…

C++STL---Vector、List所要掌握的基本知识

绪论​ 拼着一切代价&#xff0c;奔你的前程。 ——巴尔扎克&#xff1b;本章主要围绕vector和list的使用&#xff0c;以及容器底层迭代器失效问题&#xff0c;同时会有对原码的分析和模拟实现其底层类函数。​​​​话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑…

Mac电脑配置Dart编程环境

1.安装Dart SDK 官网地址&#xff1a;https://dart.dev/get-dart $brew tap dart-lang/dart$brew install dart 安装后&#xff0c;用命令检测一下是否安装正常。 $brew info dart 2.VS Code配置Dart环境 1).安装VS Code 官网地址&#xff1a;https://code.visualstudio.c…

Python环境下LaTeX数学公式转图像方案调研与探讨

目录 引言方案一&#xff1a;基于LaTeX环境方案二&#xff1a;基于KaTeX(推荐) 方案三&#xff1a;基于Matplotlib写在最后 引言 近来&#xff0c;涉及到一些公式识别的项目&#xff0c;输入是公式的图像&#xff0c;输出是LaTeX格式的数学公式字符串。 这类项目一般都采用深…

pgsql 分组查询,每组取10条

需求&#xff1a; 按照表的字段分组&#xff0c;然后每组取10条结果&#xff0c;返回即可 sql 如下&#xff1a; SELECT* FROM (SELECT chk_id,feature_id,task_id, ROW_NUMBER () OVER (PARTITION BY chk_id ORDER BY chk_id) AS row_num FROM ics_check_report WHERE task…

Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45

导读Canonical 近日正式发布了 Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;操作系统&#xff0c;其中包含一些最新的 GNU/Linux 技术、改进的硬件支持以及许多其他变化。 Ubuntu 23.10 采用了最新的 Linux 6.5 内核系列&#xff0c;并为 Ubuntu 桌面和服务器增强了 z…

Qt5 Python-docx库的使用,Qt python混合编程,qt 读写word,不依赖office

解决方案的选择 参考&#xff1a; https://www.jianshu.com/p/be68884849c3 因为项目要求不能使用模板方案&#xff0c;不能依赖Office&#xff0c;网上找了一些解决方案进行调研&#xff0c;以下几个方案&#xff1a; OpenOffice: 兼容性差&#xff0c;集成调用难度大LibOffi…

【顺序栈的出栈,链栈的表示和实现,递归定义】

文章目录 顺序栈的出栈 链栈的表示和实现链表的初始化判断链栈是否为空链栈的入栈链栈的出栈 递归定义函数的调用过程 顺序栈的出栈 &#xff08;1&#xff09;判断是否栈空&#xff0c;若空则出错&#xff08;下溢&#xff09;。 &#xff08;2&#xff09;获取栈顶元素e。 &…

【AD9361 数字接口CMOS LVDSSPI】B 并行数据之CMOS 续

续【AD9361 数字接口CMOS &LVDS&SPI】B 并行数据之CMOS 数据总线空闲和周转周期 &#xff08;CMOS&#xff09; P0_D[11&#xff1a;0]和P1_D[11&#xff1a;0]总线信号通常由BBP或AD9361有源驱动。在任何空闲期间&#xff0c;两个组件都会忽略数据总线值。但是&…

MODBUS-RTU从站通信(SMART PLC作为MODBUS-RTU从站)

SMART PLC作为MODBUS-RTU主站通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客文章浏览阅读2.5k次,点赞5次,收藏10次。MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看…

基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(一)上位机设计

采集仪上位机设计 本章开发了一款基于 C# 的上位机软件&#xff0c;用于对多类型同步信号采集仪的各项功能 进行操作。从采集仪的数据传输需求出发&#xff0c;上位机利用以太网 UDP 协议实现与采集仪 的数据交互&#xff0c;包括向采集仪发送控制信息与配置信息、接收采…

Vite+Vue3项目全局引入scss文件

前言 Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言&#xff01;在日常项目开发过程中使用非常广泛&#xff0c;今天主要讲一下 ViteVue3 项目中该如何全局引入 scss 文件&#xff0c;引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比…

【linux】安装rpmrebuild

rpmrebuild是一种从已经安装的包中构建RPM文件的工具。它可以用于轻松构建修改后的包&#xff0c;并适用于任何使用RPM的Linux发行版。 访问地址 rpm rebuild download | SourceForge.net 选择版本 版本地址&#xff1a;版本地址 下载安装包 安装 rpm -ivh rpmrebuild-2.15…

人工智能轨道交通行业周刊-第64期(2023.10.16-10.29)

本期关键词&#xff1a;北斗应用、供电智能运维、5G-R、铁路职称、星火大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界铁路那…

【计算机网络】认识协议

目录 一、应用层二、协议三、序列化和反序列化 一、应用层 之前的socket编程&#xff0c;都是在通过系统调用层面&#xff0c;如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应…

如何快速解决d3dcompiler_43.dll缺失问题?五种方法快速解决

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“D3DCompiler_43.dll缺失”。这个错误通常会导致游戏、应用程序或系统无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些修复方案来恢复缺失的文件。本文将介绍五个修复D3DCompi…

百度超级链XuperChain使用JavaSDK接入

环境 &#xff1a; ubuntu20 xuperchain 5.3 go 1.17 springboot : 2.5.14 前言 请提前启动好xchain的节点&#xff0c;我选择简单启一个xchain节点作为测试&#xff0c;并且使用默认端口37101 SpringBoot项目初始化 我们先进行SpringBoot项目的配置进行讲解&#xff0c;这里…