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毫安的一个电流,就可以使它发光,那么电流越大,它的发光也就越强,但是电流不能过大,过大会把这个发光二极管给烧…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...