实验吧CTF题库——try them all

    今天做了一道密码学的ctf题,是实验吧题库里的try them all一题。题目是这样的:

You have found a passwd file containing salted passwords. An unprotected configuration file has revealed a salt of 5948. The hashed password for the 'admin' user appears to be 81bdf501ef206ae7d3b92070196f7e98, try to brute force this password.

    大概就是说,你已经找到一个包含密码的文件,密码加了为”5948”的盐,密码散列是81bdf501ef206ae7d3b92070196f7e98,尝试暴力破解这个密码。

什么是加盐加密?百度百科这么写的:加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。无论何时只要口令改变,随机数就改变。随机数以未加密的方式存放在口令文件中,这样每个人都可以读。不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中

    81bdf501ef206ae7d3b92070196f7e98这串字符应该是md5加密后的密文,那么把它解密后去掉盐就是flag了。然后我搜md5解密网站解密,解是可以解的,但是它收费啊。那就得自己想办法爆破了。

    md5不可逆,那就只能穷举出每一个密码加密后和这串密文对比了。搜了一篇博客文章发现人家是用字典,这是个方法,但是我没有字典啊。

    在廖雪峰的官方网站上我找到了itertools模块,看了之后我还是不知道怎么办,于是我去看这个模块的文档https://docs.python.org/2/library/itertools.html实验吧CTF题库——try them all_第1张图片

要的就是这种效果啊。我这里说一句哈,个人看法,看文档真的是一种很好的学习方法。用python3实现md5加解密我不熟悉,我也是看的文档:https://docs.python.org/3/library/hashlib.html?highlight=hashlib#credits

上代码:

# -*- coding:utf-8 -*-
import hashlib
import itertools as  its

maxlength = int(input("输入密码最大长度:"))
for i in range(1,maxlength+1):
    r = its.product('abcdefghijklmnopqrstuvwxyz', repeat=i)
    for j in r:
        words = "".join(j)
        print(words)
        words_salted = words+"5948"
        m = hashlib.md5()
        m.update((words_salted).encode())
        #m.hexdigest()
        if m.hexdigest() == "81bdf501ef206ae7d3b92070196f7e98":
            break

密码最大长度应该我还真不知道,看了别人的思路说最大为6,不然需要的时间就长了,所以我输入最大长度为6。然后去跑程序,用了大约15分钟。

实验吧CTF题库——try them all_第2张图片

最后输出的那个就是flag。

你可能感兴趣的:(学习记录)