我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php特性之intval学习小记

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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进制,具体可以看官方给出的例子

echo 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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php特性之intval学习小记

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python学习之高级特性

切片在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取。这种方法可以帮助我们依次获取我们想要的元素。而切片可以帮助我们获取被切片元素的
2023-01-30

PHP Switch 语句之学习笔记

PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作,使用 Switch 语句可以避免冗长的 if..elseif..else 代码块
2022-11-15

python学习之对象的三大特性

在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希望维护代码前,还需要从头至尾的通读一遍吧
2023-01-30

PHP学习笔记:性能分析与调优

引言:在Web开发中,性能是一个非常关键的因素。一个高性能的网站能够提供更好的用户体验,提高用户留存率,增加业务收入。而在PHP开发中,性能的优化是一个常见且重要的问题。本文将介绍PHP中性能分析与调优的方法,并提供具体的代码示例,帮助读者
2023-10-21

PHP学习笔记:安全性与防御措施

引言:在当今互联网的世界中,安全性是非常重要的,尤其是对于Web应用程序而言。PHP作为一种常用的服务器端脚本语言,安全性一直是开发者必须关注和重视的方面。本文将介绍一些PHP中常见的安全性问题,并提供一些防御措施的示例代码。一、输入验证输
2023-10-21

PHP学习笔记:性能优化与缓存技术

一、引言在开发和运维PHP应用程序时,性能优化是一个重要的考虑因素。随着用户量的增加,应用程序的负载可能会迅速增大,这会导致响应时间延长,甚至导致服务器崩溃。为了提供更好的用户体验和稳定的系统性能,我们需要采取一些性能优化的策略和技术。本文
2023-10-21

PHP学习笔记:推荐系统与个性化推荐

引言:在当今互联网时代,推荐系统已成为许多网站和应用程序的重要功能之一。通过运用机器学习和数据挖掘技术,推荐系统能够根据用户的行为和兴趣,将最相关的内容和产品推荐给用户,提升用户体验和网站的交互性。而个性化推荐则是推荐系统的一种重要算法,能
2023-10-21

PHP学习笔记:微信小程序与公众号开发

随着移动互联网的快速发展,微信成为了人们使用最广泛的社交媒体平台之一。为了满足用户的需求,微信提供了两种开发方式:小程序和公众号。本文将介绍如何使用PHP语言开发微信小程序和公众号,并提供一些具体的代码示例。一、微信小程序开发准备工作首先,
2023-10-21

PHP 函数新特性对开发团队的学习成本如何?

php 函数新特性带来开发效率和代码质量提升的可能性,但学习新语法和用法需要投入时间和精力,对开发团队的技能和现有代码库造成影响。成本评估应权衡新特性的好处,包括提高效率、提升代码质量和保持竞争力。PHP 函数新特性的学习成本对开发团队的影
PHP 函数新特性对开发团队的学习成本如何?
2024-05-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录