什么是intval()?
intval()
函数是 PHP 中的一个内置函数,用于获取变量的整数值。常用于强制类型转换。
基础语法
intval(mixed $value, int $base = 10): int
参数:
- $var:需要转换成 integer 的「变量」
- $base:转换所使用的「进制」
注意:
如果 base
是 0,通过检测 value
的格式来决定使用的进制:
- 如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,
- 如果字符串以 “0b” (或 “0B”) 开头,使用 2 进制 (binary);否则,
- 如果字符串以 “0” 开始,使用 8 进制(octal);否则,
- 将使用 10 进制 (decimal)。
返回值
成功时返回 value
的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。
举个例子
<?php
echo intval(42); //42
echo "\n";
echo intval(42.2); //42
echo "\n";
echo intval(042); //34
echo "\n";
echo intval(0x42); //66
echo "\n";
echo intval(array('name')); //1
echo "\n";
echo intval(array()); //0
echo "\n";
绕过思路
- 当某个数字被过滤时,可以使用它的 8进制/16进制来绕过;比如过滤10,就用012(八进制)或0xA(十六进制)。
- 对于弱比较(a==b),可以给a、b两个参数传入空数组,使弱比较为true。
- 当某个数字被过滤时,可以给它增加小数位来绕过;比如过滤3,就用3.1。
- 当某个数字被过滤时,可以给它拼接字符串来绕过;比如过滤3,就用3ab。
- 当某个数字被过滤时,可以两次取反来绕过;比如过滤10,就用~~10。
- 当某个数字被过滤时,可以使用算数运算符绕过;比如过滤10,就用 5+5 或 2*5。
例题解析
商丘师范学院第四届网络安全及信息对抗大赛(校外赛)
<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['sqctf'])){
$num = $_GET['sqctf'];
if($num==114514){
die("逸一时, 误一世!");
}
if(intval($num,0)==114514){
echo $flag;
}else{
echo "看看你输入的数字: ".intval($num,0);
}
}
?>
发现 intval($num,0)==114514
想起当某个数字被过滤时,可以给它增加小数位来绕过;比如过滤3,就用3.1。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容