这里的用户名和密码是通过:连接,然后base64加密的
开始爆破,得到成功登录的信息
哦,设置错了……,应该是encode
“域名也可以爆破的,试试爆破这个ctf.show的子域名”
找工具爆破了半个小时,啥也没出来,看了下hint气死
果然这个子域名失效了……
error_reporting(0);
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);
}
?>
intval — 获取变量的整数值
substr — 返回字符串的子串
应该是要求token的md5值的,第二位、第十五位和第十八位相等。还限制,三者的和除以第二位的值,等于第三十二位的值。
三者的和除以第二位,三者相等,等于任何一位的值,除以任一位的商应为3,即第三十二位的整数值应该是3
需要求一个md5值,当作token传值过去
import hashlib
a = "0123456789qwertyuiopasdfghjklzxcvbnm"
for i in a:
for j in a:
b = (str(i) + str(j)).encode("utf-8")
m = hashlib.md5(b).hexdigest()
if(m[1:2] == m[14:15] and m[14:15] == m[17:18]):
if ((int(m[1:2]) + int(m[14:15]) + int(m[17:18])) / int(m[1:2])) == int(m[31:32]):
print('原字符串为:',b)
print('加密后字符串为:',m)
跑出来的结果为,3j
加密后的值为,f12882fc7cde8e1ba1cadec10e3e9393
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
mt_rand() 使用 Mersenne Twister 算法返回随机整数。
mt_srand() 播种 Mersenne Twister 随机数生成器。
当随机数的种子是个确定值时(如本题),mt_rand()所得到的随机数也是确定的,所以运行后发现mt_rand()=1155388967,传参r=1155388967即可
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
分析代码可以发现,先令r=0,可以得到mt_rand()的随机值 2119447047
得到mt_rand()的值后,需要推算种子seed的值,利用工具
然后计算mt_rand()的第二、三次的随机值之和。php在线工具
这里的第一个值与r=0的值相等,所有后面就是第二三个随机值的和
令r为mt_rand()的值,令cookie为token=第二、三个随机值的和
(不行就试试后面的seed的值、这是最后一个才有flag的)
然后就没有了,根据题目说可以爆破,那有可能是爆破安装的这个密码,用到web21题给的字典库
等好久,终于等到了个不同length的响应
这个题还有一种非预期解 https://oatmeal.vip/writeup/ctfshow/ctfshow-web/
是个教务系统登录,有录取名单和学籍查询
录取名单:
学籍查询:
猜测应该是用录取名单的姓名+身份证号登录,查询录取信息
在登陆查询页面查看源代码
hackbar工具POST提交
设置好日期范围,开始爆破
成功爆破,返回的是unicode编码后的,解码一下
终于在两千多次后成功了