PHP intval()函数详解,intval()函数漏洞原理及绕过思路

这篇具有很好参考价值的文章主要介绍了PHP intval()函数详解,intval()函数漏洞原理及绕过思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

intval() 函数可以获取变量的「整数值」。常用于强制类型转换。

语法

int intval( $var, $base )

参数

  • $var:需要转换成 integer 「变量」
  • $base:转换所使用的「进制」

返回值

返回值为 integer 类型,可能是 0 或 1 或 其他integer 值。

  • 0:失败 或 空array 返回 0
  • 1:非空array 返回 1
  • 其他integer值:成功时 返回 $var 的 integer 值。

返回值的「最大值」取决于系统

  • 32 位系统(-2147483648 到 2147483647)
  • 64 位系统(-9223372036854775808到9223372036854775807)

一、进制自动转换

第二个参数 $base 允许为空。

当 base 为空时,默认值是 0,会根据 $var 的格式来调整转换的进制。

  • 如果 $var 以 0 开头,就使用 8进制
  • 如果 $var 以0x开头,就使用 16进制
  • 否则,就使用 10进制

实例:

# 10的 8进制是12
var_dump(intval(012));
# 10的 16进制是A
var_dump(intval(0xA));
# 10的 10进制是10
var_dump(intval(10));

输出:

int(10)
int(10)
int(10)

绕过思路:当某个数字被过滤时,可以使用它的 8进制/16进制来绕过。


二、转换数组

intval() 转换数组类型时,不关心数组中的内容,只判断数组中有没有元素。

  • 「空数组」返回 0
  • 「非空数组」返回 1

实例:

var_dump(intval(array()));
var_dump(intval(array(3,2)));

输出:

int(0)
int(1)

如果传入的 $var是数组中的某个值时,则当做变量来转换,而不是当做数组类型。

实例:

$arr1 = array(8,6);

var_dump(intval($arr1[0]));

输出:

int(8)

绕过思路:对于弱比较(a==b),可以给a、b两个参数传入空数组,使弱比较为true。


三、转换小数

intval() 转换小数类型时,只返回个位数,不遵循四舍五入的原则。

实例:

var_dump(intval(12));
var_dump(intval(1.2));
var_dump(intval(1.9));

输出:

int(12)
int(1)
int(1)

绕过思路:当某个数字被过滤时,可以给它增加小数位来绕过。


四、转换字符串

intval() 转换字符串类型时,会判断字符串是否以数字开头

  • 如果以数字开头,就返回1个或多个连续的数字
  • 如果以字母开头,就返回0

单双引号对转换结果没有影响,并且 0 或 0x 开头也只会当做普通字符串处理。

实例:

var_dump(intval('12abc'));
var_dump(intval("12abc"));
var_dump(intval('abc123'));
var_dump(intval('1a2b3c'));
var_dump(intval('0101'));
var_dump(intval("0x2b"));

输出:

int(12)
int(12)
int(0)
int(1)
int(101)
int(0)

五、取反~

intval() 函数支持一些特殊符号的,比如~取反。

实例:

var_dump(intval(~10));
var_dump(intval(~~10));

输出:

int(-11)
int(10)

绕过思路:当某个数字被过滤时,可以两次取反来绕过。


六、算数运算符

intval() 函数支持算数运算符,如果传入的 $var参数包含算数运算符,会先运算,再对运算结果进行转换。

实例:

var_dump(intval(5*5));
var_dump(intval(5+5));
var_dump(intval(05+5));

输出:

int(25)
int(10)
int(10)

绕过思路:当某个数字被过滤时,可以使用算数运算符绕过。

七、浮点数精度缺失问题

由于PHP中的浮点数是「弱类型」,存在「精度丢失」的问题,在转换时可能会出现意料之外的情况。

比如下面这个案例,第一个输出34正常,第二个以为会输出58,结果输出了57。

实例:

var_dump(intval(0.34*100.0));
var_dump(intval(0.58*100.0));

输出:

int(34)
int(57)

三、intval()绕过思路

最后汇总一下intval()函数漏洞的绕过思路:

1)当某个数字被过滤时,可以使用它的 8进制/16进制来绕过;比如过滤10,就用012(八进制)或0xA(十六进制)。
2)对于弱比较(a==b),可以给a、b两个参数传入空数组,使弱比较为true。
3)当某个数字被过滤时,可以给它增加小数位来绕过;比如过滤3,就用3.1。
4)当某个数字被过滤时,可以给它拼接字符串来绕过;比如过滤3,就用3ab。(GET请求的参数会自动拼接单引号)
5)当某个数字被过滤时,可以两次取反来绕过;比如过滤10,就用~~10。
6)当某个数字被过滤时,可以使用算数运算符绕过;比如过滤10,就用 5+5 或 2*5。

粉丝福利

评论区留言即可参与抽奖,送《ChatGPT一本通》。

PHP intval()函数详解,intval()函数漏洞原理及绕过思路

本书从ChatGPT等自然语言大模型基础知识讲起,重点介绍了ChatGPT等语言大模型在生活中的实际应用,让每一个人都能了解未来的生活和工作。
本书分为16章,涵盖的主要内容有人工智能、OpenAI、ChatGPT的介绍、ChatGPT的使用技巧,向大家展现ChatGPT在学术教育、商业管理、新媒体、办公、求职、法律、电商等不同领域的应用,以及ChatGPT当下的问题、大模型的未来。
本书通俗易懂,用最简单的语言解释人工智能的入门知识,案例丰富,实用性强,适合每一个想要了ChatGPT等自然语言处理大模型的读者和进阶爱好者阅读,也适合想要通过API打造新时代语言模型应用的开发者。

实用性强:本书通过实际案例和操作技巧,使读者能够快速上手并灵活运用ChatGPT技术,提升职场竞争力。
深入浅出:本书以通俗易懂的语言解释ChatGPT的原理和应用,即使是职场新手也能轻松掌握。
高效学习:本书结构紧凑,内容精炼,便于读者快速吸收和理解,无需花费大量时间。
融合行业经验:本书结合了作者多年的经验,为读者提供了独到的见解和实用建议。文章来源地址https://www.toymoban.com/news/detail-488566.html

到了这里,关于PHP intval()函数详解,intval()函数漏洞原理及绕过思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 文件上传漏洞(2), 文件上传实战绕过思路, 基础篇

    准备一句话木马文件 mm.php 一, 前端绕过 p1 浏览器禁用js 先把 mm.php 后缀名修改为 mm.jpg , 点击提交后, 用 burp 截取请求, 将数据包中的文件名修改回 mm.php 再提交. 二, 类型MIME绕过 p2 使用 burp 修改 Content-Type: image/jpeg 三, 黑名单绕过 p3 后端禁止上传.asp|.aspx|.php|.jsp后缀文件. apac

    2024年02月08日
    浏览(28)
  • PHP反序列化漏洞-魔术方法绕过

    一、__wakeup()魔法函数绕过: 在PHP中,__wakeup()是一个魔术方法,用于在反序列化对象时自动调用。 当反序列化字符串中的对象属性个数大于实际属性个数时 ,可以利用这个漏洞进行绕过。 触发条件: PHP版本为5.6.25或早期版本,或者PHP7版本小于7.0.10。 反序列化字符串中的对

    2024年01月18日
    浏览(31)
  • CTF必看~ PHP反序列化漏洞6:绝妙_wakeup绕过技巧

    CTF必看~ PHP反序列化漏洞6:绝妙_wakeup绕过技巧

    作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半

    2024年02月08日
    浏览(9)
  • 文件上传漏洞(1), 文件上传绕过原理

    一, 前端校验上传文件 添加 Javascript 代码,然后在 form 表单中 添加 onsubmit=\\\"returb checkFile()\\\" 绕过前端: 1. 在浏览器设置中禁用js 通常不建议使用这种方式, 因为前端js中可能存在很多其他js的功能, 例如ajax请求. 2. 用burpsuite等工具修改请求. 因为前端js对文件类型做了限制, 那么将

    2024年02月08日
    浏览(10)
  • 【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

    【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

      首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识 超详细的网络安全笔记 分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记​编辑https://m.tb.cn/h.5JdFcih?tk=OuVrWRl9vMx%20CZ3457 https://m.tb.cn/

    2024年02月07日
    浏览(13)
  • 第27天:安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞

    第27天:安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞

    1.TP框架-开发-配置架构路由MVC模型 参考:https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用 路由访问-URL访问 数据库操作-应用对象 文件上传操作-应用对象 前端页面渲染-MVC模型 1.TP框架-安全-不安全写法版本过滤绕过 1.内置代码写法 不合要求的代码写法-ThinkPHP5-自写 2.框架

    2024年04月25日
    浏览(14)
  • CTF笔记:PHP函数is_numeric()绕过

    CTF笔记:PHP函数is_numeric()绕过

    在做CTF过程中遇到的is_numeric()函数,作用是判断输入是不是数字或数字字符串。 思路1:数值-非数值 原题是[极客大挑战 2019]BuyFlag,判断代码如下: 密码是404,但是不能输入数字,所以要考虑绕过的问题,这里记录解题思路。 上网搜了一下,可以借助url编码中的空字符,例

    2024年02月08日
    浏览(9)
  • PHP反序列化漏洞原理

    1、原理: 序列化与反序列化是保证数据一致性的过程。 2、产生: 序列化与反序列化的过程中,用户可控 如果反序列化的参数受到攻击者的控制,就会产生漏洞。攻击者可以通过修改参数个数等方式来控制反序列化过程,从而导致代码执行、SQL注入、目录遍历等不可控后果。

    2024年01月16日
    浏览(11)
  • PHP文件上传漏洞原理以及防御姿势

    PHP文件上传漏洞原理以及防御姿势

    0x00 漏洞描述 ​ 在实际开发过程中文件上传的功能时十分常见的,比如博客系统用户需要文件上传功能来上传自己的头像,写博客时需要上传图片来丰富自己的文章,购物系统在识图搜索时也需要上传图片等,文件上传功能固然重要,但是如果在实现相应功能时没有注意安全

    2024年02月02日
    浏览(13)
  • php代码审计,php漏洞详解

    php代码审计,php漏洞详解

    大多数漏洞的形成原因主要都是未对输入数据进行安全验证或对输出数据未经过安全处 理,比较严格的数据验证方式为: 对数据进行精确匹配 接受白名单的数据 拒绝黑名单的数据 对匹配黑名单的数据进行编码 在 PHP 中可由用户输入的变量列表如下,我们应该对这些输入变

    2024年02月13日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包