BUUCTF靶场[Web] [极客大挑战 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生赛]Include
[web][极客大挑战 2019]Havefun1
考点:前端、GET传参
点开网址,发现是这个界面
点击界面没有回显,老规矩查看源代码,看到以下代码
代码主要意思为:
用get传参,将所传的参数给cat,如果cat=dog,则会输出flag
我们则GET传参将dog赋予cat如图:
点击则页面回显出flag
[web][HCTF 2018]WarmUp1
考点:代码审计、文件包含
访问网站只有一张图片
老规矩,查看源码
源码提示由一个子域,还被注释掉了,将其访问
是一段php代码
<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){//验证白名单$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
//定义了一个名为emmm的类,在该类中有一个静态方法checkFile用于检查要包含的文件是否在白名单中,白名单是一个关联数组$whitelist,其中包含了允许包含的文件的键值对。在代码中,允许包含的文件有"source"=>"source.php"和"hint"=>"hint.php"。if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}//checkFile方法首先检查传入的$page参数传进来的file变量不是非空已设置或者不是字符串,会输出“you can't see it”,并返回falseif (in_array($page, $whitelist)) {return true;}。//如果传入的file参数在whitelist里,回返回真,这里就知道,file参数的值该是上面两个之一$_page = mb_substr(//提取字符串$page,0,mb_strpos($page . '?', '?')//括号里"."是 PHP 中的字符串连接运算符,是连接两个字符串//mb_strpos函数,查找第二个参数在第一个参数中首次出现的位置//这里知道第三个参数length=传入字符串长度(因为第一个位置是0//但是这里如果加入?就会起到截断的作用);if (in_array($_page, $whitelist)) {return true;//如果变量_page(传入参数被截过的部分)在白名单里,可以返回true}$_page = urldecode($page);//url解码,按规则解码已编码的url字符串,所以构造payload的时候可以考虑用url编码的方式绕过$_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中存储的值if (! empty($_REQUEST['file'])//传入参数不能为空&& is_string($_REQUEST['file'])//检查是否是字符串&& emmm::checkFile($_REQUEST['file'])//调用emmm类中的checkFile函数) { //所以,不进入else分支,可以调用include函数读取传入文件。这里要满足if中的条件为真include $_REQUEST['file']; //include文件读取函数是直接读取fileexit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";} //检查$_REQUEST['file']是否存在且为字符串类型,并调用emmm::checkFile方法进行检查。如果返回值为true,则通过include语句包含$_REQUEST['file']指定的文件并终止程序执行,否则输出一个图片标签。
?>
substr()函数、strpos()i函数、in_array()函数进行简义:
string substr ( string
$string
, int$start
[, int$length
] )返回字符串
string
由start
和length
参数指定的子字符串。输入字符串,如果
start
是非负数,返回的字符串将从string
的start
位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”,位置 2 的字符串是 “c” 等等。如果
start
是负数,返回的字符串将从string
结尾处向前数第start
个字符开始。如果
string
的长度小于或等于start
,将返回FALSE
。$rest = substr("abcdef", -1); // 返回 "f"
$rest = substr("abcdef", 0, -1); // 返回 "abcde"
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", 4, -4); // 返回 ""
$rest = substr("abcdef", -3, -1); // 返回 "de"echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
mixed strpos ( string
$haystackx
,mixed$needle
[, int$offset
= 0 ] )返回
needle
在haystack
中首次出现的数字位置。同时注意字符串位置是从0开始,而不是从1开始的(没有提供offset时)。
offset
如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计
如果没找到 needle,将返回
FALSE(因此应该用===来测试返回的值)
。 <?php $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme);// 注意这里使用的是 ===。简单的 == 不能像我们期待的那样工作, // 因为 'a' 是第 0 位置上的(第一个)字符。 if ($pos === false) {echo "The string '$findme' was not found in the string '$mystring'"; } else {echo "The string '$findme' was found in the string '$mystring'";echo " and exists at position $pos"; } ?><?php // 忽视位置偏移量之前的字符进行查找 $newstring = 'abcdef abcdef'; $pos = strpos($newstring, 'a', 1); // $pos = 7, 不是 0 ?>
- stripos() - 查找字符串首次出现的位置(不区分大小写)
- strrpos() - 查找字符串- 计算指定字符串在目标字符串中最后一次出现的位置
- strripos() - 查找字符串- 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
in_array() 函数搜索数组中是否存在指定的值。
in_array(search,array,type)
参数 描述 search 必需。规定要在数组搜索的值。 array 必需。规定要搜索的数组。 type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。 说明
如果给定的值 search 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
注释:如果 search 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。
访问 hint.php 发现 flag 不在此页,显示在ffffllllaaaagggg目录上
在source.php页面下进行的传参操作,目的是利用include函数将flag文件包含出来,不要被这里的白名单混淆奥
添加"/"让 hint.php?变成一个目录,但是这个目录并不存在,Include 函数就会取执行后面的,跳转到上层目录,
传入checkFile函数要经历 第一次白名单验证 一次?过滤后他就是hint.php 再进行一次白名单验证 返回为真 则达成条件进行包含得到flag
tips:include函数有这么一个神奇的功能:以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。
(这里让变量_page 变成白名单里的文件名就可以返回 true,但是 flag 并不在白名单的文件里,所以要利用 Include 函数去跳转到别的目录(flag 是在 ffffllllaaaagggg 里,但是不知道这个长名字的文件在哪)
(因为我们当前的source.php一般是在html目录下,往上是www,var,然后到根目录,flag一般就放在根目录下面,这里还有一个hint.php?/或者source.php?/,因此需要返回四层才能到根目录,其实文件名也提示了我们要使用四层目录)
构造 payload三种方法:
source.php?file=hint.php?/../../../../ffffllllaaaagggg
或者:
source.php?file=source.php?/../../../../ffffllllaaaagggg
或者:
hint.php?../…/…/…/…/ffffllllaaaagggg 想象他传入checkFile函数要经历 第一次白名单验证 一次?过滤后就是hint.php 再进行一次白名单验证 返回为真 则达成条件进行包含得到flag
index.php?file=hint.php?/../../../../ffffllllaaaagggg
正确回显,得到flag:
[web][ACTF2020 新生赛]Include
考点:文件包含漏洞
打开网址回显这个页面
点击tips,回显这个页面,但是看到网址栏由?file=flag.php和题目include,是个文件包含题
用伪协议base64编码进行读取:
?file=php://filter/read=convert.base64-encode/resource=flag.php
读出来的编码进行base64解码:得到flag
这题好像只能用base64进行读取,我试了三种就base64能正常回显,但是不妨碍我对伪协议的三种方法的普及:
三种编码伪协议:
① 以Base64编码的方法读取:
?file=php://filter/read=convert.base64-encode/resource=/etc/passwd
② 以ROT13加密的方法读取:
?file=php://filter/read=string.rot13/resource=/etc/passwd
③ 以iconv编码转换的方法读取:
?file=php://filter/convert.iconv.utf-8.utf-7/resource=/etc/passwd
相关文章:

BUUCTF靶场[Web] [极客大挑战 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生赛]Include
[web][极客大挑战 2019]Havefun1 考点:前端、GET传参 点开网址,发现是这个界面 点击界面没有回显,老规矩查看源代码,看到以下代码 代码主要意思为: 用get传参,将所传的参数给cat,如果catdog…...

现代信号处理11_Spectral Analysis谱分析(CSDN_20240526)
谱分析与傅里叶变换 对于一个信号,一方面可以从时域上对其进行分析,另一方面也可以从频域上对其进行认识,对信号进行频谱分析能够帮助我们了解能量在频域上的分布。 确定性信号的能量通常是有限的,而平稳随机信号的能量通常是无限…...

C#开发上位机应用:基础与实践
C#是一种流行的面向对象编程语言,常用于Windows应用程序的开发。上位机应用是一种用于监控和控制设备或系统的应用程序,通常与下位机(如传感器、执行器等)进行通信。在本文中,我们将介绍C#开发上位机应用的基础知识和实…...

话术巧妙分隔沟通效果更佳看看这个小技巧
客服回复客户咨询,如果遇到比较复杂的问题,经常会有大段的文字回复,用聊天宝的分段符功能,在需要分段的地方点击右上角的“插入分隔符”,就可以在指定位置分段,实现多段发送的目的。 前言 客服回复客户咨询…...
【Spring】设计模式(GOF)
Spring Framework在其架构和实现中广泛使用了多种GOF(Gang of Four)设计模式。这些设计模式帮助Spring解决了许多常见的软件开发问题,提高了代码的可重用性、可维护性和可扩展性。 1、工厂模式(Factory Pattern) 1.1简…...
php抖音详情和关键词搜索api
抖音详情和关键词搜索的 API 可以通过抖音提供的开放平台来获取。以下是使用 PHP 实现的示例代码: 获取抖音视频详情 API: 获取Key和secret请移步 <?php$accessToken YOUR_ACCESS_TOKEN; // 替换为自己的 access_token $itemId YOUR_ITEM_ID; /…...
SOCKS 代理 和 HTTP 代理
SOCKS 代理 和 HTTP 代理 的区别 SOCKS 代理 和 HTTP 代理 都是代理服务器,它们充当客户端和目标服务器之间的中介,但它们的工作方式和应用场景有所不同。 1. SOCKS 代理: 工作原理: SOCKS 代理是一种更底层的代理,…...

【Linux】自己实现一个bash进程
bash就是命令行解释器,就是Linux操作系统让我们看到的,与用户进行交互的一种外壳(shell),当然了bash也是一个进程,它有时候就是通过创建子进程来执行我们输入的命令的。这无疑就离不开我们上篇博客所说的进…...

记录深度学习GPU配置,下载CUDA与cuDnn
目标下载: cuda 11.0.1_451.22 win10.exe cudnn-11.0-windows-x64-v8.0.2.39.zip cuda历史版本网址 CUDA Toolkit Archive | NVIDIA Developer 自己下载过11.0.1版本 点击下载local版本,本地安装,有2个多GB,很大,我不喜欢network版本,容易掉线 cuDnn https://developer.nvi…...

Word将表格调成合适的大小
请等待内容完善...
2024HBCPC:C Goose Goose Duck
题目描述 Iris 有 n n n 个喜欢玩鹅鸭杀的朋友,编号为 1 ∼ n 1∼n 1∼n。 假期的时候,大家经常会在群里问有没有人玩鹅鸭杀,并且报出现在已经参与的人数。 但是每个人对于当前是否加入游戏都有自己的想法。 具体的来说,对于第…...

Llama 3 模型家族构建安全可信赖企业级AI应用之使用 Llama Guard 保护大模型对话 (八)
LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…...
《一地霜白》读书笔记
1.3.6 街灯明灭,勾缀成行,为了生者与死者 “很多年过去了。回头看,沿着一排暗中的街灯,两三盏灭了,郁闷中有意外的欣喜:街灯明灭,勾缀成行,为了生者与死者。” 童年、青少年在人的…...
在Java中实现多线程之间的通信
一、技术难点 在Java中实现多线程之间的通信是一个复杂但重要的任务,它涉及到线程同步、数据共享和线程间协作等多个方面。以下是实现多线程通信时可能遇到的一些技术难点: 线程同步:多线程环境下,多个线程可能同时访问和修改共享…...
Python中的json.dump与json.dumps对比
Python中的json.dump与json.dumps对比 json.dumps()json.dump() json.dumps() dumps 是 “dump string” 的缩写。它将Python对象转换(序列化)为JSON格式的字符串。数据被转换为一个字符串,并且这个字符串可以直接被写入文件、发送到网络&am…...

【从零开始学习RabbitMQ | 第二篇】如何确保MQ的可靠性和消费者可靠性
目录 前言: MQ可靠性: 数据持久化: Lazy Queue: 消费者可靠性: 消费者确认机制: 消费失败处理: MQ保证幂等性: 方法一: 总结: 前言: …...

常用批处理命令及批处理文件编写技巧
一常用批处理命令 1.查看命令用法:命令 /? //如:cd /? 2.切换盘符目录:cd /d D:\test 或直接输入 d: //进入上次d盘所在的目录 3.切换目录:cd test 4.清屏:cls 5.“arp -a” //它会列出当前设备缓存中的所有…...
android NetworkMonitor记录
是否能上网的状态 上网url地址的设置: NetworkMonitor.java makeCaptivePortalHttpsUrls config_captive_portal_https_urls DEFAULT_CAPTIVE_PORTAL_HTTPS_URLS http准备监测 isCaptivePortal sendHttpAndHttpsParallelWithFallbackProbes httpsProbe.start();…...

OSPF优化——OSPF减少LSA更新量2
二、特殊区域——优化非骨干区域的LSA数量 不是骨干区域、不能存在虚链路 1、不能存在 ASBR 1)末梢区域 该区域将拒绝 4、5LSA的进人,同时由该区域连接骨干0区域的ABR 向该区域,发布一条3类的缺省路由; 该区域内每台路由器均需配置…...
【AMS】Android 8.0+ 绕开启动后台Service限制
一、背景 应客户要求,需要在开机时,拉起应用A。但因为开机时,同时被拉起的应用过多,导致Launcher在开机那一刻较为卡顿。为解决这一问题,采取了延迟拉起的做法。在开机后,延迟一定时间,由系统服务,拉起应用A。 于是乎,就出现这么个报错: Not allowed to start ser…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...