ctfshow web入门 爆破 21-28

web21

刚进去就要求我们登录,这里题目给了我们一个字典,就是这个字典为什么他那么多数字中 就一个字母的密码还不明显吗。

 

这里我们使用burp拦包,这里没有发现登录的账号密码,但是有一串可疑的字符串,尝试base64解密

这我们就得到了,我们测试用的账号密码了,这里将包移到Intruder中准备爆破

设置burp,添加payload位置到这里

这里有三个步骤,首先从文件加载我们选择给我们的字典文件,下面添加我们需要添加两个一个是前缀,一个是base64加密,最下面我们把url编码取消掉

 然后我们开始爆破,选择长度不一样的包,我们就获得了flag

扫描二维码关注公众号,回复: 14636494 查看本文章

web22

域名失效了呃呃呃

web23

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: [email protected]
# @link: https://ctfer.com

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

}
?>

这里分析一下代码,他会检查md5值的第二、十五、十八个字符是否相等。如果它们相等,那么它会将这三个字符转换为整数并计算它们的和,然后将这个和除以哈希值的第一个字符,判断这个结果是否等于哈希值的第三十一个字符。

 第一种方法

肯定还是选择爆破

第二种方法

我们写脚本跑出来

import hashlib

text = '0123456789qazwsxedcrfvtgbyhnujmikolp'
for i in text:
    for j in text:
        t = str(i) + str(j)
        md5_text = hashlib.md5(t.encode("utf-8")).hexdigest()
        if md5_text[1:2] == md5_text[14:15] and md5_text[14:15] == md5_text[17:18]:
            print(t)

 

web24

这里他已经告诉种子是什么了,我们直接在本地输出下一次的值就可以了

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:26:39
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: [email protected]
# @link: https://ctfer.com

*/

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传输r=1155388967

 

web25

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:56:57
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: [email protected]
# @link: https://ctfer.com

*/


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

分析一下代码,这里虽然我们无法确定种子值了,但是我们可以获得他随机值,这里随便传入一个值,我们根据值爆破他的种子

爆破工具 初次使用需要用make编译一下

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

我们获取的是rand的值,所以我们通过r传入1,那么我们获得的值就要加1,传入0不用改

这里我们先通过f12拦包,获得环境的php版本

因为这里所以rand必须为零所以我们需要传入我们获得到的随机值,因为rand上面赋值的时候已经使用过一次mt_rand,所以我们要的是让第二和第三次的值相加

if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }
<?php
 
mt_srand(3486625448); //这个种子值要看自己的
echo mt_rand().PHP_EOL;
echo mt_rand()+mt_rand();

 

web26

按照他的提示,填写,没有按照成功,怀疑是密码的问题,这里去爆破一下,没有爆破出来,这里去看看别人的,发现是7758521,这个。。太大了吧,根本爆破不出来

web27

 这里有两个一个录取名单,还有一个查询系统,查询系统需要身份证号,但是录取名单里面只有一部分,这里分析一下。

这里一部分是出生年月,这样我们就好爆破了,我的建议还是写脚本方便一点,也可以使用burp

用谷歌拦查询系统的包,然后将身份证中间的进行爆破

解密得到   恭喜您,您已被我校录取,你的学号为02015237 初始密码为身份证号码

登录获得flag

web28

这个题目的目录很不对劲,这里我们爆破目录看看,第一次爆破没有什么东西,这里我们将2.txt去掉,重新爆破,发现flag

猜你喜欢

转载自blog.csdn.net/m0_64815693/article/details/129965792