ctfshow-web入门-php特性(web104-web108)
目录
1、web104
2、web105
3、web106
4、web107
5、web108
1、web104

需要传入的 v1 和 v2 进行 sha1 加密后相等。
解法1:
这里都没有判断 v1 和 v2 是否相等,我们直接传入同样的内容加密后肯定也一样。
?v2=1
post:
v1=1

拿到 flag:ctfshow{bd4eea6b-872d-462c-b8f2-20f48d3ee652}
解法2:
对于 php 强比较和弱比较:md5(),sha1() 函数无法处理数组,如果传入的为数组,会返回 NULL ,两个数组经过加密后得到的都是 NULL ,也就是相等的。
?v2[]=1
post:
v1[]=2

解法3:
对于某些特殊的字符串加密后得到的密文以 0e 开头,PHP 会当作科学计数法来处理,也就是 0 的 n 次方,得到的值比较的时候都相同。
下面是常见的加密后密文以 0e 开头的字符串:
md5:240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361sha1:10932435112: 0e07766915004133176347055865026311692244
aaroZmOk: 0e66507019969427134894567494305185566735
aaK1STfY: 0e76658526655756207688271159624026011393
aaO8zKZF: 0e89257456677279068558073954252716165668
aa3OFF9m: 0e36977786278517984959260394024281014729
0e1290633704: 0e19985187802402577070739524195726831799
?v2=aaroZmOk
post:
v1=aa3OFF9m

2、web105

foreach 在 PHP 中用于遍历数组或对象:
key 和 value 分别表示数组中的键和对应的值。
foreach ($array as $value) {// 对 $value 进行操作
}foreach ($array as $key => $value) {// 对 $key 和 $value 进行操作
}
一眼看到使用了两个 $,直接将用户输入用作变量名,可能导致变量覆盖问题。
$$key=$$value;
代码中共有三个变量:$error,$flag,$suces
foreach($_GET as $key => $value){if($key==='error'){die("what are you doing?!");}
get 请求的 key(参数)不能是 error
foreach($_POST as $key => $value){if($value==='flag'){die("what are you doing?!");}
post 请求的 value(值)不能是 flag
(1)通过 die($error); 输出 flag,可以将 $error 覆盖为 $flag,payload:
?suces=flag
post: error=suces
get 传入 suces=flag,请求参数不是 error,因此不会触发第一个 die 函数;
接下来执行 $$key=$$value; 即 $suces=$flag,也就是将 $flag 的内容赋值给 $suces;
post 传入 error=suces,value 是 suces,不是 flag,因此也不会触发第二个 die 函数;
之后执行 $$key=$$value; 即 $error=$suces,也就是将 $suces 的内容赋值给 $error;
if(!($_POST['flag']==$flag)){die($error);
}
最后检查是否 post 提交了 flag 并且内容就是 $flag,显然是没有的,前面还有一个 ! ,因此 if 语句成立,执行第三个 die 函数,输出变量 $error 的内容,即我们 flag 的内容。
验证:

拿到 flag:ctfshow{d346b9f7-d63f-492c-b573-c7ed4c7394e4}
其实这里的这个 $suces 只是一个中间者,我们只要不使用 error,其他任何的参数名都是可以的。
比如:
?1=flag
error=1

(2)通过 die($suces); 输出 flag,将 $suces 覆盖为 $flag,payload:
?suces=flag&flag=
或者
?suces=flag
post:flag=
一来就先将 $flag 的内容赋给 $suces,之后将 $flag 赋为空(null),使得 $_POST['flag']==$flag 成立,执行 echo "your are good".$flag."\n"; 和 die($suces); 进而输出 $suces,即 flag 的内容。

3、web106

新增:
$v1!=$v2
采用数组绕过:
?v2[]=1
post:v1[]=2

拿到 flag:ctfshow{a0d7580e-60f6-4a19-bef2-af27d8c2d017}
4、web107

parse_str() 函数:把查询字符串解析到变量中。
用法:parse_str(string,array)
| 参数 | 描述 |
|---|---|
| string | 必需。规定要解析的字符串。 |
| array | 可选。规定存储变量的数组名称。该参数指示变量存储到数组中。 |
关于题目代码的详细解释:
parse_str($v1,$v2);
parse_str 函数将字符串 $v1 解析为变量并存储到数组 $v2 中。
$v1 是一个包含查询字符串的变量,例如:"flag=123&name=myon"。
解析后的结果将存储在数组 $v2 中,例如:$v2 将包含 ['flag' => '123', 'name' => 'myon']。
if($v2['flag']==md5($v3)){echo $flag;}
$v2['flag'] 是从解析后的数组 $v2 中获取的 flag 参数值,检查 $v2['flag'] 是否等于 md5($v3) 即 v3 经过 md5 加密后的值,等于则输出 flag。
理解题目意思后,这里的 payload 就有很多,只要符合要求都可以:
?v3=123
post 传入:
v1=flag=202cb962ac59075b964b07152d234b70
其中 202cb962ac59075b964b07152d234b70 是 123 的 md5 加密值:


拿到 flag:ctfshow{b91751db-f7b7-40ae-b920-fd2e3edc8964}
5、web108

代码审计:
ereg ("^[a-zA-Z]+$", $_GET['c'])
使用 ereg 函数检查 $_GET['c'] 是否只包含大小写字母,不满足直接 die。
if(intval(strrev($_GET['c']))==0x36d){echo $flag;
}
通过 strrev 函数将 $_GET['c'] 反转,使用 intval 将反转后的字符串转换为整数,检查该整数是否等于十六进制的 0x36d(十进制的 877),如果相等,则输出 $flag 的内容。
其中 ereg 函数存在 NULL 截断漏洞,我们可以使用 %00 进行截断,payload:
?c=a%00778
这样正则就只会匹配 %00 之前的内容,即匹配到 a,符合要求,函数返回 true,if 语句不成立,跳过 die 函数,payload 经 strrev 函数反转后变为 877%00a,因为是弱比较,会存在自动类型转换,经过 intval 转为整数 877,比较成立,输出 flag。

拿到 flag:ctfshow{9fb901bb-8855-4a17-b4bc-a587d28a3f15}
为什么 %00 前面还要有一个 a,而不能是空的呢?

由于截断前的内容为空,ereg 函数还是会返回 false,就像我们什么都没有传入一样。
相关文章:
ctfshow-web入门-php特性(web104-web108)
目录 1、web104 2、web105 3、web106 4、web107 5、web108 1、web104 需要传入的 v1 和 v2 进行 sha1 加密后相等。 解法1: 这里都没有判断 v1 和 v2 是否相等,我们直接传入同样的内容加密后肯定也一样。 ?v21 post: v11 拿到 flag…...
python之集合相关
1.概况 是无序的数据结构 集合内的个体统称为元素,每个元素不可重复 所有元素被放在大括号里面,元素之间通过逗号分隔 集合对象是一组无序的可哈希的值,集合元素是不可变的数据类型 2.定义集合 使用大括号语法 基本语法: {元素1&a…...
【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十一)-无人机服务可用性用例需求
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...
【Linux 配置静态IP】Ubuntu20.04
最近学习网络编程,为了方便学习需要Ubuntu配置静态IP,网上看了好多贴子跟着试了下可以实现,但重启虚拟机后有时就无法连接,总之各种各样问题;相关的配置方法也比较凌乱,有用netplan 或者 ifupdown ,笔者简单…...
C++入门基础(2)
C入门基础(2) 1.缺省函数2.函数重载3.引用3.1 引用的概念和定义3.2 引用的特性3.3 引用的使用3.3.1引用的特性 4 .const引用5. 指针和引用的关系6.inline 1.缺省函数 • 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时…...
芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略
♥️作者:小宋1021 🤵♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油!…...
Java程序打印日志
一、maven依赖 POM文件中添加以下依赖,maven依赖的jar包版本可以在maven central repository 查看 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version><…...
深入理解C++ 中的可调⽤对象
C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针获取函数地址声明并调用函数指针 lambda表达式语法定义捕获单个捕获符 std::function()协程 可调用对象用处⼴泛: ⽐如在使⽤⼀些…...
汇编程序调用 C 程序详解
文章目录 1. ATPCS 规则 2. 汇编和C程序传递参数 汇编程序向 C 程序的函数传递参数 C 程序返回结果给汇编程序 代码示例 3. C 函数使用栈 4. C 语言中读写寄存器 在嵌入式开发中,经常需要在 C 程序和 ARM 汇编程序之间进行相互调用。为了保证这些调用的正确性…...
代码随想三刷图论篇1
代码随想三刷图论篇1 98. 所有可达路径题目代码99. 岛屿数量题目代码100. 岛屿的最大面积题目代码101. 孤岛的总面积题目代码102. 沉没孤岛题目代码103. 水流问题题目代码98. 所有可达路径 题目 链接 代码 import java.util.*;class Main{public static void main(String […...
Windows 快捷键汇总
Windows 快捷键汇总 前言进阶快捷键【最好用】Chrome 常用快捷键【跟 Windows 快捷键不搭杆,但常用】基础快捷键扩展快捷键 前言 Coder 苦鼠标久已,整理汇总 Windows 快捷键包括一些常用的快捷键,比如“浏览器”相关的快捷键内容分为四小节&…...
微服务有哪些组件?
1.注册中心:用于服务的注册和发现,管理微服务的地址 Nacos,Eureka 2.配置中心:集中管理微服务的配置中心 Nacos config 3.远程调用:用于不同微服务间的通信和协作 RESTful API(RestTemplate࿰…...
camera-qsc-crosstalk校准数据XTALK回写
问题背景 手机越做越紧凑,需要模组和芯片尺寸越做越小,在尺寸一定的基础上,高像素和大像素,对于手机摄像头来说,一直是一对矛盾的存在。 高像素:带来高分辨率画质大像素:带来暗态下高感光度和…...
混合贪心算法求解地铁线路调度
一、问题描述 城市轨道交通的繁荣发展,带来了车辆资源需求的日益增加。如何兼顾运营服务水平和运营成本,以最少的车底优质地完成运输任务成为一大严峻问题。本题在后续的描述中将由多辆动车和拖车组合而成的车组称为车底。在日常的运营组织中࿰…...
vue项目:关闭页面,删除本地登录信息
vue项目:关闭页面,删除本地登录信息 代码 代码 import { removeToken } from /utils/auth //区分关闭和刷新页面,关闭时退出登录 window.onload ()>{if(!window.sessionStorage["tempFlag"]){removeToken();location.reload()…...
获奖案例回顾|基于卫星遥感和无人机的水稻全流程风险减量项目
引言 在现代农业保险领域,技术创新是推动行业进步的关键。珈和科技与太平财险的合作,旨在利用先进的卫星遥感和无人机技术,解决传统农业保险面临的诸多挑战,从而提升保险效率和服务质量。本次分享的项目案例获得了《金融电子化》…...
全栈 Discord 克隆:Next.js 13、React、Socket.io、Prisma、Tailwind、MySQL笔记(一)
前言 阅读本文你需要有 Next.js 基础 React 基础 Prisma 基础 tailwind 基础 MySql基础 准备工作 打开网站 https://ui.shadcn.com/docs 这不是一个组件库。它是可重用组件的集合,您可以将其复制并粘贴到应用中。 打开installation 选择Next.js 也就是此页面…...
【Unity】制作简易计时器
一、创建计时器相关的变量 我们需要创建三个变量,分别是:计时时长、计时剩余时长、是否处于计时状态。 public float duration;//计时时长 public float remain; //计时剩余时长 public bool isCount; //是否处于计时状态 二、初始化变量 我们可以直…...
TDesign组件库日常应用的一些注意事项
【前言】Element(饿了么开源组件库)在国内使用的普及率和覆盖率高于TDesign-vue(腾讯开源组件库),这也导致日常开发遇到组件使用上的疑惑时,网上几乎搜索不到其文章解决方案,只能深挖官方文档或…...
51单片机7(点亮第一个LED)
一、LED简介 1、LED,它是一个发光二极管,它具有单向导电性,那么通过5毫安的一个电流,就可以使它发光,那么电流越大,它的发光也就越强,但是电流不能过大,过大会把这个发光二极管给烧…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
