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

  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
在这里插入图片描述

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

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

相关文章

MySQL基础学习: SET FOREIGN_KEY_CHECKS = 0

文章目录 一、介绍二、使用方法三、注意事项 一、介绍 在MySQL中&#xff0c;SET FOREIGN_KEY_CHECKS 0; 是一个特殊的命令&#xff0c;用于临时禁用外键约束检查。这在你执行一些涉及多个表并且可能违反外键约束的批量操作时非常有用。 为什么需要禁用外键约束检查&#xf…

电脑键盘如何练习盲打?

电脑键盘如何练习盲打&#xff1f;盲打很简单&#xff0c;跟着我做&#xff0c;今天教会你。 请看【图1】&#xff1a; 【图1】中&#xff0c;红色方框就是8个基准键位&#xff0c;打字时我们左右手的8个手指就是放在这8个基准键位上&#xff0c;F键和J键上各有一个小突起&…

Spring6基础笔记

Spring6 Log4j2 1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发…

mysql图形化界面及将mysql注册成后台程序

安装图形化界面版本 右键新建数据库 字符集使用utf8防止以后数据库中存在中文字符导致乱码 将mysql注册成后台程序 cmd进入命令行界面 切换路径到cd /mysql/bin 将mysql注册成后台程序 mysqld.exe --install mysql1 (失败&#xff0c;说明没有权限) 以管理员身份打开成功…

ASP.NET防止流量攻击的措施

请求速率限制&#xff1a; // 在 Global.asax.cs 文件中 Application_BeginRequest 方法中添加以下代码 protected void Application_BeginRequest() {// 检查请求频率&#xff0c;限制每个 IP 地址的请求次数if (RequestThrottler.IsRequestLimitExceeded(Context.Request.Use…

如何跨过robots协议的限制爬取内容?

在讨论如何“跨过robots协议的限制爬取内容”之前&#xff0c;重要的是强调遵循网络礼仪和法律法规的必要性。robots协议&#xff08;Robots Exclusion Standard&#xff09;是网站所有者向网络爬虫&#xff08;包括搜索引擎和其他自动化工具&#xff09;传达其爬取意愿的一种方…

SYSTEM文件夹介绍(sys文件夹、deley文件夹、USART 文件夹、SysTick、printf函数、fputc函数、半主机模式)

参考 http://t.csdnimg.cn/P9H6x 一、sys文件夹介绍 在上述介绍的 sys 文件夹中&#xff0c;涉及了一些与系统控制、中断管理、低功耗模式、栈顶地址设置、系统时钟初始化以及缓存配置等相关的函数。以下是对每个功能的简要分析&#xff1a; 1.中断类函数&#xff1a; sys_n…

CCF20230901——坐标变换(其一)

CCF20230901——坐标变换&#xff08;其一&#xff09; #include<bits/stdc.h> using namespace std; int main() {int n,m,x[101],y[101],x1[101],y1[101];cin>>n>>m;for(int i0;i<n;i)cin>>x1[i]>>y1[i];for(int j0;j<m;j)cin>>x[…

uniapp 高德地图与百度地图精准定位,高德地图定位报错

目前我这边测试发现的问题 UNIAPP 获取定位的代码 在这里插入代码片 data的参数 data() {return {id: 0, // 使用 marker点击事件 需要填写idtitle: map,latitude: 39.909,longitude: 116.39742,covers: [{latitude: 39.909,longitude: 116.39742,width: 50,height: 50,iconPa…

负反馈系统中运放的相位裕度仿真、环路增益的stb仿真

这里没目录标题 一、引言二、巴克豪森判据、最坏情况下的相位裕度、相位裕度三、相位裕度与开环&#xff0c;环路&#xff0c;闭环增益的关系四、环路增益、闭环增益和相位的仿真4.1 运放为双入单出时4.1.1 系统的闭环增益4.1.2 stb仿真系统的环路增益和相位裕度&#xff08;环…

Python项目:数据可视化_下载数据【笔记】

源自《Python编程&#xff1a;从入门到实践》 作者&#xff1a; Eric Matthes 02 下载数据 2.1 sitka_weather_07-2021_simple.csv from pathlib import Path import matplotlib.pyplot as plt import csv from datetime import datetimepath Path(D:\CH16\sitka_weather_0…

python web自动化(Allure报告)

Allure详细安装请看之前的博客 1.Allure配置与⼊⻔ 运⾏⽤例&#xff0c;⽣成allure报告 pip install allure-pytest -i https://mirrors.aliyun.com/pypi/simple/ 运⾏⽤例&#xff0c;⽣成allure报告 # main.py import os import pytest if __name__ __m…

SpringBoot如何实现热部署

热部署 使用SpringBoot提供的DevTools实现热部署 原理&#xff1a;实时监控classpath下文件的变化&#xff08;即编译后的target目录&#xff09;&#xff0c;如果发生变化则自动重启 配置&#xff1a;添加DevTools的依赖即可&#xff08;需要开启IDEA的自动编译&#xff09…

ROS学习记录:用C++实现IMU航向锁定

前言 获取IMU数据的C节点 在了解了如何获取到IMU的姿态信息&#xff08;链接在上面&#xff09;后&#xff0c;接下来尝试实现让一个节点在订阅IMU数据的时候&#xff0c;还能发布运动控制指令&#xff0c;使机器人能对姿态变化做出反应&#xff0c;达到一个航向锁定的效果。 …

神奇动物在哪里,但导演是微软

大数据产业创新服务媒体 ——聚焦数据 改变商业 一说到计算机视觉&#xff0c;大多数人第一时间联想到的便是“人脸识别”、“自动驾驶“、道路检测”等跟我们日常生活息息相关的关键词。而在2024年的5月末&#xff0c;微软在GitHub上面上传了这样一个计算机视觉的项目&#x…

2024年华为OD机试真题-停车场车辆统计-C++-OD统一考试(C卷D卷)

题目描述: 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。 输入描述: 整型字符串数组cars[],其中1表示有车,0…

通过Python爬取公告内容

在网络时代&#xff0c;信息获取变得更加便捷。通过网络爬虫技术&#xff0c;我们可以从互联网上快速获取各种信息。本文将介绍如何使用 Python 爬虫工具从指定网站上获取公告内容&#xff0c;并提取其中的关键信息。 1. 简介 在本文中&#xff0c;我们将使用 Python 的 requ…

几个速度比较快的 Linux 开源镜像站及支持的资源列表

搜狐开源镜像站 https://mirrors.sohu.com/ File Name CPAN/ FreeBSD/ QpenBSD/ RockyL apache/ archlinux/ centos/ ceph/ cygwin/ debian/ debian–cd/ debian-security/ deepin/ deepin-cd/ docker-ce/ fedora/ fedora-epel/ gentoo/ lib/ mysql/ nginx/ opensuse/ php/ ubu…

C++笔试强训day32

目录 1.素数回文 2.活动安排 3.合唱团 1.素数回文 链接https://www.nowcoder.com/practice/d638855898fb4d22bc0ae9314fed956f?tpId290&tqId39945&ru/exam/oj 现将其转化为回文数&#xff08;这里用字符串存储比较方便转化&#xff09;&#xff0c;然后判断是否为…

Ubuntu安装IPOPT和Casadi

1.IPOPT安装 1.1安装所需功能包 sudo apt-get install cppad sudo apt-get install gcc g gfortran subversion patch wget1.2下载最新源代码3.14 https://www.coin-or.org/download/source/Ipopt/1.3解压进入IPOPT安装包&#xff0c;下载ASL git clone https://github.com/…