我是靠谱客的博主 疯狂季节,最近开发中收集的这篇文章主要介绍2018年金融业CTF竞赛 “Encrypted Traffic” 哈希加盐爆破,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

密码字段值:ac22543d5382cbf48b6ebcf6e40f123d9ca4b91f9998e4c2f2422402

 

拿到这道题先看条件,逐条分析

1.题目提示是SHA的哈希算法,哈希算法的一条特点是固定长度输出,不同哈希算法输出长度不同

HASH算法长度
md232
md432
md532
sha140
sha22456
sha25664
sha38496
sha512128
ripemd12832
ripemd16040
ripemd25664
ripemd32080
whirlpool128
tiger128,332
tiger160,340
tiger192,348
tiger128,432
tiger160,440
tiger192,448
snefru64
snefru25664
gost64
adler328
crc328
crc32b8
fnv1328
fnv16416
joaat8
haval128,332
haval160,340
haval192,348
haval224,356
haval256,364
haval128,432
haval160,440
haval192,448
haval224,456
haval256,464
haval128,532
haval160,540
haval192,548
haval224,556
haval256,564

题目中字段长度为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” 哈希加盐爆破所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部