buuctf[HCTF 2018]WarmUp 1

题目环境:
在这里插入图片描述

发现除了表情包,再无其他
F12试试
image.png
发现source.php文件
访问这个文件,格式如下:
url/source.php
回显如下:
image.png
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\" />";
}  
?>
  1. 定义了一个名为emmm的类,该类有一个静态方法checkFile。checkFile方法接受一个字符串参数$page,这个参数可能代表一个文件名。
  2. 定义了一个$whitelist数组,这个数组里面存在两个元素是"source.php"和"hint.php"。
  3. checkFile方法首先检查$page是否存在且为字符串。如果不满足这些条件,它将输出"you can’t see it"并返回false。
  4. 然后,checkFile方法检查 p a g e 是否存在于一个名为 page是否存在于一个名为 page是否存在于一个名为whitelist的数组中。这个数组包含两个元素,分别是"source.php"和"hint.php"。如果 p a g e 在 page在 pagewhitelist中,方法将返回true。
  5. 如果 p a g e 不在 page不在 page不在whitelist中,那么checkFile方法将尝试通过以下步骤查找匹配的文件名:
    • 首先,它将 p a g e 和问号 ( ? ) 连接起来,然后查找这个字符串在 page和问号(?)连接起来,然后查找这个字符串在 page和问号(?)连接起来,然后查找这个字符串在page中的位置。这可能是为了检查是否存在一个查询字符串。
    • 然后,它对$page进行url解码,再重复之前的步骤。
    • 如果以上两种方式都未能找到匹配的文件名,那么方法将输出"you can’t see it"并返回false。
  6. 在类的定义之外,这段代码检查了一个名为 R E Q U E S T [ ′ f i l e ′ ] 的变量。如果这个变量非空且为字符串,并且通过 e m m m : : c h e c k F i l e ( _REQUEST['file']的变量。如果这个变量非空且为字符串,并且通过emmm::checkFile( REQUEST[file]的变量。如果这个变量非空且为字符串,并且通过emmm::checkFile(_REQUEST[‘file’])检查,那么它将包含(include)这个文件并退出。否则,它将显示最初页面的那个滑稽表情包图片。
  7. 总的来说,给了我们一个参数是file,我们给file参数传值就等于是给page参数传值,传的值需要提前用英文问号(?)连接起来,然后我们就可以找flag,怎么找flag是个问题,但是在代码里面还有一个名为hint.php的文件,不妨去看看,或许有咱们需要的信息。

查看hint.php内容
查看格式:
url/hint.php
回显结果:
image.png
这里说flag在ffffllllaaaagggg文件里面
有了目标就好办了,构造下payload:
url/source.php?file=hint.php?/ffffllllaaaagggg
image.png
竟然什么都没有显示
分析一下原因:

  1. 首先我们的payload要在source.php文件下进行,因为参数在这里面。
  2. flag在ffffllllaaaagggg里面,ffffllllaaaagggg又在hint.php里面,并且$whitelist数组里面也存在hint.php文件,所以说要先进到hint.php文件里面。
  3. 英文问号(?)连接后面的字符串也没有问题
  4. 到这里payload构造是没有问题的,那么问题就出在了找flag的位置不对!
  5. 我们这个payload是在hint.php文件里面找的,但是没有,返回上一级找找看?问题是也不知道flag具体在哪一级,那就构造多一些,溢出的部分没关系,这里只会显示最后一个目录。
  6. 了解一下:

1、“.”表示当前目录,也可以用“./”表示。

2、“…”表示上一级目录,也可以用“…/”表示。
3、“~” 代表用户自己的宿主目录。
4、“/”处于Linux文件系统树形结构的最顶端,我们称它为Linux文件系统的root,它是Linux文件系统的入口。

继续构造payload:
url/source.php?file=hint.php?../../../../../../ffffllllaaaagggg
这里就是说一直返回上一级查找,直到查找到flag为止,最终返回到/root根目录,因为ffffllllaaaagggg原本是在hint.php文件里面嘛,所以说要一直往上一级目录找它的原始位置,
…/倒不是一定是6个,看你的flag具体在那个上一级目录了😉
上传payload
回显结果:
image.png
爆出flag:
flag{89c3539b-c6f4-4454-892a-ff1e460a560b}

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

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

相关文章

GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

我们在 Linux 环境中用 C 编程时,如果对文件读写,Linux 会自动给文件加锁嘛?

先说结论&#xff0c;结论是不会 我写了一个这样的程序 #include <stdio.h> #include <unistd.h>int main() {const char* pathname "your_file_pathname.txt";FILE* file NULL;int count 100;if(access(pathname, F_OK) 0) {file fopen(pathname…

Onnx精度转换 FP32->FP16

Onnx精度转换 FP32->FP16 1、依赖包 onnxonnxmltools 2、转换 from onnxmltools.utils.float16_converter import convert_float_to_float16 from onnxmltools.utils import load_model,save_modelonnx_model load_model("model.onnx") fp16_model convert_…

C语言进阶第九课 --------动态内存管理

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

各种添加路由的方法

Linux 篇&#xff1a; ipv4: #添加到主机的路由 # route add –host 192.168.168.110 dev eth0 # route add –host 192.168.168.119 gw 192.168.168.1 #添加到网络的路由 # route add –net IP netmask MASK eth0 # route add –net IP netmask MASK gw IP # route add –n…

k8s-----19、Helm

Helm 1、引入2、概述2.1 重点2.2 V3版本的Helm2.2.1 与之前版本的不同之处2.2.2 V3版本的运行流程 3、安装和配置仓库、一些附带操作3.1 安装3.2 配置仓库3.3 常用命令3.4 添加helm的自动补齐 4、快速部署应用(weave应用)5、 自行创建Chart5.1 Chart目录内容解析5.2 简单安装部…

codeforces (C++ Haunted House)

题目&#xff1a; 翻译&#xff1a; 思路&#xff1a; 1、由题目可知&#xff0c;他想让我们判断交换相邻字符位置后将二进制转为十进制后&#xff0c;能否整除2的次方。能整除即输出需要交换的次数&#xff0c;不能则输出-1。&#xff08;例&#xff1a;输入3和010这组数据就…

论文学习:漏洞检测SnapVuln

SnapVuln SnapVuln是一种基于学习的漏洞检测方法&#xff0c;它应用多个针对特定漏洞的跨函数算法来识别源和汇点&#xff0c;以捕捉各种漏洞类型的精确程序语义。通过从源代码中提取跨函数的图形&#xff08;IG&#xff09;&#xff0c;SnapVuln可以综合使用PDG、CFG和调用图…

WebDAV之π-Disk派盘 +Polaris Office

推荐一款可以实现在Windows桌面PC,Mac,Android设备和iOS设备上同步的移动办公软件,还支持通过WebDAV添加葫芦儿派盘。Polaris Office是一款功能全面的办公自动化套件,软件集成了Word、Excel、幻灯片(PPT)、ODT等文档格式,并且可以完美兼容任何Microsoft Office,PDF,TXT或…

封装、继承、多态的概念

封装&#xff1a;将数据&#xff08;属性&#xff09;和函数&#xff08;操作&#xff09;合成一个整体&#xff0c;封装在类里面。 继承&#xff1a;派生与独立设计若干相关的类&#xff0c;前者工作量更少&#xff0c;重复的部分可以从基类继承来&#xff0c;不需要单独编程…

html web前端 登录,短信验证码登录

html web前端 登录&#xff0c;短信验证码登录 1&#xff0c;手机号码格式校验 2&#xff0c;按钮点击60秒倒计时&#xff0c;按钮限制点击 3&#xff0c;验证码/或密码长度校验&#xff08;被注释&#xff0c;公司发的验证码长度不一致&#xff0c;不一定是6位&#xff09; 4…

linux两块硬盘挂载同一个目录

参考&#xff1a;https://zhuanlan.zhihu.com/p/456193585 第一步&#xff1a;查看磁盘信息 查看现有物理卷信息 pvdisplay如果没有安装逻辑卷管理系统工具 apt install lvm2 ## 我用的 Ubuntu查看磁盘分区 fdisk -l我要用以下两块 SSD 来挂载到同一目录。 执行结果&…

虹科培训 | 虹科携手PLCopen开展IEC 61131-3国际工程师培训

文章来源&#xff1a;虹科工业控制 阅读原文&#xff1a;https://mp.weixin.qq.com/s/MLYhBWiWx7qQSApx_3xhmA &#xff08;一&#xff09;课程背景 什么是IEC 61131-3&#xff1f; IEC 61131-3 是工业自动化行业唯一得到大量应用的组态编程语言国际标准&#xff1b;主导制定…

xcode15一直显示正在连接iOS17真机问题解决

前言 更新xcode15之后&#xff0c;出现了各种报错问题&#xff0c;可谓是一路打怪啊&#xff0c;解决一个报错问题又来一个。没想到到了最后还能出现一个一直显示正在连接iOS17真机的问题 一直显示正在连接iOS17真机的问题 问题截图如下&#xff1a; 解决方法 1. 打开De…

apple-app-site-association nginx

项目里面配置 applinks: 域名 eg: baidu.com 2. 创建 apple-app-site-association 文件&#xff0c;无json等后缀名 eg&#xff1a; appID 构成 teamId bundleId {"applinks": {"apps": [],"details": [{"appID": "2TEAM6D5.…

STM32之Bootloader、USB、IAP/DFU下载

STM32 IAP应用开发——通过内置DFU实现USB升级&#xff08;方式2&#xff09; STM32 IAP应用开发——通过内置DFU实现USB升级&#xff08;方式1&#xff09; STM32程序下载4&#xff1a;通过STM32CubePro-USB下载 STM32程序下载3&#xff1a;通过STM32CubePro-UART下载 STM…

计算机视觉与深度学习 | 基于点线融合的视觉惯性SLAM前端

===================================================== github:[https://github.com/MichaelBeechan] CSDN:[https://blog.csdn.net/u011344545] ===================================================== 引言 本文中将介绍视觉惯性SLAM的前端部分,首先是传感器数据处理…

mysql查询最近7天 每天销售额 统计销售额

sql统计每一天的支出数目&#xff0c;支出金额&#xff0c;收入数目&#xff0c;收入金额 finance_type0&#xff1a;收入 finance_type1&#xff1a;支出 部分建表语句&#xff1a; CREATE TABLE finance (finance_id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,finance_u…

Anaconda安装教程(Windows环境下)

下面的步骤是根据一个大佬的博文操作的&#xff0c;然后自己写了操作步骤和遇到的一些问题&#xff0c; 大佬博客在这&#xff1a; 【精选】Anaconda超详细安装教程&#xff08;Windows环境下&#xff09;_conda安装-CSDN博客 1、 Anaconda的下载&#xff1a; 一般两个选择&a…

05、Python -- 爬取ts文件格式视频思路

目录 第一步:爬取一段5秒视频找url代码结果第二步:下载整个视频的所有片段代码:结果:第三步:合成视频安装模块代码:结果简洁代码代码:结果:最终代码简洁前代码简洁后代码思路: 1、爬取视频,但是每次只能爬取一段5秒的视频。 2、一个视频有很多秒,所以需要爬取很多片…