关于审计CMCC8位随机密码的思路 | hashcat + python

  1. 密码规则
  2. 需要解决的问题
    1. 存储问题
    2. 配合hashcat的问题
  3. 思路

密码规则

长度为8位

每位都有可能是大小写、数字、特殊字符

每两位之间相邻不重复

需要解决的问题

存储问题

这种规则的密码生成并不复杂,难的是高达几十个T的存储,就算是生成了,高IO肯定也是个问题

配合hashcat的问题

既然要实现无存储跑hashcat,那肯定是想到用掩码,但是掩码又不可能设计出每两位相邻不重复的规则

思路

考虑用python配合hashcat,一边生成,一边输入到hashcat中

为了照顾每两位相邻不重复,解决这个问题,我们可以考虑使用一种更加高效的密码生成策略。具体来说,我们可以按照一定的顺序生成密码,确保每次生成的密码都是全新的,从而避免重复检查。

我们可以首先生成所有的2位密码,然后将这些2位密码组合起来,形成8位密码。在这个过程中,我们需要确保相邻的2位密码不相同。这样,我们就可以生成所有满足你要求的8位密码,而且不会有重复。

python:

import itertools
import subprocess
from multiprocessing import Process, Queue

# 定义可能的字符集
charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()'

# 生成所有可能的2位密码
two_char_passwords = list(itertools.product(charset, repeat=2))

# 检查相邻的2位密码是否相同
def check_repetition(password):
    for i in range(len(password)-1):
        if password[i] == password[i+1]:
            return False
    return True

# 密码生成函数
def generate_passwords(queue):
    # 生成所有可能的8位密码
    for password in itertools.product(two_char_passwords, repeat=4):
        if check_repetition(password):
            password_str = ''.join([''.join(two_char) for two_char in password])
            queue.put(password_str)

# Hashcat调用函数
def run_hashcat(queue):
    hashcat_process = subprocess.Popen(['/hashcat/hashcat-6.2.6/hashcat.bin', '-w', '4','-a','0', '-m', '22000', '-o', './passwd', './1.ht220000'], stdin=subprocess.PIPE)
    while True:
        password_str = queue.get()
        hashcat_process.stdin.write((password_str + '\n').encode())
        hashcat_process.stdin.flush()

# 创建队列和进程
queue = Queue()
producer = Process(target=generate_passwords, args=(queue,))
consumer = Process(target=run_hashcat, args=(queue,))

# 启动进程
producer.start()
consumer.start()

# 等待进程结束
producer.join()
consumer.join()

欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。

×

喜欢就点赞,疼爱就打赏

//