WEB攻防基础|PHP|过滤函数intval()绕过原理及方法

 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;

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

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值