web入门 爆破 web21-web28

197 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

web21

题目是个登录框 在这里插入图片描述

附件里面有一个爆破密码 在这里插入图片描述 应该是就用这个爆破了

抓个数据包先 在这里插入图片描述

在这里插入图片描述

这里的用户名和密码是通过:连接,然后base64加密的

第一个放admin 在这里插入图片描述

第二个放: 在这里插入图片描述 第三个放下载的密码包

在这里插入图片描述

然后还需要进行加密 在这里插入图片描述 在这里插入图片描述

开始爆破,得到成功登录的信息

哦,设置错了……,应该是encode

在这里插入图片描述

……经过了漫长的等待,谁知道竟然把密码放在最后面几百个里面 在这里插入图片描述

web22

“域名也可以爆破的,试试爆破这个ctf.show的子域名”

找工具爆破了半个小时,啥也没出来,看了下hint气死

在这里插入图片描述

果然这个子域名失效了……

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

}
?>

intval — 获取变量的整数值 substr — 返回字符串的子串

应该是要求token的md5值的,第二位、第十五位和第十八位相等。还限制,三者的和除以第二位的值,等于第三十二位的值。

三者的和除以第二位,三者相等,等于任何一位的值,除以任一位的商应为3,即第三十二位的整数值应该是3

需要求一个md5值,当作token传值过去

import hashlib
a = "0123456789qwertyuiopasdfghjklzxcvbnm"
for i in a:
    for j in a:
        b = (str(i) + str(j)).encode("utf-8")
        m = hashlib.md5(b).hexdigest()
        if(m[1:2] == m[14:15] and m[14:15] == m[17:18]):
            if ((int(m[1:2]) + int(m[14:15]) + int(m[17:18])) / int(m[1:2])) == int(m[31:32]):
                print('原字符串为:',b)
                print('加密后字符串为:',m)

跑出来的结果为,3j 加密后的值为,f12882fc7cde8e1ba1cadec10e3e9393

满足题目限制 在这里插入图片描述

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

?>

mt_rand() 使用 Mersenne Twister 算法返回随机整数。

mt_srand() 播种 Mersenne Twister 随机数生成器。

当随机数的种子是个确定值时(如本题),mt_rand()所得到的随机数也是确定的,所以运行后发现mt_rand()=1155388967,传参r=1155388967即可 在这里插入图片描述

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

分析代码可以发现,先令r=0,可以得到mt_rand()的随机值 2119447047 在这里插入图片描述

得到mt_rand()的值后,需要推算种子seed的值,利用工具 在这里插入图片描述 然后计算mt_rand()的第二、三次的随机值之和。php在线工具 在这里插入图片描述 这里的第一个值与r=0的值相等,所有后面就是第二三个随机值的和

令r为mt_rand()的值,令cookie为token=第二、三个随机值的和 (不行就试试后面的seed的值、这是最后一个才有flag的) 在这里插入图片描述

web26

打开后是个安装的界面 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

然后就没有了,根据题目说可以爆破,那有可能是爆破安装的这个密码,用到web21题给的字典库 在这里插入图片描述 在这里插入图片描述 等好久,终于等到了个不同length的响应

这个题还有一种非预期解 oatmeal.vip/writeup/ctf…

web27

是个教务系统登录,有录取名单和学籍查询 在这里插入图片描述 录取名单: 在这里插入图片描述 学籍查询: 在这里插入图片描述

猜测应该是用录取名单的姓名+身份证号登录,查询录取信息 在登陆查询页面查看源代码 在这里插入图片描述 hackbar工具POST提交 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

设置好日期范围,开始爆破 在这里插入图片描述 成功爆破,返回的是unicode编码后的,解码一下 这个还挺快,生日是19900201

得到学号和密码,去刚开始的教务系统登录 在这里插入图片描述

web28

在这里插入图片描述 看到这地址之后,应该是去爆破目录 在这里插入图片描述

payload1和2一样设置,从0到100 在这里插入图片描述

开始爆破 在这里插入图片描述

终于在两千多次后成功了