美文网首页
Php代码审计

Php代码审计

作者: queena_ | 来源:发表于2017-11-24 22:28 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Php代码审计

          本文链接:https://www.haomeiwen.com/subject/ahxqbxtx.html