概述
密码字段值:ac22543d5382cbf48b6ebcf6e40f123d9ca4b91f9998e4c2f2422402
拿到这道题先看条件,逐条分析
1.题目提示是SHA的哈希算法,哈希算法的一条特点是固定长度输出,不同哈希算法输出长度不同
HASH算法 | 长度 |
md2 | 32 |
md4 | 32 |
md5 | 32 |
sha1 | 40 |
sha224 | 56 |
sha256 | 64 |
sha384 | 96 |
sha512 | 128 |
ripemd128 | 32 |
ripemd160 | 40 |
ripemd256 | 64 |
ripemd320 | 80 |
whirlpool | 128 |
tiger128,3 | 32 |
tiger160,3 | 40 |
tiger192,3 | 48 |
tiger128,4 | 32 |
tiger160,4 | 40 |
tiger192,4 | 48 |
snefru | 64 |
snefru256 | 64 |
gost | 64 |
adler32 | 8 |
crc32 | 8 |
crc32b | 8 |
fnv132 | 8 |
fnv164 | 16 |
joaat | 8 |
haval128,3 | 32 |
haval160,3 | 40 |
haval192,3 | 48 |
haval224,3 | 56 |
haval256,3 | 64 |
haval128,4 | 32 |
haval160,4 | 40 |
haval192,4 | 48 |
haval224,4 | 56 |
haval256,4 | 64 |
haval128,5 | 32 |
haval160,5 | 40 |
haval192,5 | 48 |
haval224,5 | 56 |
haval256,5 | 64 |
题目中字段长度为56,所以算法为 sha224
笔者本以为网上会有大牛做这种工具,所以想找到工具之后复制粘贴即可解题,度娘搜罗无数遍之后无果(还是太天真)
因笔者用python较多,所以决定自做脚本爆破解题
python中有个 hashlib 模块,这就让脚本变得容易多了
废话不多说,直接上脚本
import hashlib
with open('superdic_back.txt','r') as f:
#superdic_back.txt 为字典名
a = f.readlines()
for i in a:
#print(i[:-1])
sha224 = hashlib.sha224()
sha224.update(i[:-1].encode("utf-8")) #Unicode-objects must be encoded before hashing 写脚本过程中会有报错,修改编码即可解决问题
#print(sha224.hexdigest())
if sha224.hexdigest() == 'ac22543d5382cbf48b6ebcf6e40f123d9ca4b91f9998e4c2f2422402':
print('FOUND:', i[:-1])
break
现在爆破脚本有了,第一个条件解决了,我们分析第二条
2.ATM取款机的密码
那就是6为数字啊
那我们现在就能做一个字典用来爆破
笔者之前写过生成字典的python脚本,这里正好可以用上
# -*- coding=utf-8 -*-
#生成字典文件
import itertools
#提取包含字符,去重
def cancel_repeat(origin):
origin_list=list(origin)
_char=[]
for i in origin_list:
if i not in _char:
_char.append(i)
char=''.join(_char)
return char
#确定字符串长度
def get_length():
while 1:
try:
length=int(input('请输入要求密码长度:'))
except:
print('输入不正确,请继续输入')
continue
break
return length
#生成字典
def create_dictionary(origin):
char=cancel_repeat(origin)
length=get_length()
pwd=itertools.product(char, repeat=length)
for i in pwd:
with open('dictionary.txt','a') as fp:
fp.write(''.join(i)+'n')
print('字典已生成')
if __name__ == '__main__':
origin=input('请输入需要包含的字符:')
create_dictionary(origin)
这里安利一个强大的生成字典的工具 superdic
现在密码问题解决了,最后就是选择哪个密码才是真正的密码
3.哈希值是密码加盐之后的结果,而且题目已经告诉我们“盐”是什么内容了
我们就可以优化刚刚做的字典,把各个密码前或后加上“盐”,即“zhangsanfeng”
用 superdic 里的 “修改字典”模块即可进行优化
三个条件都满足了,现在就能用本文第一个脚本进行爆破了,爆破内容不多,运行脚本之后马上就能得到答案
flag{877295_SHA224_zhangsanfeng}
最后
以上就是疯狂季节为你收集整理的2018年金融业CTF竞赛 “Encrypted Traffic” 哈希加盐爆破的全部内容,希望文章能够帮你解决2018年金融业CTF竞赛 “Encrypted Traffic” 哈希加盐爆破所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复