“百度杯”CTF比赛 2017 二月场 爆破-3

进入题目,题目源码:

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

我审计10分钟,看了30分钟竟然没想出来怎么解,是真的蠢。看了下WP,写个脚本就爆破出来了。脑子太笨了,反应太慢。做的题目还是少。

题目意思就是一开始nums为0,接收的value变量,要满足value数组的前两个数和whoaimi变量相同并且md5加密后的value变量为0(这个可以用MD5无法处理数组的漏洞)

也就是第一次,传入变量?value[]=ea,因此value[0]=ea    与whoami想等,所以nums++   (如果value[]=ea&value=es的话,value[0].value[1]=eaes)

然后随意A-Z+A-Z,写个脚本,把显示出来的两个随机衣服在value[]=xx传值进去,直到输出flag   (千万注意带 session,保持一个回话)

上脚本:

import requests
url='http://5aff2966a9bc42598f68a1f03a7c5ec962143d7178324b4c.changame.ichunqiu.com/'
session=requests.Session()
html=session.get(url+'?value[]=ea').text
for i in range(10):
    html=session.get(url+'?value[]='+ html[0:2]).text
print(html)

猜你喜欢

转载自www.cnblogs.com/BOHB-yunying/p/10604292.html
今日推荐