Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我知道密码,OSX bash脚本将强制/循环MD5哈希以查找Salt?_Bash_Loops_Find_Md5 - Fatal编程技术网

如果我知道密码,OSX bash脚本将强制/循环MD5哈希以查找Salt?

如果我知道密码,OSX bash脚本将强制/循环MD5哈希以查找Salt?,bash,loops,find,md5,Bash,Loops,Find,Md5,我的密码是:123321 我在其他网站上测试并创建了几个使用相同密码的用户帐户:123321,在mySQL中我看到了相同的MD5哈希896501b1d2ed4ec4e2d3a6c6a672152 这证实了即使使用不同的用户名、不同的注册日期等,Salt也是相同的 下面我设置了一个简单的(2个字符)Salt Find测试用例,我知道Salt+密码,脚本将找到Salt: Setup Test details: Salt = 'Ac' Password = '123321' Salted passwo

我的密码是:
123321

我在其他网站上测试并创建了几个使用相同密码的用户帐户:
123321
,在mySQL中我看到了相同的MD5哈希
896501b1d2ed4ec4e2d3a6c6a672152

这证实了即使使用不同的用户名、不同的注册日期等,Salt也是相同的

下面我设置了一个简单的(2个字符)Salt Find测试用例,我知道Salt+密码,脚本将找到Salt:

Setup Test details:
Salt = 'Ac'
Password = '123321'
Salted password = 'Ac123321'
Hash of Salted pass = 'b60639eef9d7e85eab35e16f6d1ba6d6'
使用下面的代码,我可以在上面找到这个Salt:

#!/bin/bash

hashtofind=b60639eef9d7e85eab35e16f6d1ba6d6    
password=123321
counter=0

for i in $(seq 48 122); do
    counter=$((counter+1))
    salt=$(printf "\\$(printf %o $i)")
    saltedpass=$(printf "\\$(printf %o $i)$password")
    hashtocheck=$(echo -n "$saltedpass" | md5)
    echo "$counter"
    if [ $hashtocheck = $hashtofind ]; then
        echo "Found HASH!"
        echo "hashtofind: $hashtofind"
        echo "saltedpass: $hashtocheck"
        echo "SALT: $salt"
        echo "password: $password"
        echo "Salt+Password: $saltedpass"
        exit 1
    fi
done

for i in $(seq 48 122); do
    for j in $(seq 48 122); do
        counter=$((counter+1))
        salt=$(printf "\\$(printf %o $i)\\$(printf %o $j)")
        saltedpass=$(printf "\\$(printf %o $i)\\$(printf %o $j)$password")
        hashtocheck=$(echo -n "$saltedpass" | md5)
        echo "$counter"
        if [ $hashtocheck = $hashtofind ]; then
            echo "Found HASH!"
            echo "hashtofind: $hashtofind"
            echo "saltedpass: $hashtocheck"
            echo "SALT: $salt"
            echo "password: $password"
            echo "Salt+Password: $saltedpass"
            exit 1
        fi
    done
done

for i in $(seq 48 122); do
    for j in $(seq 48 122); do
        for k in $(seq 48 122); do
            counter=$((counter+1))
            salt=$(printf "\\$(printf %o $i)\\$(printf %o $j)\\$(printf %o $k)")
            saltedpass=$(printf "\\$(printf %o $i)\\$(printf %o $j)\\$(printf %o $k)$password")
            hashtocheck=$(echo -n "$saltedpass" | md5)
            echo "$counter"
            if [ $hashtocheck = $hashtofind ]; then
                echo "Found HASH!"
                echo "hashtofind: $hashtofind"
                echo "saltedpass: $hashtocheck"
                echo "SALT: $salt"
                echo "password: $password"
                echo "Salt+Password: $saltedpass"
                exit 1
            fi
        done
    done
done
此代码在10秒内给出结果:

1398
1399
1400
1401
1402
Found HASH!
hashtofind: b60639eef9d7e85eab35e16f6d1ba6d6
saltedpass: b60639eef9d7e85eab35e16f6d1ba6d6
SALT: Ac
password: 123321
Salt+Password: Ac123321
我原来需要的盐超过2焦耳

问题:除了运行多终端/shell控制台之外,还有其他方法可以更快地运行此过程吗?

是专为此类任务设计的复杂工具。将哈希放入假密码文件中:

→ cat input 
username:b60639eef9d7e85eab35e16f6d1ba6d6
假设使用2个ascii字符作为种子:

→ john --format=raw-md5 input --mask=?a?a123321 
Created directory: /home/juergen/.john
Loaded 1 password hash (Raw-MD5 [MD5 128/128 AVX 12x])
Warning: poor OpenMP scalability for this hash type, consider --fork=4
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Ac123321         (username)
1g 0:00:00:00  16.66g/s 150416p/s 150416c/s 150416C/s   123321..~~123321
Use the "--show" option to display all of the cracked passwords reliably
Session completed
在[sic]mySQL中,我看到了相同的MD5散列

盐不是秘密信息;也就是说,没有比哈希更秘密的了

如果您可以访问存储散列密码的MySQL数据库,那么该数据库应该存储这些密码。它必须;这些盐对于验证密码至关重要

在经典的无阴影Unix密码文件中,每个人都能清楚地看到盐和散列。两者都是相同的公共信息,存储在同一字段中

如果数据库的任何字段中都没有存储salt,则表明该网站对所有密码都使用了一些固定salt,这是非常糟糕的。这与您在不同的数据库中看到相同的散列也是一致的。该软件几乎肯定使用了“静态盐”

你不必反转盐来证明这一点:根据最佳实践使用随机盐的概率非常小,但散列结果是相同的

无论如何,通过用一种编译的编程语言编写整个破解程序,并使用速度相当快的散列函数,可以更快地完成搜索。脚本的大部分时间都花在启动进程和解释shell语法上

使用已知pw/哈希对强制执行两个字符的salt应该是即时的


(在这个主题上,我们根本不应该使用两个字符盐,更不用说静态的两个字符盐了。)

您的所有命令子状态,即
saltedpass=$(…)
都非常“昂贵”,因为
$()
必须启动一个新的shell才能处理这一条语句。我认为您可以将整个过程转换为所有循环的一个awk脚本,然后调用
md5 | getline resultVar
(或类似)来调用无法避免的1个外部调用。祝你好运。@Shelleter谢谢你,删除
$()
让它更快了。我安装了John 1.8.0,但是命令:
/John--format=raw-md5 input.txt--mask=?a?a123321
给我错误:
未知选项:“--mask=?a?a123321”
你需要安装“Jumbo”版本: