ctfhub技能树—web前置技能—http协议—基础认证
打开靶机环境
下载附件后发现是常用密码字典,于是考虑本题可能是考察密码爆破
打开环境
发现需要认证,于是考虑使用暴力破解
使用burpsuite抓包,查看
发现最下面一行有加密后的密文
使用base64解码
发现是刚刚输入用于验证的账号密码
于是使用脚本把密码进行加密
附上脚本
#! /usr/bin/env python3 # _*_ coding:utf-8 _*_ import base64 # 字典文件路径 dic_file_path = './10_million_password_list_top_100.txt' with open(dic_file_path, 'r') as f: password_dic = f.readlines() username = 'admin:' # 用户名 for password in password_dic: str1=str.encode(username + password.strip()) encodestr = base64.b64encode(str1) encodestr=str(encodestr) encodestr=encodestr.strip('b\'') encodestr=encodestr.replace("=","\=") #避免“=”被转译 print(encodestr)
运行后输出加密后的密文
使用密文进行爆破
设置爆破的位置
导入密码字典
开始爆破
成功拿到正确密码(密码是随机的,需要自己爆破)
解密
输入验证
验证成功拿到flag
基础认证是什么?
1 在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供用户名和密码的一种方式。
具体如下(认证模型)
认证的四个步骤:
1 请求: 客户端发起一条请求;第一条请求没有认证消息; 2 质询: 服务器对客户端进行质询;返回一条401 Unauthorized响应,并在www-Authenticate首部说明如何以及在哪里进行认证;一般指定对哪个安全域进行认证; 3 授权:客户端收到401质询,弹出对话框,询问用户名和密码,用户输入用户名和密码后,客户端会用一个冒号将其连接起来,编码成“经过扰码的”Base-64表示形式,然后将其放在Authorization首部中回送; 4 成功: 服务器对用户名和密码进行解码,验证它们的正确性,然后用一条HTTP 200 OK报文返回所请求的报文;
基本认证的安全缺陷:
1 这个基础认证并不安全,因为每次传输都会带上认证信息,并且是明文的(BASE64是编码,不是加密),因此密码等信息可能会被嗅探器发现。