php ,intval()绕过姿势,使用方法 作者: ynnddddd 时间: 2024-08-09 分类: 网络安全,RCE,函数漏洞 1.intval()的使用手册 --------------- 1. intval(),可以将数字强制转化为整数 int intval( $var, $base ), 第一个是传入变量,第二个是转化的进制. 2. intval(),小数直接去掉,只保留整数. 3. intval(),如果传入的是数字,进制默认自动转化为10进制 0x: 16进制 ,0: 8进制 4. intval()转化**数组**, 「空数组」返回 0 「非空数组」返回 1 如果传入的 $var是数组中的某个值时,则当做变量来转换,而不是当做数组类型。 实例: 输入: $arr1 = array(8,6); var_dump(intval($arr1[0])); 输出: int(8) 5. intval() 转换**字符串类型**时,会判断字符串是否以数字开头 如果以数字开头,就返回1个或多个连续的数字 如果以字母开头,就返回0 单双引号对转换结果没有影响,并且 0 或 0x 开头也只会当做普通字符串处理。 2.绕过思路 ------ 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。 7)根据返回值,可以通过溢出计算,得到原本这样,结果那样的实现 返回值为 integer 类型,可能是 0 或 1 或 其他integer 值。 0:失败 或 空array 返回 0 1:非空array 返回 1 其他integer值:成功时 返回 $var 的 integer 值。 返回值的「最大值」取决于系统 32 位系统(-2147483648 到 2147483647) 64 位系统(-9223372036854775808到9223372036854775807) 标签: php, intval