chevron-up bell reply instagram twitter2 feed3 finder search-25px-p0
暂无公告

intval()

2017-02-04
内容纲要

intval函数有个特性:"直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时()结束转换", 直接来看代码

上面的代码运行后输出

根据结果可以得出intval()会过滤掉非数字的字符,这点用来进行字符过滤是没问题的,但是如果用intval()进行条件判断的话,就会产生逻辑错误,造成判断条件的绕过。只需第一个字符为非0数字即可使条件为真。 此类问题曾发生在wordpress2.0.6中 下载地址:http://download.gna.org/wordpress-zh/WordPress%20%d6%f7%b3%cc%d0%f2/%b0%e6%b1%be%202.0.x/wordpress_2.0.6_zh_CN.zip 在wp-trackback.php

$tb_id由$_GET获取,然后由intval($tb_id)判断后带入get_var,造成注入。 提交tb_id='提示“I really need an ID for this to work.” 使用tb_id=1'即可绕过  

 

另外再ctf中经常遇到的intval界值的问题,Intval最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval(‘1000000000000’) 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。

例如如下代码:

其中is_numeric可以用%00 %0a等等绕过,

第二个判断number intval后必须和本身相等,根据上面所说,intval会从数字开始,到非数字结束,会把%00等特殊字符去掉

第三个判断,把number翻转后进行比较,还要相等,intval的边界值为2147483647,翻转后为7463847412,它大于2147483647,则它为2147483647,intval后两值相等。

admin

发表评论