php intval()函数漏洞,is_numeric() 漏洞,绕过回文判断

Intval函数获取变量整数数值

Intval最大的值取决于操作系统。
32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。
32位系统上, intval(‘1000000000000’) 会返回 2147483647。
64 位系统上,最大带符号的 integer 值是 9223372036854775807。

所以如果参数为2147483647,那么当它反过来(就是字面意思),由于超出了限制,所以依然等于2147483647,即为回文。

is_numeric() 判断变量是否为数字或数字字符串,不仅检查10进制,16进制是可以

is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。

所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!

该函数还可能造成sql注入,例如将’1 or 1’转换为16进制形式2731206f72203127,再传参,就可以造成sql注入。

intval( r e q [ " n u m b e r " ] ) = i n t v a l ( s t r r e v ( req["number"])=intval(strrev( req[“number”]))
如果要求不是回文,但又要满足这个条件,
可以用科学计数法构造0=0:
number=0e-0%00

猜你喜欢

转载自blog.csdn.net/youshaoduo/article/details/105530670