当前位置: 首页 > news >正文

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上试试

相关文章:

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?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\.p…...

mysql用户及权限管理(InsCode AI 创作助手)

MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;用于存储和管理大量数据。对于那些需要使用MySQL的管理员和开发人员来说&#xff0c;用户权限管理是确保数据库安全性的至关重要的一环。在本篇技术博客中&#xff0c;我们将深入探讨MySQL的用户权限管理&#xff0c…...

命令模式——让程序舒畅执行

● 命令模式介绍 命令模式&#xff08;Command Pattern&#xff09;&#xff0c;是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多条条框框&#xff0c;其实并不是一个很“规矩”的模式&#xff0c;不过&#xff0c;就是基于一点&#xff0c;命令模式相对于…...

GZ035 5G组网与运维赛题第3套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第3套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…...

071:mapboxGL上传含shp的zip文件,在map上解析显示图形

第071个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中上传含有shp文件的zip,在地图上显示图形。这里先通过上传解压解析,转换生成geojson文件,然后在地图上渲染图形。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果所用的zip文…...

python下拉框选择测试

把下拉选择的值得打印出来&#xff1a; import tkinter as tk def on_select(event): # 当选择下拉框中的一项时&#xff0c;此函数将被调用 selected event.widget.cget("text") # 获取选中的文本 print(f"You selected: {selected}") # 打印选中…...

即时编译器JIT

类编译加载执行过程 如下图所示&#xff0c;一个Java代码从编译到运行大抵会经历以下几个过程。具体每个过程笔者会在下文站展开讨论。 类编译 首先是类编译阶段&#xff0c;这个阶段会将Java文件变为class文件&#xff0c;这个class文件包含一个常量池和方法表集合&#xf…...

npm更新包时This operation requires a one-time password.

[访问我的npm包](mhfwork/yt-ui - npm) 更新npm包时出现 This operation requires a one-time password.是因为需要认证 解决办法 1. 点击红线处的链接 2. 进入npm官网获取指定秘钥 3. 再次填入 one-time password 即可...

C++类模板再学习

之前已经学习了C类模板&#xff1b;类模板的写法和一般类的写法有很大的差别&#xff1b;不容易熟悉&#xff1b;下面再做一遍&#xff1b; 做一个椭圆类&#xff0c;成员有长轴长度和短轴长度&#xff1b; // ellipse.h: interface for the ellipse class. // //#if !define…...

华为终端智能家居应用方案

PLC-IoT概述 华为智能PLC-IoT工业物联网系列通信模块是基于电力线宽带载波技术的产品&#xff0c;实现数据在电力线上双向、高速、稳定的传输&#xff0c;广泛适用于电力、交通、工业制造、智能家居等领域&#xff0c;PLC-IoT通信模块包含头端和尾端两种类型&#xff0c;头端配…...

PHP下载文件

/***文件下载*param $filepath源文件路径 */function dwon_file($filepath){if(file_exists($filepath)){header(content-type:text/html;charsetutf8);header(Content-Description: File Transfer);header(Content-Type: application/octet-stream);header(Content-Dispositio…...

38基于matlab的期货预测,利用PSO优化SVM和未优化的SVM进行对比,得到实际输出和期望输出结果。

基于matlab的期货预测&#xff0c;利用PSO优化SVM和未优化的SVM进行对比&#xff0c;得到实际输出和期望输出结果。线性核函数、多项式、RBF核函数三种核函数任意可选&#xff0c;并给出均方根误差&#xff0c;相对误差等结果&#xff0c;程序已调通&#xff0c;可直接运行。 3…...

【Codeforces】 CF582D Number of Binominal Coefficients

题目链接 CF方向 Luogu方向 题目解法 看到 p α ∣ ( n k ) p^{\alpha} | \binom{n}{k} pα∣(kn​) &#xff0c;首先想到 k u m m e r kummer kummer 定理&#xff0c;那么限制即为 n − k n-k n−k 和 k k k 做加法在 p p p 进制下的进位数 ≥ α \ge \alpha ≥α …...

sql第二次上机作业

1查找借阅了ISBN为“4-6045-1023-4”的借书证号&#xff0c;读者姓名&#xff0c;专业名和借书时间 use tsgl go select Reader.Lno,Rname,Spec,Lend.Bordate FROM Reader,Lend WHERE Reader.LnoLend.Lno AND ISBN 4-6045-1023-42查找借阅了《数据库原理》一书的借阅信息&…...

辅助驾驶功能开发-功能规范篇(22)-3-L2级辅助驾驶方案功能规范

1.3.3 TLA系统功能定义 1.3.3.1 状态机 1.3.3.2 状态迁移图 1.3.3.3 功能定义 1.3.3.3.1 信号需求列表 1.3.3.3.2 系统开启关闭 1)初始化 车辆上电后,交通灯辅助系统(TLA)进行初始化,控制器需在 220ms 内发出第一帧报文,并在 3s 内完成内部自检,同时上电 3s 内不进行…...

Python基础入门例程16-NP16 发送offer(列表)

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 解答 &#xff1a; 说明&#xff1a; 描述 某公司在面试结束后&#xff0c;创建了一个依次包含字符串 Allen 和 Tom 的列表offer_list&#xff0c;作为通过面试的名单。 请你依次对列表中的名字发送类似 Allen, you…...

Web前端面试之Vue—对Vue的理解

目录 一、web发展历程 二、vue是什么 三、Vue核心特性 组件化 数据驱动 指令 四、Vue与Angular以及React的区别 一、web发展历程 Web是World Wide Web的简称&#xff0c;中文译为万维网 我们可以将它规划成如下的几个时代来进行理解 静态网页&#xff1a;最早的网页是没…...

C/C++晶晶赴约会 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C晶晶赴约会 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C晶晶赴约会 2020年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 晶晶的朋友贝贝约晶晶下周一起去看展览&#xff0…...

js 解决 H 指数

给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09;至少发…...

在JS中,var 、let 、const 总结

let是英文单词"let"的缩写。在JavaScript中&#xff0c;let 关键字用来声明一个块级作用域 的变量&#xff0c;这意味着变量仅在声明它的代码块内有效&#xff0c;超出该代码块作用域时就无法访问该变量。与var不同的是&#xff0c;let不会被提升到函数作用域或全局作…...

Win11桌面图标突然锁死?别慌,用这招绕过组策略编辑器直接搞定

Win11桌面图标突然锁死&#xff1f;三招绕过组策略编辑器直接解锁 刚泡好的咖啡还没喝一口&#xff0c;突然发现桌面图标全被"钉"在原地动弹不得——这种突如其来的系统抽风&#xff0c;恐怕是Windows用户最抓狂的体验之一。更糟的是&#xff0c;当你按照常规教程输入…...

ArcGIS Pro 3.7 重磅升级!这四大模块更新,让GIS效率翻倍

ArcGIS Pro 3.7 正式发布&#xff0c;这次不仅性能大幅提升&#xff0c;还带来了 GeoAI 工具集、实时等高线、本地知识图谱等一系列“黑科技”。无论你是制图师、空间分析师还是开发者。 01 性能与生产力&#xff1a;更快、更顺、更好找 新增「分析地图」窗格 可量化评估地图的…...

Linux-安装cmatrix

linux-安装cmatrix &#xff08;黑客帝国矩阵效果&#xff09; su root #切换身份到root不受权限控制 cd /usr/src #进入源码下载位置&#xff0c;准备下载安装包利用xftp 共享传送文件进入home找到文件&#xff0c;cp 文件 /usr/src解压&#xff0c;进…...

Python异步编程深度解析:从asyncio到实战应用

Python异步编程深度解析&#xff1a;从asyncio到实战应用 引言 异步编程是现代Python后端开发中不可或缺的技能。作为从Python转向Rust的后端开发者&#xff0c;我发现Python的异步生态非常成熟&#xff0c;尤其是asyncio库提供了强大的异步编程能力。本文将深入探讨Python异步…...

JWT令牌安全实践详解

JWT令牌安全实践详解 一、JWT概述 JSON Web Token&#xff08;JWT&#xff09;是一种用于安全传输信息的开放标准&#xff08;RFC 7519&#xff09;。 1.1 JWT结构 ┌───────────────────────────────────────────────────…...

AssetStudio深度解析:Unity序列化协议与产线级资源解包实战

1. 这不是“又一个AssetStudio教程”&#xff0c;而是我用它救回三个项目的真实记录AssetStudio、Unity资源提取、AssetBundle解包——这几个词&#xff0c;对做过Unity客户端开发、逆向分析、MOD制作或老游戏复刻的人来说&#xff0c;不是工具名&#xff0c;是救命稻草。我第一…...

初次使用Taotoken控制台管理账单与查看各模型消耗明细

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初次使用Taotoken控制台管理账单与查看各模型消耗明细 对于刚开始使用大模型服务的开发者或团队而言&#xff0c;清晰、透明地掌握…...

华大半导体三大产品线深度解析:安全控制、汽车电子与功率芯片实战指南

1. 项目概述&#xff1a;一次关于“中国芯”的深度现场探访最近&#xff0c;我有机会近距离接触了华大半导体的产品展示与技术交流活动。当“聚焦三大产品线&#xff0c;华大半导体展示最强‘中国芯’&#xff01;”这个标题映入眼帘时&#xff0c;我内心的第一反应是&#xff…...

华硕笔记本性能控制终极指南:用GHelper告别臃肿,拥抱高效

华硕笔记本性能控制终极指南&#xff1a;用GHelper告别臃肿&#xff0c;拥抱高效 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivoboo…...

开发AI应用时利用Taotoken实现多模型聚合与路由策略

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI应用时利用Taotoken实现多模型聚合与路由策略 应用场景类&#xff0c;面向正在构建复杂AI应用的架构师或开发者&#xff0c;…...