CTFSHOW爆破 WEB21~WEB28

温故知新,复盘当尝试不同方法,弄懂原理!

WEB 21

直接一个登录界面,开BP,先输入admin/123456 ,抓包

发现GET包中的Authorization(授权)中有一段密文 ,像base64编码,试下解密

发现这里就是提交的账号密码,中间有个:,知道了格式和提交位置,开始爆破

先改为明文形式加变量符,选择 cluster bomb模式,载入提供的字典,添加两条规则(末尾固定增加:,base64编码),取消payload encoding的√(避免特殊符号被自动转义)。

密码增加Base64规则,取消payload encoding的√ 

因为网站限定了测试线程数,所以速度会比较慢,否则直接503拒绝访问,我们直接上账号admin,密码shark63测试下

WEB 22

一种直接借助网站:在线子域名爆破-子成君提供 

要么自己抓个访问ctf.show的包,在地址前加上变量,加上末尾添加.的规则,用字典爆破

web 23

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

}
?>

=== 值与类型都要相同

substr截取字符串中的字符,intval按要求转换字符串的进制

看题得知要满足条件,先想办法得出这几个数,那么来构造一个简单的php的循环函数

<?php
	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 '$i='.$i.'!';
            echo "$token=".$token.'!';
        }
    }
	}
?>

将422或1202输入即可。

web 24

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

intval按要求转换字符串的进制

mt_rand()生成一个随机数,如果是纯随机,那么这道题无法解

mt_srand()随机数的种子,如果种子编号相等,那么每次生成的值都相同,也称为伪随机

先来看看这个数是多少

<?php
	mt_srand(372619038);
	$i=mt_rand();
	echo($i);
?>

输入即可

web 25

其中 mt_srand(hexdec(substr(md5($flag), 0,8)))括号内部分算干扰代码,与得到flag无关

先给r=0,得到第一次随机数的相反数。我得到 -375943554,看别人的博客得到的数值不同,不知道是题目更改了flag还是什么原因。利用php_mt_seed进行爆破mt_srand的种子,因为是.c文件,需编译后使用

使用kali,找到相应文件夹,在当前终端先make一下,之后使用./php_mt_seed  随机数爆破,

 有很多结果,基于不同的php版本,使用wappalyzer插件,

 找对应php 7.X的结果

根据if((!$rand)),if($_COOKIE['token']==(mt_rand()+mt_rand()))条件,知道r等于第一次随机数,token要等于第二次和第三次随机数相加的和,那么构造php代码

 代入可能的种子值一一尝试,最后得到

web 26

看到上面有默认信息,先填一下,抓包

 

把密码设置下变量,开始爆破,注意线程数小些,不然503错误 

速度太慢直接演示下

web  27

 点点看

 

看到这就明白类似密码找回漏洞,但是要爆破身份证的出生年月,选择高先伊

 选规则

yyyyMMdd是自己构造的,爆破

 

 再把信息输入

web 28

 

 

 

看看url, 输入/0/0,/0/1发现都是403,不给访问。那么就知道让你爆破目录了,那么大概的范围呢?

10*10太小,估计就是100*100了

 

 

 速度太慢,演示下,结果72,20

可以利用Python加快爆破速度

import requests
def test():
    url = "http://dd700c76-18e1-44a2-b362-ae89bf91c68d.challenge.ctf.show/"
    for i in range(101):
        for j in range(101):
            newUrl = url+str(i)+"/"+str(j)+"/"+"index.php"
            a = requests.get(newUrl).status_code
            print("test:"+str(i)+"/"+str(j))
            if(a!=404):
                print(newUrl)
                return

test()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值