buu[HCTF 2018]WarmUp(代码审计)
buu[HCTF 2018]WarmUp(代码审计)
题目
访问source.php
<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
?>
分析
可以看到checkfile里面有4个if,第一个if不能进去进去就false;
后面三个if要进去一个,不然执行结束返回false;
下面的文件包含前的判断条件要三个都为真才能包含
然后通过白名单可以知道有两个文件,我们访问一下hint.php
得到一个flag所在的文件
让我们分析一下代码:
if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}//这个if不进去很简单
if (in_array($page, $whitelist)) {return true;}
//这个if进不去,我们传的$page肯定不符合白名单
$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));//这段代码的意思就是 将第一个?之前的内容截取出来,注意不包括这个问号//而且可以发现的是这里不再是原封不动的$page拿来比较
if (in_array($_page, $whitelist)) {return true;}
//拿$_page去比较是否匹配白名单,注意这里是截取过.
//可以向办法进入这个if
$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));//先将$page解码再截取if (in_array($_page, $whitelist)) {return true;}//同样这里可以想办法进入这个if
echo "you can't see it";return false;//之前没有进入任何if去返回值就失败了
在这个URL中,http://url/source.php?file=hint.php?../../../../../ffffllllaaaagggg
,包含了两个参数:file
和 ../../../../../ffffllllaaaagggg
。
通常,URL中的参数是用?
来分隔的,而参数之间则用&
符号来分隔。在这个URL中,file
是参数名,hint.php?../../../../../ffffllllaaaagggg
是参数值。
现在让我们来解释一下这个参数值 hint.php?../../../../../ffffllllaaaagggg
的含义:
hint.php
:这部分是文件名,表明了要访问的文件是hint.php
。?
:在URL中,?
符号通常用来分隔参数名和参数值。在这个特定的情况下,?
可能被用来分隔文件名和查询字符串,以向hint.php
传递额外的参数。../../../../../ffffllllaaaagggg
:这部分是查询字符串,它以?
开头。在UNIX和类似系统中,../
用来表示上级目录,因此这个查询字符串看起来是在尝试向hint.php
传递参数ffffllllaaaagggg
,同时在路径中向上跳了多个目录。
总结一下,这个URL中的hint.php?../../../../../ffffllllaaaagggg
可能是尝试访问hint.php
文件,并向它传递了一个查询字符串参数,同时尝试在文件路径中向上跳转多层目录。
需要注意的是,?
符号在URL中通常用来分隔参数名和参数值。在这个特定的情况下,?
后面的内容被认为是查询字符串,它可能被hint.php
用来解析和处理。然而,具体的含义和行为取决于服务器端对URL的处理方式。
此题?应该是用来绕过白名单所加
网上有两种解释,结合起来看更容易理解
1、tips:include函数有这么一个神奇的功能:以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。
2、如果我们的file变量为source.php?../…/…/…/…/ffffllllaaaagggg,先截取 ? 号前字符串白名单验证也就是 source.php,符合,返回ture,然后服务器访问时访问 source.php? 文件不存在,目录穿越至ffffllllaaaagggg,得到我们要的flag。至于为什么需要四个…/,可以一个个增加多次尝试。(source或hint都可)
方法一
一次编码,进入第三个if
方法二
使用urldecode会出现一个问题,假如我将一个字符使用url编码了两遍然后传入的时候,首先浏览器解码了一遍,接下来才是urlencode解码,所以使用两次urlencode,绕过前面的if,进入第四个if
相关文章:

buu[HCTF 2018]WarmUp(代码审计)
buu[HCTF 2018]WarmUp(代码审计) 题目 访问source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php…...
力扣爆刷第145天之图论五连刷(dfs和bfs)
力扣爆刷第145天之图论五连刷(dfs和bfs) 文章目录 力扣爆刷第145天之图论五连刷(dfs和bfs)总结一、797. 所有可能的路径二、200. 岛屿数量三、695. 岛屿的最大面积四、1020. 飞地的数量五、130. 被围绕的区域 总结 dfs是一条路走…...
Host头攻击-使用加密和身份验证机制
使用加密和身份验证机制,即安装合适的安全工具和软件,是确保Web服务器安全性的重要步骤。这种方法涉及使用各种安全工具来检测、预防、监控和响应潜在的安全威胁。以下是对第6种方法的详细讲解,包括一些常见的安全工具和软件的示例。 1. 防火…...

衍生品赛道的 UniSwap:SynFutures 或将成为行业领军者
经过一个周期的发展,DeFi 已经成为基于区块链构建的最成功的去中心化应用,并彻底改变了加密市场的格局。加密货币交易开始逐步从链下转移到链上,并从最初简单的 Swap 到涵盖借贷、Staking、衍生品交易等广泛的生态系统。 在 DeFi 领域&#x…...
TypeScript中的`let`、`const`、`var`区别:变量声明的规范与实践
TypeScript中的let、const、var区别:变量声明的规范与实践 引言 在TypeScript中,变量声明是代码编写的基础部分。let、const、var 是三种用于变量声明的关键字,它们各自有不同的作用域规则和可变性特点。 基础知识 作用域:变量…...

【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
Python限制输入的数范围
在Python中,我们可以使用多种方法来限制用户输入的数值范围。 1.使用while循环和try-except语句的方法 以下是一个使用while循环和try-except语句的示例,该示例将要求用户输入一个在指定范围内的整数。 假设我们要限制用户输入的数在1到100之间&#…...
postman都有哪些功能?
接口测试 可以方便地发送 HTTP 请求,包括各种方法(GET、POST、PUT、DELETE 等),并查看响应结果。 参数设置 能够灵活设置请求的参数,如查询参数、请求头、请求体等。 环境管理 支持创建不同的环境,方便…...

华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置
作者主页:点击! ENSP专栏:点击! 创作时间:2024年5月6日20点26分 💯趣站推荐💯 前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默,忍…...

ROS for LabVIEW:实现LabVIEW与ROS的无缝集成
ROS for LabVIEW是由Tufts大学开发的一套VI集合,旨在实现LabVIEW与ROS(Robot Operating System)的无缝集成。ROS是一个灵活的机器人软件框架,而LabVIEW则是一种强大的图形化编程工具。这个工具包的推出使得LabVIEW用户能够直接与R…...

yolov8+ROS+ubuntu18.04——学习记录
参考文献 1.Ubuntu配置Yolov8环境并训练自己的数据集 ROS实时运行 2.https://juejin.cn/post/7313979467965874214 前提: 1.CUDA和Anaconda,PyTorch 2.python>3.8 一、创建激活环境,安装依赖 1.创建虚拟环境 conda create -n yol…...
Java小抄(一)|Java中的List与Set转换
文章目录 List和Set的区别线程安全的区别相互转换List->SetSet->List List和Set的区别 在Java中,List和Set都是集合接口,它们之间有几个关键的区别: 重复元素: List允许重复元素,可以存储相同的元素多次。Set…...
【每日随笔】小人畏威不怀德 , 君子畏德不畏威 ( 先礼后兵 )
文章目录 一、小人畏威不怀德1、小人畏威不怀德2、小人场景一3、小人场景二 二、君子畏德不畏威三、先礼后兵 一、小人畏威不怀德 1、小人畏威不怀德 如果 友善 的对待 小人 , 这种人 认知低 且 素质差 , 小人 会将你的 " 友善 " 理解为 " 屈服 " , 他会认…...
不一样的2024
当我们继续往前走时,发现身边的事物不再那么的陌生,也不再那边多的阻碍,不管怎么,2024将会不一样。 当我们走进审批流时,全面石荒芜的,所以自己构建了一个体系。 当我们转向开源时,发现开源与…...
linux mv操作和cp操作
mv 和 cp 是 Linux 系统中用于移动和复制文件或文件夹的两个常用命令,它们之间的主要区别在于: mv(move):mv 命令用于移动文件或文件夹,将它们从一个位置移动到另一个位置。移动后,原始文件或文…...

第十二届蓝桥杯物联网试题(国赛)
不得不说国赛相比较省赛而言确实,功能变得更加复杂,更加繁琐,特别是串口LORA通信相结合的更加频繁,且对收取的字符处理要求要更加复杂,处理判别起来会更加复杂。 对于收发数据本身来说,收发的数据本身是以…...

小而美的前端库推荐
小而美,指的是“小即是美”的事物,这是马云在 2009年 APEC 中小企业峰会上首次提出的观点 👍 前端有很多小而美的库,接入成本很低又能满足日常开发需求 🎉...

【LeetCode】力扣第 399 场周赛 优质数对的总数 II
文章目录 1. 优质数对的总数 II 1. 优质数对的总数 II 题目链接 🍎该题涉及的小技巧:🐥 🐧①一次可以统计这个数的 两个因子 但是要注意 25 5 * 5,这种情况 5 只能统计一次噢🆒 解题思路: 🐧…...

YOLOv8+PyQt5面部表情检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)
1.资源包含可视化的面部表情检测系统,基于最新的YOLOv8训练的面部表情检测模型,和基于PyQt5制作的可视化面部表情检测系统,包含登陆页面、注册页面和检测页面,该系统可自动检测和识别图片或视频当中出现的八类面部表情:…...
ROS 工作空间
ROS 工作空间 工作空间概念 ROS 的工作空间 在 ROS 中,工作空间(通常称为 Catkin 工作空间)是一个文件夹(目录)结构,它用于组织、构建和管理 ROS 项目中的软件包。主要特点包括: 1. 目录结构…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...