Sud0G
Sud0G
发布于 2024-07-16 / 94 阅读
0
0

ctfshow-web入门-爆破

web21

抓包,

说实话,第一次见的时候,觉得有误,因为没有username和password这两个熟悉的,但发现了一串base编码的,解码后发现,这就是刚刚输入的admin

抓包爆破操作:

最后取消url-encode;

解码得到账号密码:

登陆后得到flag:

ctfshow{84d978aa-b67f-451a-9177-a967b4ce2dcd}

web23

页面代码分析:

<?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/14/17位需要相等,此外,整数相加后除以第一位的值与第31位相等:

php脚本如下:

<?php
for ($i = 0; $i < 10000; $i++) {
    $token = md5($i);
    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 $token . ":" . $i;
        }
    }
}

结果:

pytho脚本如下:

import hashlib

for i in range(10000):
    token = hashlib.md5(str(i).encode('utf-8')).hexdigest()
    if token[1] == token[14] == token[17]:
        if token[1] != '0' and (int(token[1], 16) + int(token[14], 16) + int(token[17], 16)) / int(token[1], 16) == int(token[31], 16):
            print(f"{token}:{i}")

没想到python跑出了2各结果;传值得到flag

ctfshow{acdcdabc-6e06-4780-8fd3-5b2ed11701d7}

web24

页面代码分析:

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

?> 
Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023

当r等于随机值时,输出flag,但是此处的种子固定,值不变,运行出值

<?php
mt_srand(372619038);
echo mt_rand();

1155388967

传参得到flag:

ctfshow{f0393421-d40e-4033-95ed-5e107a82bb3e}

web25

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

下方回显

Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023

分析

mt_srand(hexdec(substr(md5($flag), 0,8)));将flag进行md5加密,返回从第一个到第八个数,再将数字加密

!$rand需要满足这个条件,即rand=0,也即r=mt_rand()

接着满足token等于mt_rand()+mt_rand(),这里写+的意思是第一次加密的值加上第二次加密的值

我们首先需要获取第一个加密的值

因此如果给r传0的话,就会生成随机数,这个时候就可以逆序推出种子!利用脚本

https://www.openwall.com/php_mt_seed/

解压后文件夹中有三个文件,Makefile文件是用来告诉make需要做什么

在Linux中执行 make  之前,需要一个命名为 Makefile  的特殊文件(本文的后续将使用Makefile 作为这个特殊文件的文件名)来告诉 make 需要做什么(完成什么任务),该怎么做。

在kali中逆推

┌──(root㉿kali)-[~/Desktop/php_mt_seed-4.0]
└─# ./php_mt_seed 1958754220 
Pattern: EXACT
Version: 3.0.7 to 5.2.0
Found 0, trying 0x18000000 - 0x1bffffff, speed 8053.1 Mseeds/s 
seed = 0x1b1315de = 454235614 (PHP 3.0.7 to 5.2.0)
seed = 0x1b1315df = 454235615 (PHP 3.0.7 to 5.2.0)
Found 2, trying 0xfc000000 - 0xffffffff, speed 10840.7 Mseeds/s 
Version: 5.2.1+
Found 2, trying 0x3c000000 - 0x3dffffff, speed 151.4 Mseeds/s 
seed = 0x3d5fd16a = 1029689706 (PHP 7.1.0+)                                                                                                      
Found 3, trying 0xfe000000 - 0xffffffff, speed 126.3 Mseeds/s                                                                                    
Found 3 

得到种子: 1029689706(选择php版本对应的种子

利用脚本寻找token的值

<?php
mt_srand(1029689706);
echo mt_rand()."\n";
$result = mt_rand()+mt_rand();
echo $result;

// 输出
1958754220
1985633197

bp抓包操作,输入r值和token值

web26

这题在抓包之后,我在Repeater模块内,点击send后,直接出现了flag:

至于为啥不知道.

上面是未填写的情况,下面演示正常抓包

web27

在网页中将学生的个人信息下载下来:

发现,身份信息中的出生日期被覆盖了,我们直接上bp:

要注意这个格式,因为要注意配合身份证的格式

得到了身份证号;

得到学号:

得到flag

web28

这题界面属实简洁

发现url上有疑似目录爆破的地方;

在根据提示,进行爆破:


评论