buu[HCTF 2018]WarmUp(代码审计)

buu[HCTF 2018]WarmUp(代码审计)

在这里插入图片描述

题目

访问source.php

 <?php
    highlight_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 的含义:

  1. hint.php:这部分是文件名,表明了要访问的文件是hint.php
  2. ?:在URL中,?符号通常用来分隔参数名和参数值。在这个特定的情况下,?可能被用来分隔文件名和查询字符串,以向hint.php传递额外的参数。
  3. ../../../../../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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

屎山代码SSM转换Springboot

SSM项目转Springboot项目 最近很多人可能是在网上买的那种屎山代码&#xff0c;数据库都是拼音的那种 比如项目如下所示&#xff1a; 这种屎山代码我改过太多了&#xff0c;很多人可能无从下手&#xff0c;因为代码结构太混乱了&#xff0c;但是我改过太多这种代码&#xff0…

【SpeedAI科研小助手】2分钟解决知网维普AIGC检测

2分钟搞定AIGC率&#xff1f;还能降到0%&#xff1f; 使用方法&#xff1a; 打开SpeedAI科研小助手&#xff0c;将功能模式换成降AIGC率&#xff0c;后面可以一段一段自己改&#xff0c;也可以直接上传论文文件&#xff0c;SpeedAI直接帮你全文修改&#xff08;主打一个用户友…

【云原生】kubernetes中的认证、权限设置---RBAC授权原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

笔记本电脑的ip地址在哪里找

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;扮演着至关重要的角色。对于笔记本电脑用户而言&#xff0c;了解如何查找自己的IP地址不仅有助于网络故障排查&#xff0c;还能在网络安全和远程办公等场景中发挥关键作用。虎观代理小二将详细介绍笔记本电脑…

关于linux磁盘告警问题

案例&#xff1a;我们在执行df命令时&#xff0c;查看到磁盘利用率很高&#xff0c;但是到相对应的目录执行du -sh *来找大文件时进行删除时&#xff0c;发现各个目录相加并不大&#xff0c;如下图&#xff1a; 使用df命令查看到根(/)目录使用到33G&#xff0c;而du命令显示只使…

【一竞技DOTA2】北美SR战队官宣SabeRLighT-离队

1、近日北美SR战队官宣了旗下三号位选手SabeRLighT-正式离队&#xff0c;公告内容如下&#xff1a; “今日我们正式宣布&#xff0c;Jonas &#xff08;Saberlight&#xff09;Volek将离开队伍。这个决定由Jonas本人和其他团队成员共同做出。 在过去的几个月里&#xff0c;我们…

mysql中InnoDB的表空间--独立表空间

大家好&#xff0c;上篇文章我们在讲mysql数据目录的时候提到了表空间这个名词&#xff0c;它是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ib…

中医理疗元宇宙 科技赋能中医药产业走向国际市场

基于380亿参数量&#xff0c;对中医药海量文本进行数据训练&#xff0c;实现方剂优化、机制阐释和新适应症的精准发现……日前在天津召开的数智赋能大健康产业新质生产力暨第四届中医药国际发展大会上&#xff0c;由天士力医药集团与华为云共同开发的“数智本草”中医药大模型正…

QT C++ QTableWidget+combobox 槽函数 演示

本文演示了 QTableWidget的初始化以及单元格值改变时响应槽函数&#xff0c;打印单元格。 并且&#xff0c;最后列不一样,是组合框(combobox) &#xff0c;此列的槽函数用lambda函数。 在QT6.2.4 MSVC2019 调试通过。 1.界面效果 2.头文件 #ifndef MAINWINDOW_H #define MA…

关于Nginx热部署的细节分析

文章目录 前言一、环境准备二、热部署步骤总结 前言 Nginx由于其高并发、高性能、可扩展性好、高可靠性、热部署、BSD许可证等优势被广泛使用&#xff0c;本人主要针对热部署的部分展开说明热部署的具体步骤以及步骤背后发生的具体事情。 本次热部署采用的Nginx版本号为&…

【Web】2024京麒CTF ezjvav题解

目录 step 0 step 1 step 2 EXP1 EXP2 step 0 进来是一个登录框 admin/admin成功登录 访问./source jwt伪造 带着伪造的jwt访问./source&#xff0c;拿到题目源码jar包 step 1 pom依赖有spring、fj、rome 反序列化入口在./Jsrc路由 有两层waf&#xff0c;一个是明…

科技与心理学的协同舞蹈

在探讨盲人如何利用如“蝙蝠避障”这样的辅助软件融入日常生活的同时&#xff0c;我们不得不深入触及盲人教育心理学的核心&#xff0c;这一领域致力于理解盲人在学习与成长过程中独特的心理需求与挑战&#xff0c;以及如何通过教育策略激发他们的潜能&#xff0c;促进全面发展…

Day37 贪心算法part04

LC860柠檬水找零(未掌握) 未掌握分析&#xff1a;20的时候找零卡住&#xff0c;同时贪心思路就想了很久 当bill[i]20的时候&#xff0c;我们有两种找零范式&#xff0c;找零10、5和找零三个5&#xff0c;优先找零10、5&#xff0c;因为三个5是可以替代10、5的情况的&#xff0…

亚马逊、沃尔玛如何通过测评自养号打造爆款

在跨境电商的激烈竞争中&#xff0c;不少商家误以为仅需简单的测评便能迅速打造出热销产品。然而&#xff0c;真实情况远非如此。测评不仅是一个需要精心策划和持续执行的过程&#xff0c;更是提升产品曝光度和权重的关键手段。 首先&#xff0c;安全始终是测评的首要前提。在缺…

不能错过的AI知识学习神器「Mo卡片」

1. 「Mo卡片」——知识点的另一种承载方式 1.1 产品特点 &#x1f4f1;一款专为渴望理解和掌握人工智能知识的小伙伴量身打造的轻量级 App。 &#x1f3f7;AI 知识卡片集 Mo卡片内置了 26 套卡片集&#xff0c;总计 1387 张卡片&#xff0c;每张卡片都能获得 1 个核心知识。…

产品经理-产品设计规范(六)

1. 设计规范 2. 七大定律 2.1 菲茨定律 2.1.1 概念 2.1.2 理解 2.1.3 启示 按钮等可点击对象需要合理的大小尺寸根据用户使用习惯合理设计按钮的相对和绝对位置屏幕的边和角很适合放置像菜单栏和按钮这样的元素 2.1.4 参考使用手机习惯 2.1.5 案例 2.2 席克定律 2.2.1 概念 …

# LLM高效微调详解-从Adpter、PrefixTuning到LoRA

一、背景 目前NLP主流范式是在大量通用数据上进行预训练语言模型训练&#xff0c;然后再针对特定下游任务进行微调&#xff0c;达到领域适应&#xff08;迁移学习&#xff09;的目的。 Context Learning v.s. SFT 指令微调是预训练语言模型微调的主流范式&#xff0c;其目的是…

Python筑基之旅-文件(夹)和流

目录 一、文件操作 1、文件打开与关闭 2、文件读写 3、文件操作模式 4、文件编码 二、文件夹操作 1、创建文件夹 2、删除文件夹 3、改变当前工作目录 4、获取当前工作目录 5、检查文件/文件夹是否存在 6、遍历文件夹 三、文件路径操作 1、获取绝对路径 2、构建完…

Python3 使用 pymssql 连接 SQL Server 报错:DB-Lib error message 20002, severity 9

一、版本说明 python版本&#xff1a; 3.12.1 pymssql版本&#xff1a; 2.3.0 # pymssql.version_info() SQL Server版本&#xff1a;SQL Server 2008 OS版本&#xff1a; rocky linux 9.4二、报错信息 Traceback (most recent call last):File "src/pymssql/_…

【QT环境配置】节约msvc2017灰色不可用问题

1. 问题 msvc2017不可用&#xff0c;2019、2022都同理解决。 2. 解决 打开控制面板->程序->程序和功能->找到自己安装的vs程序->鼠标右键后出现卸载更改->点击更改 找到下面组件即可。&#xff08;msvc2019就找msvcv142&#xff09;