XCTF:warmup[WriteUP]

Ctrl+U查看页面源码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><!--source.php--><br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>

发现注释处的source.php,复制到地址栏进入

获取新的一堆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\" />";}  
?> 

访问hint.php

只有一串文字,考虑flag很有可能就在这个‘ffffllllaaaagggg’文件中

回到source.php代码中

分析这段有包含命令的代码:include $_REQUEST['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\" />";} 
  1. !empty($_REQUEST['file']:请求是否非空
  2. is_string($_REQUEST['file']:请求是否为字符串
  3. emmm::checkFile($_REQUEST['file']):能否通过checkFile()函数的判定

当三个条件同时为真时,对文件‘file’执行包含


审计checkFile函数

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;}}
  1. !isset($page) || !is_string($page):$page变量不存在或者不是字符串
  2. in_array($page, $whitelist):$page变量存在于$whitelist数组中
  3. $_page = mb_substr:截取出一段字符串并串赋值给$_page
  4. in_array($_page, $whitelist):$_page变量存在于$whitelist数组中
  5. $_page = urldecode($page):对$page进行url解码后赋值给$_page
$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));

在上述代码中,新建了一个$_page变量

截取函数:mb_substr选定$page变量为被截取的字符串

从位置下标0开始进行字符串截取,mb_strpos则是字符串查找函数

mb_strpos($page.'?','?'),代表查找$page变量中的‘?’字符并返回‘?’的位置

如果没找到‘?’,则假设‘?’在$page字符最后一位,以此保证该函数有返回值

所以整个mb_substr函数代表者:如果$page中存在‘?’则截取出‘?’之前的字符串

如果‘?’不存在,则$page整体都将被截取出来,则‘?file=******************’

星号中的所有字符串都会被截取出来赋值给$_page


解题思路

构造payload先确定一个固定的头:url/?file=(这段字符串不会赋值到page中)

使$page在$whitelist中,则必须是source.php或者hint.php才判定为真

所以这里需要直接构造为:url/?file=hint.php

接着需要再判定有没有‘?’,所以变成:url/?file=hint.php?

所以当我们构造的url进入checkFile时,$page和$_page的值就会一直等于‘hint.php?’

无论checkFile判定$page或者$_page都一定会存在于$whitelist中

且经过截取后,问号前面的值也一定还会等于‘hint.php?’

最终checkFile的返回值则为真,满足一开始flag触发的三个条件

图穷匕见,在url/?file=hint.php?后面跟上要包含的文件,此题就结束了


在地址栏中构造payload

直接访问:url?file=hint.php?ffffllllaaaagggg出现的是一个空白页

考虑该文件应该不在hint.php的同目录,所以应该是在根目录

这里唯一的方法就是多加几个‘../’,将相对位置调试到根目录

最后:url/?file=hint.php?../../../../../ffffllllaaaagggg

加了5个../后,回退到了根目录,出现flag


flag{25e7bce6005c4e0c983fb97297ac6e5a}

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

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

相关文章

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…

KAFKA鉴权设计以及相关探讨

文章目录 1. kafka的鉴权设计2. kafka鉴权应用范围3. kafka鉴权的常用方法3.1 SASL/GSSAPI3.2 SASL/PLAIN3.2.1 配置jaas3.2.2 配置服务启动参数3.2.3 配置server.perperties 4. 参考文档 鉴权&#xff0c;分别由鉴和权组成 鉴&#xff1a; 表示身份认证&#xff0c;认证相关用…

深度学习侧信道攻击的集成方法

深度学习侧信道攻击的集成方法 深度学习侧信道攻击的集成方法项目背景与意义摘要项目链接作者数据集CHES CTF 数据集ASCAD FIXED KEY 数据集ASCAD RANDOM KEY 数据集 代码代码执行神经网络 深度学习侧信道攻击的集成方法 项目背景与意义 在TCHES2020&#xff08;第4期&#x…

安卓线性布局LinearLayout

<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:…

如何用MapTalks IDE来发布网站?

简介 MapTalks IDE 全称 MapTalks集成设计环境&#xff08;Integrated Design Environment&#xff09;&#xff0c;是由MapTalks技术团队开发的新一代web地图设计软件。 通过MapTalks IDE&#xff0c;您可以自由的创建二维和三维地图&#xff0c;在其中载入或创建地理数据&a…

什么是okhttp?

OkHttp简介&#xff1a; OkHttp 是一个开源的、高效的 HTTP 客户端库&#xff0c;由 Square 公司开发和维护。它为 Android 和 Java 应用程序提供了简单、强大、灵活的 HTTP 请求和响应的处理方式。OkHttp 的设计目标是使网络请求变得更加简单、快速、高效&#xff0c;并且支持…

【数据结构与算法】之哈希表系列-20240130

这里写目录标题 一、383. 赎金信二、387. 字符串中的第一个唯一字符三、389. 找不同四、409. 最长回文串五、448. 找到所有数组中消失的数字六、594. 最长和谐子序列 一、383. 赎金信 简单 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不…

【Midjourney】新手指南:命令

1./ask 向Midjourney提问&#xff0c;不过问题和回答都是英文的&#xff0c;例如&#xff1a; 2./blend 将两张图片合并为一张 ​ 3./describe 上传一张图片&#xff0c;Midjourney会生成四组该图片相关的关键词&#xff0c;可以使用这些关键词再生成图片。 ​ 4./turbo …

力扣 55.跳跃游戏

思路&#xff1a; 从后往前遍历&#xff0c;遇到元素为0时&#xff0c;记录对应的下标位置&#xff0c;再向前遍历元素&#xff0c;看最大的跳跃步数能否跳过0的位置&#xff0c;不能则继续往前遍历 代码&#xff1a; class Solution { public:bool canJump(vector<int>…

毕业设计过程学习

传统的目标检测算法主要通过人工设计与纹理、颜色和形状相关的特征来进行目标区域特征的提取。随着深度学习和人工智能技术的飞速发展&#xff0c;目标检测技术也取得了很大的成就。早期基于深度学习的目标检测算法的研究方向仍然是将目标定位任务和图像分类任务分离开来的&…

uni-app在hbuilderx打开微信开发工具运行

一、运行设置配置微信开发者工具路径 运行-运行到小程序模拟器-运行设置 配置微信开发工具的安装路径&#xff08;可浏览文件位置选择&#xff09;&#xff1b;web服务器端口号在第二步骤获得&#xff1b; 二、打开微信开发者工具设置-安全设置 打开服务端口开关&#xff0…

使用ffmpeg madiamtx制作一个rtsp源

有很多人在跑rtsp解码的demo的时候, 苦于找不到一个可以拉流的源, 这里说一个简单的方法. 使用mediamtx, 加ffmpeg加mp4文件方式, 模拟一个rtsp的源. 基本架构就是这样. 在PC上, 这里说的PC可以是远程的服务器, 也可以是你的开发用的windows, 都行. 把mediamtx, 在pc上跑起来 …

书写触感细腻的电容触控笔,透明造型超好看,西圣Pencil2上手

iPad在配上手写笔之后&#xff0c;才能才能充分发挥优势&#xff0c;实现除看视频之外的更多功能。很多人入手iPad的初衷都是工作或者学习&#xff0c;如果只拿来观剧或玩游戏就太浪费了。当然了&#xff0c;现实情况下&#xff0c;Apple Pencil高昂的定价也是很多人望而却步的…

【2024-01-20】 瑞幸咖啡小程序-blackbox

需要联系主页V 瑞幸咖啡小程序 登入需要过同盾滑块下单需要balckbox参数 测试 下单 过滑块 登入发短信 加密参数

理解React中的setState()方法

在React中&#xff0c;setState()方法是一个非常重要的概念&#xff0c;它用于更新组件的状态并触发重新渲染。本文将探讨setState()的使用方法、工作原理以及一些基本的用法。 setState()方法简介 setState()是React组件中用于更新状态的方法之一。它接受一个对象或一个函数作…

第九节HarmonyOS 常用基础组件20-Divider

1、描述 提供分割器组件&#xff0c;分割不同内容块或内容元素。 2、接口 Divider() 3、属性 名称 参数类型 描述 vertical boolean 使用水平分割线还是垂直分割线。 false&#xff1a;水平分割线 true&#xff1a;垂直分割线 color ResourceColor 分割线颜色 默认…

【揭秘】诱骗28V竟如此简单--HUSB238A-EVB-V2.0 使用指南

随着USB TYPE-C的流行&#xff0c;越来越多的桶形连接器正在转换成USB-C连接器&#xff0c;越来越多的电子产品从传统的USB接口升级为TYPE-C接口&#xff0c;并实现PD快充。大一统的充电接口, 充电器接口全兼容&#xff0c;给消费者带来极大的便利。当下&#xff0c;筋膜枪、无…

Linux下Docker Compose安装指南

前言 在Linux的领域里&#xff0c;掌握Docker Compose的安装是迈向容器化技术的第一步。本文将简洁明了地引导您完成安装过程&#xff0c;帮助您更轻松地驾驭容器化技术。 1. 确保系统环境 确保您的系统已经安装了Docker。如果尚未安装&#xff0c;请参考这里进行安装。 2.…

【全csdn最前沿LVGL9】Style样式

文章目录 前言一、Style的介绍二、State状态三、级联样式四、Style的继承五、组件六、设置样式属性七、添加和移除样式7.1 添加7.2 替换样式7.3 移除样式7.4 当对象实时改变了样式去通知对象刷新样式 八、获取一个对象的属性值九、本地样式十、过度动画十一、主题总结 前言 在…

区块链游戏解说:什么是 SecondLive

数据源&#xff1a;SecondLive Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 SecondLive SecondLive 是元宇宙居民的中心枢纽&#xff0c;拥有超过100 万用户的蓬勃社区。它的主要使命是促进自我表达&#xff0c;释放创造力&#xff0c;构建梦想中的平行宇宙…