美文网首页
CTF || [“百度杯”CTF比赛 2017 二月场]爆破-3

CTF || [“百度杯”CTF比赛 2017 二月场]爆破-3

作者: mirrorr | 来源:发表于2018-06-17 22:12 被阅读0次

    题目内容:这个真的是爆破。

    error_reporting(0);// 关闭错误报告
    session_start();//启动会话
    require('./flag.php');
    if(!isset($_SESSION['nums'])){//isset() — 检测变量是否设置。
      $_SESSION['nums'] = 0;
      $_SESSION['time'] = time();//返回当前时间的 Unix 时间戳
      $_SESSION['whoami'] = 'ea';
    }
    
    if($_SESSION['time']+120<time()){
      session_destroy();//session_destroy — 销毁一个会话中的全部数据
    }//120s后会话结束
    
    $value = $_REQUEST['value'];
    $str_rand = range('a', 'z');//range创建一个包含从 "a" 到 "z" 之间的元素范围的数组
    $str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];//mt_rand() 使用 Mersenne Twister 算法返回0到25之间的随机整数。$str_rand[mt_rand(0,25)]返回"a" 到 "z"之间任意字母。$str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)]是两任意字母相连
    
    if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){//substr(string,start,length)。===是包括变量值与类型完全相等。==只是比较两个数的值是否相等,由于substr是字符串,和数字比较的时候会强制转化成数字0,自然和0相等。
      $_SESSION['nums']++;
      $_SESSION['whoami'] = $str_rands;
      echo $str_rands;
    }
    
    if($_SESSION['nums']>=10){//循环10次输出flag,暴力破解
      echo $flag;
    }
    
    show_source(__FILE__);
    ?>
    

    分值:10分

    代码内容:先设置初始值nums=0,time是当前时间,whoami=ea。当whoami=value时,num+1,whoami=$str_rands,循环。nums>=10时,打印flag。120s后会话结束,由于时间120秒,完全可以手工做10次,即可得到flag。

    方法:先设置数组value[]=ea
    ?value[]=ea,得到两个字母,重新给value[]赋值,重复10次,得到flag

    参考
    https://www.ichunqiu.com/writeup/detail/1069

    相关文章

      网友评论

          本文标题:CTF || [“百度杯”CTF比赛 2017 二月场]爆破-3

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