前言:
本题考虑的是php弱类型、is_numeric()、int()强制类型转换
代码:
<?php
show_source(__FILE__);
$flag = "xxxx";
if(isset($_GET['time'])){
if(!is_numeric($_GET['time'])){
echo 'The time must be number.';
}else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){
echo 'This time is too short.';
}else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){
echo 'This time is too long.';
}else{
sleep((int)$_GET['time']);
echo $flag;
}
echo '<hr>';
}
?>
知识点:
int(),不能正确转换的类型有十六进制型字符串、科学计数法型字符串
is_numeric()支持普通数字型字符串、科学记数法型字符串、部分支持十六进制0x型字符串
分析:
代码中,先是判断是不是数字,然后再进行int长短的限定判断
也就是只能限定在5184000L< time < 7776000
通过is_number() 能传入科学计数法,来进行绕过。
如果是之间的操作,但是在遇到sleep()的话也只能等到明年了
所以根据int不能处理科学计数法,而number上能处理
payload:
?time=5.185e6
网友评论