如果我知道密码,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”版本: