warmup

首页只有一个笑脸,没有什么有效信息,

查看源代码发现,source.php。
在这里插入图片描述
访问source.php,显而易见,php代码审计。
在这里插入图片描述

 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){   //设立白名单,source.php与hint.php$whitelist =  ["source"=>"source.php","hint"=>"hint.php"];//$page的值为file传入的值,如果$page没有值或者$page的值不为字符串则输出you can't see it。返回Flaseif (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}//如果$page的值在白名单中则返回Tureif (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;}}//请求方法为REQUEST请求参数为file并且file的值为字符串,若是通过了emmm类中的checkFile方法则包含file上传值的文件。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\" />";}  
?> 
//举例
//mb_strpos()函数,用于查找字符串中某个子字符串第一次出现位置的函数。
//如果找到了字符串,返回其第一次出现的位置(从 0 开始计数)。
//如果未找到子字符串,返回 false。
$str = "Hello, 你好";
$pos = mb_strpos($str, "你好");
if ($pos !== false) {echo "子字符串第一次出现的位置: $pos"; // 输出: 子字符串第一次出现的位置: 7
} else {echo "未找到子字符串";
}//mb_substr()用于提取多字节字符串的子字符串的函数
// 示例字符串
$str = "Hello, 你好";
// 从位置 7 开始提取,长度为 2
$substring = mb_substr($str, 7, 2);
echo $substring; // 输出: 你好
// 从位置 0 开始提取,直到末尾
$substring = mb_substr($str, 0);
echo $substring; // 输出: Hello, 你好
// 从倒数第 5 个字符开始提取
$substring = mb_substr($str, -5);
echo $substring; // 输出: 你好
//刨析代码!
$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));//mb_strpos($page . '?', '?')函数file的值,赋值给$page并且在其后拼接?【例如:file=flag,则$page=flag.php】最后返回第一个?出现的位置暂且令返回的值为index。//紧接着执行mb_substr($page,0,index)函数。此函数下从第0个位置提取字符直到第index的位置截至。//最后将提取出来的字符串赋值给$_page。如果$_page的值在白名单中则返回True。if (in_array($_page, $whitelist)) {return true;}//举例:若file=	flag将flie的值传给$page=flagmb_strpos($page . '?', '?')此函数下拼接?在返回第一个问号出现的位置,$page=flag?返回的值为4。。mb_substr($page,0,4)提取$page中从0开的到第四个字符也就是flag。而flag不在白名单中,所以不会进入if (in_array($_page, $whitelist)) {return true}
//这段代码与上面位唯一的区别在于对参数的值进行了url解码,并无其它区别。$_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;}

wirteup:

跟据上面刨析代码时的例子,可以想到,此题的关键就是如何让下面的函数执行完毕后在白名单中。

mb_substr($_page,0,mb_strpos($_page . '?', '?'));
那只能利用本体给出的白名单source.php与hint.php绕过。?file=source.php?这样,mb_substr()函数返回的值为source.php在白名单中可以返回Ture。没有结束因为包含source.php毫无作用我们本来就可以访问它,这里只是借助白名单绕过。

访问hint.php,告诉我们flag的位置了,那就试着访问。
在这里插入图片描述
构造payload

?file=source.php?ffffllllaaaagggg
发现并没有回显,说明至少我们绕过了,没有值应该是没有访问到这个文件,说明ffffllllaaaagggg与source.php并不在一个目录下可能。就需要用到目录穿越。
?file=source.php?../ffffllllaaaagggg
?file=source.php?../../ffffllllaaaagggg
.
.
.
?file=source.php?../../../../../ffffllllaaaagggg

成功
在这里插入图片描述

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

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

相关文章

Python 的安装及开发环境搭建

Python 的安装及开发环境搭建 文章目录 Python 的安装及开发环境搭建一、基础环境二、适用场景三、过程方法 版权声明&#xff1a;本文为CSDN博主「杨群」的原创文章&#xff0c;遵循 CC 4.0 BY-SA版权协议&#xff0c;于2024年10月29日首发于CSDN&#xff0c;转载请附上原文出…

Spring的高效开发思维(二)

时间&#xff1a;2024年 10月 30日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频&#xff1a;喜马拉雅 大家好&#xff0c;我是小蒋&#xff01;今天咱们继续深入 Spring 和 Spring Boot 的核心哲学。其实开发并不只是“码…

LeetCode算法(链表)

今天的算法是链表篇&#xff0c;这篇比较简单&#xff0c;总体是之前完成的手写链表&#xff0c;几乎就是链表的大部分知识了&#xff0c;所以今天算是一个复习内容了。 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一…

Docker:容器化和虚拟化

虚拟化 虚拟化是一种资源管理技术&#xff0c;它将计算机的各种实体资源&#xff08;如CPU、内存、磁盘空间、网络适配器等&#xff09;予以抽象、转换后呈现出来&#xff0c;并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源的架设方式、地域或…

如何有效提升MySQL大表分页查询效率(本文以一张900万条数据体量的表为例进行详细解读)

文章目录 1、提出问题1.1 问题测试 2、解决问题&#xff08;三种方案&#xff09;2.1、方案一&#xff1a;查询的时候&#xff0c;只返回主键 ID2.2、方案二&#xff1a;查询的时候&#xff0c;通过主键 ID 过滤2.3、方案三&#xff1a;采用 elasticSearch 作为搜索引擎 3、总结…

DGUS屏使用方法

1、DGUS工程下载 迪文DGUS屏的所有硬件参数和资料下载&#xff0c;都是通过屏上的SD/SDHC接口来完成的&#xff0c;文件必须使用FAT32文件格式。第一次使用SD卡前&#xff0c;推荐先格式化一次&#xff0c;流程如下&#xff1a; 1、 右键单击SD卡&#xff0c;在弹出来的菜单中选…

设计产品宣传册没头绪?推荐一个超多产品宣传册、画册的案例网站

在当今市场竞争激烈的背景下&#xff0c;产品宣传册和画册是企业宣传的重要手段之一。一本独具匠心的宣传册&#xff0c;不仅能够准确传达产品特点&#xff0c;还能吸引潜在客户&#xff0c;提升品牌形象。然而&#xff0c;设计一本优秀的宣传册并非易事&#xff0c;许多设计师…

接口测试(八)jmeter——参数化(CSV Data Set Config)

一、CSV Data Set Config 需求&#xff1a;批量注册5个用户&#xff0c;从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果

【网页布局技术】项目五 使用CSS设置导航栏

《CSSDIV网页样式与布局案例教程》 徐琴 目录 任务一 制作简单纵向导航栏支撑知识点1&#xff0e;合理利用display:block属性2&#xff0e;利用margin-bottom设置间隔效果3&#xff0e;利用border设置特殊边框 任务二 制作简单横向导航栏任务三 制作带图片效果的横向导航栏任务…

基于LangChain构建安全Agent应用实践(含代码)

概述&#xff1a;本文基于langchain和Cyber Security Breaches数据集构建Agent&#xff0c;并基于该Agent实现了数据分析、趋势图输出、预测攻击态势三个功能&#xff0c;最后给出Agent在安全领域应用的三点启示。 前提&#xff1a; 1、拥有openai API KEY&#xff1b;&#…

机器学习-决策树

登录后复制 import numpy as np import matplotlib.pyplot as plt from sklearn import datasetsiris datasets.load_iris() X iris.data[:,2:] y iris.target plt.scatter(X[y0,0], X[y0,1]) plt.scatter(X[y1,0], X[y1,1]) plt.scatter(X[y2,0], X[y2,1]) plt.show() 1.2.…

为什么大模型都是Decoder-only结构?

扫一扫下方&#xff0c;获取更多面试真题的集合 在探讨当前大型语言模型&#xff08;LLM&#xff09;普遍采用Decoder-only架构的现象时&#xff0c;我们可以从以下几个学术角度进行分析&#xff1a; 注意力机制的满秩特性&#xff1a;Decoder-only架构采用的因果注意力机制&am…

Linux系统块存储子系统分析记录

1 Linux存储栈 通过网址Linux Storage Stack Diagram - Thomas-Krenn-Wiki-en&#xff0c;可以获取多个linux内核版本下的存储栈概略图&#xff0c;下面是kernel-4.0的存储栈概略图&#xff1a; 2 存储接口、传输速度 和 协议 2.1 硬盘 《深入浅出SSD&#xff1a;固态存储核心…

北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置

迅为iTOP-LS2K0500开发板 迅为iTOP-LS2K0500开发板采用龙芯LS2K0500处理器&#xff0c;基于龙芯自主指令系统&#xff08;LoongArch&#xff09;架构&#xff0c;片内集成64位LA264处理器核、32位DDR3控制器、2D GPU、DVO显示接口、两路PClE2.0、两路SATA2.0、四路USB2.0、一路…

电子电气架构 --- 车载芯片现状

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

MySQL分层结构由哪些组成?

1、MySQL分层结构由哪些组成&#xff1f; MySQL按照功能模块可以分为3层&#xff1a;连接层、服务层和存储引擎层。 连接层位于Server服务层的最外层&#xff0c;负责与客户端的直接交互&#xff0c;从功能上单独划分一层更合适。 不同的存储引擎在存储层有不同的实现&#x…

Vue3入门--[vue/compiler-sfc] Unexpected token, expected “,“ (18:0)

新手小白学习Vue–入门就踩坑系列 问题描述 创建了一个Person.vue&#xff0c;保存后直接报错&#xff1a; [plugin:vite:vue] [vue/compiler-sfc] Unexpected token, expected "," (18:0) 在网上搜了半天也没找到原因&#xff0c;最后还得靠自己&#xff0c;现将解…

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;凭借其强大的生成与理解能力&#xff0c;正在广泛应用于多个实际场景中。《大模型项目实战&#xff1a;多领域智能应用开发》为大家提供了全面的应用技巧和案例&#xff0c;帮助开发者深…

java:入门基础(1)

练习一&#xff1a;文字版格斗游戏 需求: ​ 格斗游戏&#xff0c;每个游戏角色的姓名&#xff0c;血量&#xff0c;都不相同&#xff0c;在选定人物的时候&#xff08;new对象的时候&#xff09;&#xff0c;这些信息就应该被确定下来。 举例&#xff1a; ​ 程序运行之后…