Php代码审计

2017-11-24  本文已影响0人  queena_

Challenge

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>';

}?>


Solution

1、根据代码可以看出当time在60 * 60 * 24 * 30 * 2(5184000)和60 * 60 * 24 * 30 * 3(7776000)之间时进入sleep(),

但是我们不能等那么长时间,所以需要绕过sleep();

2、is_numeric()函数支持普通数字型字符串、科学记数法型字符串、部分支持十六进制0x型字符串,但是int强制类型转换不能正确转换类型有十六进制型字符串、科学计数法型字符串(部分)

3、5184000的十六制0x4F1A00,7776000的十六进制0x76a700

4、当传入参数如?temp=0x4F1A00或0x76a700都会得到flag

上一篇下一篇

猜你喜欢

热点阅读