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,就像我们什么都没有传入一样。

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

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

相关文章

SQL 多变关联使用子查询去重

不去重状态 select a.*,b.recon_amt from free_settlement_first aleft join free_settlement_second b on a.settlement_first_id b.settlement_first_id 有2条数据出现了重复 使用子查询去重 select a.*,b.recon_amt from free_settlement_first aleft join free_settlem…

Vue 最新动态!!!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 当Vue 3.4在六个月前发布时,整个前端开发社区都为之振奋。这次更新不仅带来了许多新特性,还解决了许多开发过程中遇到的痛点。 然而,时间飞逝,随着我在项目中不断应用这些新特性,逐渐积累了很多宝贵的经验和心得。 今…

一篇学通Axios

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它提供了一种简单易用的方式来发送 HTTP 请求,并支持诸如请求和响应拦截、转换数据、取消请求以及自动转换 JSON 数据等功能。 Axios 名字的由来 Axios 的名字来源于希腊神话中的…

Linux操作系统入门(适用java软件开发)

1.什么是操作系统? 操作系统(Operating System,简称 OS)是一种系统软件,它管理和控制计算机硬件与软件资源,为用户和应用程序提供一个接口和环境来访问计算机系统的服务和功能。操作系统的主要目标是提供一个方便、有…

探索性数据分析:使用Python与Pandas库实现数据洞察

探索性数据分析:使用Python与Pandas库实现数据洞察 引言 在当今数据驱动的时代,数据分析已成为决策制定、策略规划和业务优化的关键环节。无论是商业智能、金融分析还是市场研究,数据分析都扮演着至关重要的角色。Pandas库作为Python生态系统…

微积分-导数8(线性近似和微分)

线性近似 我们已经看到,在切点附近,曲线与其切线非常接近。事实上,通过放大可微函数图上的某一点,我们注意到图形看起来越来越像它的切线(见图)。这一观察是找到函数近似值的方法的基础。 这个想法是&am…

monodepth代码与原理对照实现

先实现demomonodepth/monodepth_simple.py at master mrharicot/monodepth GitHub import os os.environ[TF_CPP_MIN_LOG_LEVEL]0 这行代码是为tensorflow设置环境变量TF_CPP_MIN_LOG_LEVEL,用来控制tensorflow c后端输出的日志级别。0就是输出所有级别的日志信息。包括(调…

vue2学习笔记3 - 开发环境知识补充:live server简介

学习笔记1搭建开发环境中,在vs code里安装了live server插件,后续多次使用open with live server来打开浏览器,展示代码运行效果。本着知其然也要知其所以然的态度,稍稍了解了一下Live server。 什么是Live Server Live Server是…

滞后序列分析案例详解

一个半小时 超出30分钟 日期:2024-07-13 19:14:33 回放 摘要 Python在行为分析中的应用 主要讲述了如何使用Python处理序列数据,以及如何结合定性分析和定量分析来全面分析课程内容。讲者提到了一种叫做分层法的分类方法,该方法使用了布鲁…

ctfshow-web入门-php特性(web96-web99)

目录 1、web96 2、web97 3、web98 4、web99 1、web96 试了下通配、转义、拼接、大小写都不行 这里使用绝对路径或者当前路径绕过: ?u./flag.php ?u/var/www/html/flag.php 还可以使用 php 伪协议: ?uphp://filter/resourceflag.php 2、web97 关…

数据结构(Java):力扣Stack集合OJ题

1、括号匹配问题 . - 力扣(LeetCode) 1.1 思路分析 根据栈的先进后出原则,我们可以这样解决问题: 遍历字符串,遇见左括号就将左括号push入栈;遇见右括号就pop出栈,将出栈的元素和该右括号比较…

pyparsing开启调试

在要匹配的表达后添加set_debug

【密码学】实现消息认证或数字签名的几种方式

消息认证的目的是验证消息的完整性和确认消息的来源。数字签名的目的是不仅验证消息的完整性和来源,还提供了不可否认性。此外,数字签名还可以验证消息的创建时间,防止重放攻击。那么具体有哪些实现的方式呢? 一、仅提供消息认证…

文件内容查阅

cat concatenate files and print on the standard output Linux中一个最简单的且最常用的命令是cat命令。其功能是在终端设备上显示文件内容。 cat命令-n选项用于显示行号。 tac concatenate and print files in reverse tac命令的功能是用于反向显示文件内容,即…

计算机网络复习笔记【面向考纲整理】

计算机网络复习笔记 一、计算机网络体系结构(一)计算机网络的概念、分类、组成与功能1.计算机网络的概念、组成与功能1.1计算机网络的概念1.2计算机网络的组成1.3计算机网络的功能 2.计算机网络的分类3.计算机网络的标准化工作及相关知识 (二…

MT6816磁编码IC在工控机器人中的应用

在现代工业自动化领域,高精度的位置检测和控制技术对于机器人系统的稳定运行至关重要。MT6816磁编码IC作为一款先进的磁传感器解决方案,以其卓越的性能和稳定性,在工控机器人中得到了广泛的应用。本文将详细探讨MT6816磁编码IC在工控机器人中…

azure学习在日本IT工作的重要性

在日本数字化转型的浪潮中,微软Azure已经成为众多企业的首选云平台。作为全球第二大云服务提供商,Azure在日本市场的重要性与日俱增。本文将探讨为什么学习Azure对日本IT专业人士至关重要,以及如何通过lalapodo云原生技术的培训课程,快速掌握这一关键技能。 Azure在日本的战略地…

【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块

文章目录 前言一、导航功能实现a.效果图:b.后端代码c.前端代码 二、轮播图功能实现a.效果图b.后端代码c.前端代码 三、标签栏功能实现a.效果图b.后端代码c.前端代码 四、侧边栏功能实现1.整体效果图2.侧边栏功能实现a.效果图b.后端代码c.前端代码 3.侧边栏展示分类及…

element UI时间组件两种使用方式

加油&#xff0c;新时代打工&#xff01; 组件官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果图&#xff0c;如下&#xff1a; 第一种实现方式 <div class"app-container"><el-formref"submitForm":model&q…

探索 Prompt 的世界:让你的 AI 更智能

探索 Prompt 的世界&#xff1a;让你的 AI 更智能 引言什么是 Prompt&#xff1f;Prompt 的重要性如何编写有效的 Prompt1. 清晰明确2. 包含关键细节3. 提供上下文 实践中的 Prompt 技巧1. 多次迭代2. 实验不同风格3. 结合实际应用 总结 引言 随着人工智能&#xff08;AI&…