我目前正在攻读软件开发学位的第三年,我正在考虑明年扩展到一些安全模块,我选择了“暴力Python”作为入门课程,并学习了一门新语言,但是我被困在了第一个练习中。
我不是编程新手,也许我只是累了--这是漫长的一天,睡得很少--但这个简单的脚本不会起作用:
import crypt
def testPass(cryptPass):
salt = cryptPass[0:2]
dictFile = open('dictionary.txt')
for word in dictFile.readlines():
word = word.strip('\n')
print "[*] Attempting password: "+word+"\n"
cryptWord = crypt.crypt(word,salt)
if (cryptWord == cryptPass):
print "[+] Found Password: "+word+"\n"
return
print "[-] Password Not Found.\n"
return
def main():
passFile = open('passwords.txt')
for line in passFile.readlines():
if ":" in line:
user = line.split(':')[0]
cryptPass = line.split(':')[1].strip(' ')
print "[*] Cracking Password For: "+user
testPass(cryptPass)
if __name__ == "__main__":
main()Passwords.txt有两个来自/etc/passwd的用户(受害者和根用户),它可以很好地遍历这两个用户。我的dictionary.txt中有三个密码,由于某种原因,它只尝试第一个密码:
[*] Cracking Password For: victim
[*] Attempting password: break
[-] Password Not Found.
[*] Cracking Password For: root
[*] Attempting password: break
[-] Password Not Found.有没有人能解释一下为什么上面从书中搬来的代码不能工作?我设法通过使用“with open”来解决这个问题:
with open('dictionary.txt') as f:
for word in f:
word = word.strip("\n")
cryptWord = crypt.crypt(word,salt)
if (cryptWord == cryptPass):
print "[+] Found Password: "+word+"\n"
return
print "[-] Password Not Found.\n"
return发布于 2014-01-07 06:50:47
这是一个缩进错误。为了让它正常工作,你的'testPass‘函数应该是这样的:
def testPass(cryptPass):
salt = cryptPass[0:2]
dictFile = open('dictionary.txt')
for word in dictFile.readlines():
word = word.strip('\n')
print "[*] Attempting password: "+word+"\n"
cryptWord = crypt.crypt(word,salt)
if (cryptWord == cryptPass):
print "[+] Found Password: "+word+"\n"
return
print "[-] Password Not Found.\n"
return这样,它将遍历字典中的每个单词,并在找到密码后返回。如果它循环遍历所有内容但没有找到它,那么它应该打印"password not found“。你的问题是你的代码(为清晰起见有一点间隔)实际上是这样缩进的:
def testPass(cryptPass):
salt = cryptPass[0:2]
dictFile = open('dictionary.txt')
for word in dictFile.readlines():
word = word.strip('\n')
print "[*] Attempting password: "+word+"\n"
cryptWord = crypt.crypt(word,salt)
if (cryptWord == cryptPass):
print "[+] Found Password: "+word+"\n"
return
print "[-] Password Not Found.\n"
return看到区别了吗?像这样,它只会检查第一个单词,因为第二个"return“在循环中。请验证您的缩进(理想情况下是4个空格,如@jonrsharpe所说,或者是制表符),然后重试。我怀疑这会解决你的问题。
https://stackoverflow.com/questions/20960601
复制相似问题