返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php特性之intval学习小记
  • 307
分享到

php特性之intval学习小记

php学习web安全 2023-09-04 16:09:20 307人浏览 薄情痞子
摘要

前言 文章同步我的个人博客http://www.quan9i.top/,欢迎大家访问。 PHP特性的intval是一个比较常见的漏洞,今天就来比较全面的学习这个函数,将其简单的利用方式总结一下 函数学

前言

文章同步我的个人博客http://www.quan9i.top/,欢迎大家访问。
PHP特性的intval是一个比较常见的漏洞,今天就来比较全面的学习这个函数,将其简单的利用方式总结一下

数学

学习函数最好的方式就是去学习官方的,这样学习得到的收获更多一些,这里我们先来看一下这个函数定义

intval — 获取变量的整数值

而它的具体格式和解释如下

int intval( var,base)//var指要转换成 integer 的数量值,base指转化所使用的进制 Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进制: ◦ 如果字符串包括了 "0x" ("0X") 的前缀,使用 16 进制 (hex);否则,  ◦ 如果字符串以 "0" 开始,使用 8 进制(octal);否则,  ◦ 将使用 10 进制 (decimal)

这里这个Note对我们来说就尤为重要了,没有声明base参数时,字符串首字母是0则视为8进制,是0X则视为16进制,具体可以看官方给出的例子

phpecho intval(042);                     // 34echo intval(0x1A);                    // 2?> 

此时就可以看出它的一个利用方式了,当过滤某个数字时,我们可以利用它的进制转换来绕过。
此时再往下看

返回值 成功时返回 var 的 integer 值,失败时返回 0。空的 array 返回 0,非空的 array 返回 1

这时候就可以看出另一个利用方式了,如果是一个弱比较a==b我们输入a[]=1
b[]=2,此时这两个是不同的,但还都会返回1,此时也就实现了一种绕过,这是第二种绕过思路。
此时官方还给出了其他示例,我们再看

echo intval(42);                      // 42echo intval(4.2);                     // 4

我们可以发现小数点后的数字会直接舍去,所以这可以作为第三种,当过滤4的时候,我们可以输入4.2来绕过
然后呢,我们还发现例子里有1e这种格式的,

echo intval(1e10);                    // 1410065408echo intval('1e10');                  // 1

这个呢我们发现单引号传值的时候,它只识别字母前面的一部分,当我们进行get传参时,我们其实就是默认加单引号的,所以这又是一种绕过方式。
还有说一下这里不是必须是e,这里只要是字母就可以
在这里插入图片描述

实战

0X01

include("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){    $num = $_GET['num'];    if(preg_match("/[0-9]/", $num)){        die("no no no!");    }    if(intval($num)){        echo $flag;    }}?>

看见这题我的思路就是用数组绕过,可能是因为之前md5()的时候强比较看习惯了,这里构造payload如下即可

num[]=1

在这里插入图片描述

0X02

include("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){    $num = $_GET['num'];    if($num==="4476"){        die("no no no!");    }    if(intval($num,0)===4476){        echo $flag;    }else{        echo intval($num,0);    }}

这关的话就是要求变量值不能为4476,但用过intval函数后为4476,这里的话我们首先需要知道intval的第二个参数为0时的意思是什么

int intval( var,base)Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进制: ◦ 如果字符串包括了 "0x" ("0X") 的前缀,使用 16 进制 (hex);否则,  ◦ 如果字符串以 "0" 开始,使用 8 进制(octal);否则,  ◦ 将使用 10 进制 (decimal)

此时的话我们再看一下在这个函数的运算
在这里插入图片描述
看到这里的话就可以看出payload就有多种构造方法了

num=4476e123//这里就跟上面那个单引号的1e10情况一样,此时只看字母前面的num=4476.1//计算int值时,后面有小数点会直接舍去num=0x117c//0x表明是十六进制数,117c是4476的十六进制数num=010574//0表明是八进制数,10574是4476的八进制数

测试如下
在这里插入图片描述
执行结果如下
在这里插入图片描述

0X03

include("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){    $num = $_GET['num'];    if($num==4476){        die("no no no!");    }    if(intval($num,0)==4476){        echo $flag;    }else{        echo intval($num,0);    }}

这里的话就是从强比较换成了弱比较,用之前的解题payload即可

num=4476.1

0X04

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;    }}?>

这道题的话看着几乎是防死了,多过滤了.,这就意味着小数点绕过行不通,此时我们看到这个i修饰符,想到那个m修饰符,此时就想起来有个换行符%0a,它对实际输出没影响,它还可以绕过上面的那些函数,因此我们这里构造如下语句,就实现了绕过,由于小数点不能用,这里就用八进制

num=%0a010574

在这里插入图片描述

来源地址:https://blog.csdn.net/Reme_mber/article/details/124781330

--结束END--

本文标题: php特性之intval学习小记

本文链接: https://lsjlt.com/news/393889.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php特性之intval学习小记
    前言 文章同步我的个人博客http://www.quan9i.top/,欢迎大家访问。 php特性的intval是一个比较常见的漏洞,今天就来比较全面的学习这个函数,将其简单的利用方式总结一下 函数学...
    99+
    2023-09-04
    php 学习 web安全
  • Python学习之高级特性
    切片 在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取。这种方法可以帮助我们依次获取我们想要的元素。而切片可以帮助我们获取被切片元...
    99+
    2023-01-30
    特性 高级 Python
  • PHP的学习--Traits新特性
    自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。 Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复...
    99+
    2023-08-31
    php 学习 开发语言 网络安全 linux
  • TypeScript学习笔记之类型缩小
    目录类型缩小什么是类型缩小呢?常见的类型保护有如下几种:typeof平等缩小instanceofin总结类型缩小 什么是类型缩小呢? 类型缩小的英文是 Type Narrowing;...
    99+
    2024-04-02
  • PHP Switch 语句之学习笔记
    PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作。 Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。 使用 Switch 语句...
    99+
    2022-11-15
    PHP Switch
  • python学习之对象的三大特性
    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希望维护代码前,还需要从头至尾的通读一遍...
    99+
    2023-01-30
    三大 特性 对象
  • BASH 学习笔记小结
    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例...
    99+
    2022-06-04
    小结 学习笔记 BASH
  • PHP 学习笔记 (3)
    昨天笔记2说道了PHP的标记以及短标记,今天记录下如何吧PHP从HTML分离手册参考:http://www.php.net/manual/zh/language.basic-syntax.phpmode.phpPHP手册告诉我们,PHP凡是...
    99+
    2023-01-31
    学习笔记 PHP
  • HTML语法学习笔记:记录您的学习之旅
    HTML 简介 超文本标记语言 (HTML) 是互联网上网页的基础。它是一种标记语言,用于定义网页的结构和内容。学习 HTML 语法对于成为一名成功的网络开发者至关重要。 HTML 元素 HTML 中的基础构建块是元素。它们由一对尖括号...
    99+
    2024-03-09
    HTML、语法、学习、教程、网络开发
  • java学习之理解自动拆装箱特性
    目录一、自动装拆箱是什么?二、拆装箱的使用1.引入包装类的原因:2.自动拆装箱的运用3.一些典型举例一、自动装拆箱是什么? 有时,需要将int这样的基本类型转换为对象。所有...
    99+
    2024-04-02
  • Android学习笔记之Service
    一个Service是App的一个组件,没有任何的UI,可以长时间的在后台无限期运行。可以在主线程之外的单独的线程中执行,也可以在应用程序组件(如...
    99+
    2022-06-06
    android学习 service Android
  • Android学习笔记之Toast
    使用统一标准化的Toast Toast.makeText(Context context, CharSequence text, int dur...
    99+
    2022-06-06
    android学习 toast Android
  • python学习之记事本
              买了本学习python的书,看了几天,想写个简单的程序,下面就是一个简单的类似记事本一样的小程序,器功能主要有: 1提示你是想流泪这个文件还是想写东西到这个文件 2.输入R或者r,表示想看这个程序写的文件 3,输入W或者...
    99+
    2023-01-31
    记事本 python
  • PHP学习笔记:性能分析与调优
    引言:在Web开发中,性能是一个非常关键的因素。一个高性能的网站能够提供更好的用户体验,提高用户留存率,增加业务收入。而在PHP开发中,性能的优化是一个常见且重要的问题。本文将介绍PHP中性能分析与调优的方法,并提供具体的代码示例,帮助读者...
    99+
    2023-10-21
    调优 性能分析 PHP学习
  • 学习笔记-小甲鱼Python3学习第二十
    斐波那契数列:斐波那契数列的迭代实现月数123456789101112兔子总对数1123581321345589144用数学函数定义:             1,当n = 1F(n)       1,当n = 2             ...
    99+
    2023-01-31
    甲鱼 学习笔记
  • 学习笔记-小甲鱼Python3学习第三讲
    测试题: 以下哪个变量的命名不正确?为什么? (A) MM_520 (B) MM520 (C) 520_MM (D) _520_MM C,变量名可以用字母、数字、下划线命名,但是不能以数字开头 在不上机的情况下,以下代码你能...
    99+
    2023-01-31
    甲鱼 学习笔记 第三讲
  • 学习笔记-小甲鱼Python3学习第三十
    丰富的else语句python中else不仅可以与if搭配组成控制流,还可以与while或for搭配使用要么怎样,要么不怎样干完了能怎样,干不完就别想怎样没有问题,那就干吧举例:求素数def showMaxFactory(num):    ...
    99+
    2023-01-31
    甲鱼 学习笔记
  • 学习笔记-小甲鱼Python3学习第十讲
    创建列表创建一个普通列表number = [1,2,3,4,6]创建一个混合列表mix= [1,3.14,'abc','张三',[5,6,7]]创建一个空列表empty = []向列表中添加元素:append(),extend(),inse...
    99+
    2023-01-31
    甲鱼 学习笔记 第十讲
  • 学习笔记-小甲鱼Python3学习第十一
    从列表中获取元素:列表索引值是从0开始的例把'郑十'和'王五'的位置调换一下>>> member['张三', '李四', '郑十', '王五', '赵六', '陈七', '马八', '孙九']>>> me...
    99+
    2023-01-31
    甲鱼 学习笔记
  • 学习笔记-小甲鱼Python3学习第十三
    元组中的元素不能被修改。用()把元素括起来,用,逗号隔开创建和访问元组更新和删除元组元组的相关操作符元组创建:>>> tuple1 = (1,2,3,4,5,6,7,8)            #使用()括起来,用,逗号隔...
    99+
    2023-01-31
    甲鱼 学习笔记
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作