ctfshow-web入门笔记-爆破

爆破

web21

爆破,抓包后发现验证的是“b64encode(用户名:密码)”,所以采用burp的intruder的iterator,直接用用户名字典和密码字典构建爆破。注意要取消最后一步的payload URL encoding。

web22

域名失效后没法做了,但是看wp是通过测绘引擎做的

web23

根据提示爆破token,感觉不是很好,需要再加一下intval()函数,不然就会报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<? php
$dicts = "qwertyuiopasdfghjklzxcvbnm1234567890";
$chararr = str_split($dicts);

foreach ($chararr as $char1) {
foreach ($chararr as $char2) {
$token = md5($char1.$char2);
if (substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1)) {
if (intval(substr($token,1,1)) != 0){
if ((intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + intval(substr($token, 17, 1))) / intval(substr($token, 1, 1)) === intval(substr($token, 31, 1))) {
echo $char1 . $char2;
}
}
}
}
}

web24

根据提示,是一带种子的随机数,可能与操作系统和php版本有关,用了win10的php8.2,得到的值可以直接传过去出flag。

1
2
3
4
<?php
mt_srand(372619038);
echo intval(mt_rand());
?>

web25

看如下代码:

1
2
3
4
5
6
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;
}

mt_srand()用于播种随机数生成器,其可输入一个种子值。如果没有种子值,那么会使用一个随机值。

mt_rand()用于生成随机数。

这里是flag首先被进行一系列变换,变为mt_srand()的参数,代表种子。之后,$rand被赋值为r参数的值减去mt_rand()的值,故可以通过输入?r=0得到mt_rand()在hexdec(substr(md5($flag), 0,8))这个种子下所生成的第一个值。

然后,可通过php_mt_seed工具进行爆破,即可得到mt_srand()的参数值,从而可通过这个构建PHP脚本,得到token的值。

1
2
3
4
5
mt_srand(2220175114);
$rand1 = mt_rand();
echo "second:";
$rand2 = mt_rand()+mt_rand();
echo $rand2;

注:每一次mt_rand()生成的值都不同,所以不能简单地将mt_rand()相加。

在得到token的值后,直接构造Cookie:Token=xxx即可得到flag。

web26

直接爆破密码,密码为纯数字。

web27

firefox和chrome用burp抓包结果不一样,如果要用burp的话就只能用chrome。

先看人员名单,然后用录取系统爆出第一个人的身份证号,就是生日那几位。

高的生日是19900201。

然后回复的消息可以直接unicode解码,提示学号为“02015237”,初始密码为身份证号。

回到外面的登录,即成功获取flag。

web28

爆破目录/0/1/,直接爆破目录。