ctfshow-web入门-爆破
Published in:2023-01-23 | category: 网络安全 ctf

靶场/来源: ctfshow

web21

题目:

题目提供了一个密码字典,下载即可

image1.png

解题过程:

分析抓包,发现根据输入登录用户与密码得不同,Authorization都不同,分析其值 MTExOjIyMg== ,判断其为base64编码,对其解码,得到刚才111:222(登录账户:密码),使用burp对其进行爆破,设置如下:

image2.png

在有效载荷处理处使用前缀名admin:(猜测用户名为admin),然后进行base64编码

爆破成功:

image3.png

知识点:

web23

题目:

<?php

error_reporting(0);

include('flag.php');

if(isset($_GET['token'])){ #使用get请求传入一个token

$token = md5($_GET['token']); #对token进行md5加密

#加密后得md5要符合下面一大堆规则,还是使用爆破吧

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

}

?>

解题过程:

抓包

image4.png

设置规则,使用蛮力破解(因为没有规则可以用)

image5.png

最后爆破出来为3j

知识点:

web24

题目:

解题过程:

对代码进行审计,发现mt_srand(),百度其用法,发现其如果设置了播种值,mt_rand()每次生成的随机数会相同(伪随机数),所以使用echo mt_rand()对其生成的值进行输出

image6.png

得到其生成的值

image7.png

再构造url:地址?r=1155388967得到flag

知识点:

mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。 提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数因此不需要播种,并且如果设置了 seed参数生成的随机数就是伪随机数,意思就是每次生成的随机数是一样的

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; #如果rand不等于0则输出rand

}

}else{ #如果未定义r则输出此文件的源代码

highlight_file(__FILE__);

echo system('cat /proc/version');

}

?>

解题过程:

通过分析代码,这里可以令r等于0,从而求出mt_rand()的值(第7行),注意去除负号

得出mt_rand()为424485486

image8.png

接下来就是解决token问题,这里需要对利用生成的随机数对种子进行破解

#使用php_mt_seed4.0 我们在linux下面使用gcc编译

gcc php_mt_seed.c -o php_mt_seed

#之后运行脚本添加随机数

./php_mt_seed 424485486

image9.png

可以看到爆出了多个可能的种子,然后用php对其进行一一尝试

<?php

error_reporting(0);

include("flag.php");

$data=array(2842768692,119863145,1188895974,1439248936,2480548275,3087409991,4059342533,4224933991);

for ($i=0; $i < count($data); $i++) {

mt_srand($data[$i]);

mt_rand();

echo mt_rand()+mt_rand();

echo "/";

}

?>

运行php得到下列值

image10.png

再对其一一尝试

image11.png

得到flag

知识点:

php_mt_seed下载地址:https://github.com/openwall/php_mt_seed

mt_rand()面对同一种子在一个函数多次调用的值都不相同,所以不能将mt_rand()+mt_rand()单纯看作mt_rand()*2

知识点汇总:

mt_scrand(seed)与mt_rand()伪随机数生成

mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。 提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数因此不需要播种,并且如果设置了 seed参数生成的随机数就是伪随机数,意思就是每次生成的随机数是一样的

php_mt_seed下载地址:https://github.com/openwall/php_mt_seed

mt_rand()面对同一种子在一个函数多次调用的值都不相同,所以不能将mt_rand()+mt_rand()单纯看作mt_rand()*2

Prev:
ctfshow-web入门-信息收集
Next:
《代码审计》阅读笔记