ctfshow(94,95)--PHP特性--strpos函数
建议先学习intval函数相关内容
Web94
源代码:
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){$num = $_GET['num'];if($num==="4476"){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die("no no no!");}if(!strpos($num, "0")){die("no no no!");}if(intval($num,0)===4476){echo $flag;}
}
审计
共四处条件判断:
第一处,严格比较$num==="4476"
,返回值为false则进入下一处。
第二处,preg_match("/[a-z]/i", $num)
,返回值为0则进入下一处。
第三处,!strpos($num, "0")
,strpos函数返回值不为false则进入下一处.
int|false strpos(str $str , str $find)
strpos函数,第一个参数为字符串,第二个参数为要从字符串中寻找的字符
当没有匹配到目标字符时,返回值为bool型的false
当匹配到目标字符时,返回值目标字符第一次出现的索引位置,int类型
第四处,intval($num,0)===4476
,返回值为true则获得flag。
思路
第一处,可以使用八进制、十六进制、科学计数法绕过
?num=4476e1
?num=010574
?num=0x117c
第二处,过滤了字母,因此十六进制、科学计数法绕过被过滤。
第三次,strpos($num, "0")
在num中搜索0,搜索到则返回索引位置。
?num=010574'0'在num中第一次出现的索引位置为0,因此strpos函数的返回值为0
由于函数前有!,所以条件判断最后的返回值为true,绕过失败
以上三种方法全部绕过失败。
这里学习新的绕过方法。
?num=+010574 正数符号绕过
?num=4476.0 小数绕过
正数符号绕过
在数字前面加+号,不影响数字的值。
?num=+010574
显然绕过了第一处和第二处条件判断。
而到第三处判断,由于第一个0的索引位置变成了1,索引strpos($num, "0")
的值变成了1,那么!strpos($num, "0")
的值就变成了false,成功绕过。
第四处返回值显然为true,得到flag。
小数绕过
?num=4476.0
显然绕过了第一处和第二处条件判断。
而到第三处判断,由于第一个0的索引位置变成了5,索引strpos($num, "0")
的值变成了5,那么!strpos($num, "0")
的值就变成了false,成功绕过。
第四处返回值显然为true,得到flag。
这里补充一个知识点,intval函数将小数转换为整数时,只保留整数部分,小数点及其之后的数字是直接被去掉的。
Web95
源代码:
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){$num = $_GET['num'];if($num==4476){die("no no no!");}if(preg_match("/[a-z]|\./i", $num)){die("no no no!!");}if(!strpos($num, "0")){die("no no no!!!");}if(intval($num,0)===4476){echo $flag;}
}
审计
第一处条件判断换成了弱类型比较。
第二次多过滤了点.
其他两处与94题相同。
思路
科学计数法、小数绕过不能绕过弱类型比较。
使用八进制和十六进制绕过第一处弱类型比较。
?num=010574
?num=0x117c
第二处过滤了字母,不能使用十六进制绕过。
第三处!strpos($num, "0")
,正常使用八进制绕过返回值为true,绕过失败。在八进制前加正数符号+,成功绕过。
?num=+010574
第四处返回值显然为true,得到flag.
相关文章:

ctfshow(94,95)--PHP特性--strpos函数
建议先学习intval函数相关内容 Web94 源代码: include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){$num $_GET[num];if($num"4476"){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die(&qu…...

C++ --- 多线程的使用
目录 一.什么是线程? 线程的特点: 线程的组成: 二.什么是进程? 进程的特点: 进程的组成: 三.线程与进程的关系: 四.C的Thread方法的使用: 1.创建线程: 2.join(…...

百度笔试(10.29)
判断s字符串是否可以通过添加某些字符变成t字符串,s是否是t的子序列 s input() n int(input()) st set() res [] for idx in range(n):t input()if t in st or len(t) < len(s):continuest.add(t)i,j 0,0while i < len(s) and j < len(t):if s[i] …...

数据库版本更新后,如何迁移数据?
数据库版本更新后迁移数据是一个需要谨慎处理的过程。以下是一般步骤和最佳实践: 1. **备份数据**: 在进行任何迁移之前,确保对现有数据库进行完整备份。这可以是物理备份(如数据库文件的拷贝)或逻辑备份ÿ…...

Chrome与火狐的安全功能全面评估
在当今数字化时代,网络安全已成为用户最为关注的问题之一。作为两款广受欢迎的浏览器,Chrome和火狐(Firefox)都提供了多种安全功能来保护用户的在线隐私和数据安全。本文将全面评估这两款浏览器的安全功能,帮助用户更好…...

微服务设计模式 - 重试模式(Retry Pattern)
微服务设计模式 - 重试模式(Retry Pattern) 定义 重试模式(Retry Pattern)是一种微服务中的设计模式,用于在临时性失败(如网络故障或暂时不可用的服务)发生时,自动重新尝试请求&…...

DNS配置
1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器,对主dns服务器进行数据备份。 正反向解析 [rootlocalhost ~]# vim /etc/named.conf options {listen-on port 53 { 192.168.111.130; };directory "/var/named&quo…...

【Linux指令】---获取进程的PID
获取进程的PID getpid()函数...

在centos中安装cmake
安装依赖工具: sudo yum install -y epel-release sudo yum groupinstall -y "Development Tools" sudo yum install -y wget wget 下载 CMake 3.24 的压缩包: wget https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-x86_64.tar.gz …...

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法
一、项目背景 客户新系统上线,因为行业网络安全要求,需要做等保测评, 通过第三方漏扫工具扫描系统,漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞,具体结果如下: 1、ZooKeeper 未授权访问【…...

Docker Compose一键部署Spring Boot + Vue项目
目录 前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) …...

【maven】idea执行了maven的install命令给本地安装项目依赖包 安装后删除
目录 事件起因环境和工具操作过程解决办法1、找到对应的目录下的文件,手动去删除,比如我的依赖库的路径是D:\qc_code\apache-maven-3.8.2\repository 我只需要找到这个目录下对应的依赖包进行手动删除即可(不推荐,强行删除文件夹文…...

Android中的Handle底层原理
先上结论: 一个小小的Handle,就能看出你对Android底层源码理解的深浅。 老规矩,如果你能看懂我上面画的这张草图,这篇文章你可以直接跳过! 开干! 1、先对Handle在Android系统中是如何发挥作用的做一个小结: 1)每一个线程,包括UI主线程,有一个ThreadLocalMap变量:…...

最简单方式SSH连接局域网中另一台电脑的WSL2
1、首先确认一下WSL2中的SSH服务是否开启: 先安装更新一下,再安装一下ssh服务模块,这里很多人都每安装过。 sudo apt update sudo apt upgrade sudo apt install openssh-server 2、配置SSH服务器: 打开配置文件,这…...

热点聚焦:AI在医疗保健领域的深度渗透与变革
内容概要 随着人工智能技术的不断进步,我们正在见证一个充满奇迹的转变,尤其是在医疗保健领域。这种转变不仅仅涉及到提高效率,更在于重新定义我们对疾病诊断和治疗方案的理解。通过智能算法,AI能够在早期识别潜在的健康问题&…...

模板方法模式:定义算法框架的设计模式
1. 引言 在软件开发中,算法的实现通常是可变的,但其基本步骤往往是相对固定的。模板方法模式(Template Method Pattern)正是为了解决这一问题而设计的,它通过定义一个操作中的算法框架,将一些步骤的实现延…...

[Redis] Redis事务
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...

编译原理第一次实验报告
源代码及附件:编译原理实验一源程序及附件资源-CSDN文库实验题目 实验要求 实验设计 前两部分指出了实验的宏观把控,为了具体实施实验,我们需要预先为实验做出如下设计: 本次实验我选取了C语言的一个子集进行设计词法分析器&…...

uniapp的video视频属性打包app后层级过高
问题:在使用uniapp开发APP时,使用video标签显示视频发现H5可以正常展示,但是打包到APP后,它的层级过高,把底部导航都盖住了。 官网说明:uni-app官网 官网给了cover-view组件或plus.nativeObj.view、subNVue…...

问:Redis为什么这么快?
Redis,全称Remote Dictionary Server,是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的使用方式,在现代互联网应用中扮演着重要角色。本文将探讨Redis之所以快的原因,包括其数据结构、内存管理、IO多路…...

环信鸿蒙IM SDK实现附件消息发送与下载
环信HarmonyOS IM SDK 正式版已经发布,该版本全面覆盖即时通讯(IM)的核心功能,为用户提供了完整的IM全功能体验,同时支持从Android APK到 NEXT 的数据迁移,更好地满足企业在不同业务场景下的适配需求。 点…...

探索NetCat:网络流量监测与数据传输的利器
从简单的数据传输到复杂的网络调试,NetCat的灵活性和多功能性让人赞叹不已,在这篇文章中我将深入探讨NetCat的魅力,揭示它的基本功能、实用技巧以及在日常工作中的应用场景,发现如何用这一小工具提升的网络技能与效率。 目录 Net…...

【运动的&足球】足球运动员球守门员裁判检测系统源码&数据集全套:改进yolo11-DBBNCSPELAN
改进yolo11-FocalModulation等200全套创新点大全:足球运动员球守门员裁判检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示…...

求最大公约数,最小公倍数
输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 求最小公倍数算法: 最小公倍数 两整数的乘积 最大公约数 根据求最小公倍数的算法,可以看出如果已知最大公约数,就能很容易求出最小公倍数。而通过辗转相除法和相减法&#…...

Android——横屏竖屏
系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况,Android设计了一中配置变更机制,在指定的环境配置发生变更之时,无需重启活动页面,只需执行特定的变更行为。该机制的视线过程分为两步: 修改 Androi…...

scala---10.30
val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…...

Pinctrl子需要中client端使用pinctrl过程的驱动分析
往期内容 本专栏往期内容: Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体 input子系统专栏…...

【网络】传输层协议TCP
目录 四位首部长度 序号 捎带应答 标记位 超时重传机制 连接管理机制(RST标记位) 三次握手及四次挥手的原因 TCP的全称是传输控制协议(Transmission Control Protocol),也就是说,对于放到TCP发送缓冲…...

00-开发环境 MPLAB IDE 配置
MPLAB IDE V8.83 File 菜单简介 New (CtrlN): 创建一个新文件,用于编写新的代码。 Add New File to Project...: 将新文件添加到当前项目中。 Open... (CtrlO): 打开现有文件。 Close (CtrlE): 关闭当前打开的文件。 …...

<meta property=“og:type“ content=“website“>
<meta property"og:type" content"website"> 这段代码是HTML中的一部分,具体来说,它是一个用于定义Open Graph协议的meta标签。 代码分析 <meta> 标签:这是一个HTML标签,用于在HTML文档的头…...