intval()函数:
用于获取变量的整数值;可使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。
注意:intval() 不能用于 object,否则会产生NOTICE 错误并返回 1。
语法结构:
int intval ( mixed $var [, int $base = 10 ] )
$var,需要被转换成integer的值;$base,决定转化时可所使用的进制。
如果$base值为0,通过检测传进的$var格式来决定使用的进制;
$var字符串前缀"0x"代表16进制,"0"代表8进制,默认为10进制;
绕过方法思路总结:
目录
intval()函数:
绕过方法思路总结:
一、进制类型转换:
二、弱比较(a==b),可以给a、b两个参数传入数组,使弱比较为true:
三、增加小数位:
四、转换字符串:
五、取反:
六、运用算数运算符:
一、进制类型转换:
#实例:23的16进制:0x17,8进制为027
if(23 != $_GET['i']){
if(23 == intval($_GET['i'],0)){
echo '漏洞利用成功';
}
}else{
echo 'NONONO';
}
//绕过思路:当某个数字被过滤时,可以使用它的8进制/16进制来绕过;
二、弱比较(a==b),可以给a、b两个参数传入数组,使弱比较为true:
if($_GET['a']!=$_GET['b']) {
if (intval($_GET['a']) == intval($_GET['b'])) {
echo '漏洞利用成功';
}
}else
echo 'NONONO';
&&因为使用intval()转换数组类型时,不关心数组中的内容,只判断数组中有没有元素;
所以,当数组中有值时,返回值为1;1==1,漏洞利用成功。
//当网址处输入?i[]= 时后端接收的值为1,因为数组中会带有一个元素即空字符串。
三、增加小数位:
#例子与上题相同,不同绕过方法:
if($_GET['a']!=$_GET['b']) {
if (intval($_GET['a']) == intval($_GET['b'])) {
echo '漏洞利用成功';
}
}else
echo 'NONONO';
//因为 intval() 转换小数类型时,只返回个位数,不遵循四舍五入的原则。
&&绕过思路:当某个数字被过滤时,可以给它增加小数位来绕过。
四、转换字符串:
intval()函数转换字符串时,会判断字符串是否以数字开头;
//当字符串以数字开头,就会返回1个或多个连续的数字;
//当字符串以字母开头,就会返回0;
//0 或 0x 开头也只会当做普通字符串处理;
//双引号对转换结果没有影响,但对下面这个示例会有影响,当我们传入?i=0时失败。
但当我们传入?i="0"、?i="1"、?i='0',?i='1'等值时;成功利用漏洞。
#转换字符串例子:
$t = '0';
if($t!==$_GET['i']) {
if($t == intval($_GET['i'])) {
echo '漏洞利用成功';
}
}else
echo 'NONONO';
?>
五、取反:
//intval()支持一些特殊符号,比如 ~ 取反;
intval(~10):-11;intval(~1):-2;intval(~~10):10;
&&绕过思路:当某个数字被过滤时,可以两次取反来绕过;
var_dump(intval(~10));
var_dump(intval(~~10));
返回值:
int(-11)
int(10)
六、运用算数运算符:
//intval()转换包含算术运算符时,会先运算,在对运算结果进行转换;
intval(5*5):25;文章来源:https://www.toymoban.com/news/detail-792150.html
&&绕过思路:当某个数字被绕过时,可以使用算数运算符绕过;文章来源地址https://www.toymoban.com/news/detail-792150.html
到了这里,关于WEB攻防基础|PHP|过滤函数intval()绕过原理及方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!