现在我们进入到了爆破模块的学习

web21

进入网站,提示要登陆,妥爆破
抓包
img
注意到最下行的base64编码
发现就是刚刚输入的账号密码
img
因此这里就是要选择爆破的地方了
发给inruder,添加爆破位
img
载入题目给的字典,并且添加爆破的规则
img

img

web22

img

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

}
?>

题目很简单,只要能满足以上条件即可输出flag
但是仍需要一定的编写代码能力
ctf里,能够用工具解决的都是简单题,所以编写代码的能力是很重要的,希望大家别做脚本小子,多亲自写写,相信一定会有不同的感悟和提升
这里我给出两种方法

python脚本

import requests
import string
strings=string.ascii_lowercase+string.digits
for i in strings:
    for j in strings:
        url = "http://08945b13-a3f3-425d-a7c5-ae238e8ec15a.challenge.ctf.show/?token="+str(i)+str(j)
        res = requests.get(url=url)
        if 'ctf' in res.text:
            print(res.text)
            exit()

这种方法比较慢,但更简单更容易理解,推荐新手使用

php脚本

<?php
error_reporting(0);

$a="qwertyuiopasdfghjklzxcvbnm0123456789";
for($i=0;$i<36;$i++){
    for($j=0;$j<36;$j++){
        $token=$a[$i].$a[$j];
        $token = md5($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))){
                print $a[$i].$a[$j];
                exit(0);
            }
        }
    }
}
?>

这个脚本优点是速度更快,但需要一定的php基础
以上两种方式都是可以的

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

?>

这里搜索一下mt_strand()函数:
img
即生成随机数
其实说是随机数,但并不是真正的随机,这里其实生成的是伪随机数
如何理解?
首先我们要知道,计算机不能产生绝对的随机数,只能产生伪随机数。伪就是有规律的意思。伪随机数就是说计算机产生的随机数是有规律的。那么计算机是怎么产生随机数的?当然是通过算法,这个算法是有映射关系的,如我放进1234,他会出来一个特定的数。
而系统实现随机数是把当前的系统时间放进去,每次时间都不一样,所以可以实现每次出来的数都不一样。如果你每次都放进一样的种子,生成的随机数列就是一样的了。
也就是说,你在不同的电脑上输入同样的种子(比如1234),输出的随机数是一致的
也就是说这道题里产生的随机数其实是固定的
自己电脑上生成一下
img
这里还要注意一个细节,你所使用的php版本要和服务器的一样,生成的伪随机数才能一致
img

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

审计,种子没有明确给出,但是需要种子才能继续推进,因此需要对种子进行爆破
img
看到这里,get一个r=0的值,则得到的rand为伪随机一次的相反数
img
爆破seed,由php的版本,选取7.1以上的进行尝试
尝试可能的seed即可
img

web26

对数据库密码进行爆破
img

web27

进入靶场,页面是登陆系统,可以下载附件查看相关考生信息
身份证号不全,需要完整身份证号进行查询,因此对身份证号爆破
img
unicode转中文
img
登陆得到flag:
img

web28

对目录进行爆破
img
两个位置均设置好爆破规则即可
img

原文地址:http://www.cnblogs.com/perfectcqf/p/16829713.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性