安小琪's blog

少年有梦,不应止于心动

CTFshow_web入门_爆破

CTFshow web入门之爆破

web21

先随便输入账号密码,抓包

base64解密,可以发现账号密码的形式为 账号:密码,这里我们采用 Custom iterator进行爆破

使用方法可参考:Custom iterator的使用

爆破即可得到flag

web22

子域名爆破

flag.ctfer.com

web23

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

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__);

}
?>

直接在源代码上改改,写个脚本就好了 (假设是三位的数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
error_reporting(0);
$string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
print (strlen($string)."\n");

for ($a = 0; $a < 62; $a++) {
for ($b = 0; $b < 62; $b++) {
for ($c = 0; $c < 62; $c++) {
$flag = $string[$a] . $string[$b] . $string[$c];
$token = md5($flag);
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 . "\n";
}
}
}
}
}

解出来答案很多

随便GET传参一个即可得到flag

web24

考察点:伪随机数

了解伪随机数可参考此文伪随机数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

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');
}

GET传参即可

web25

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

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');
}
1
$rand = intval($r)-intval(mt_rand());

根据这句,可以通过传入的r得到第一个随机数,之后我们可以通过工具php_mt_seed 地址

进行逆推,得到种子

通过抓包查看响应头我们可以知道该php版本为7.3.11,因此可能的种子就是如图两种

if($_COOKIE[‘token’]==(mt_rand()+mt_rand()))

通过该行代码我们知道要将两个随机数相加,脚本如下

burp抓吧修改即可

关于这里为什么要?r=1819399594,因为

1
2
3
4
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}

只有在$rand不存在时,$_COOKIE[‘token’]==(mt_rand()+mt_rand() 才能执行,而1819399594是我们在传?r=0时页面输出的随机数

1
$rand = intval($r)-intval(mt_rand());

此时的$rand = mt_rand()即第一个生成的随机数,因此只要我们使$r=mt_rand()=1819399594,就能让$rand=0,不存在,从而执行接下来的代码

web26

在安装页面,查看源码,可以发现js代码

在checkdb.php页面POST即可

web27

打开页面是正方教务系统,仔细点看下面有个录取名单,和 学生学籍信息查询系统

点录取名单,内容如下

可以看到身份证号不完全,少了生日(年月日),这里要爆破

爆破出来,学生学籍信息查询系统 查询之后会提示,教务系统用户名,以及登入初始密码为身份证

登入即可得到flag

web28

看到这个url,诡异的0和1,尝试爆破

burpsuite爆破的四种模式

这里要把2.txt去掉

使用Cluster bomb模式爆破从0-100的数字