Skip to content

Commit

Permalink
Adding verbosity level to creds modules. Fixing encoding problem with…
Browse files Browse the repository at this point in the history
… basic auth.
  • Loading branch information
lucyoa committed Apr 19, 2016
1 parent ba3ffc4 commit 7d5e78c
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 63 deletions.
15 changes: 9 additions & 6 deletions routersploit/modules/creds/ftp_bruteforce.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
LockedIterator,
print_success,
print_table,
boolify,
)


Expand All @@ -32,6 +33,7 @@ class Exploit(exploits.Exploit):
threads = exploits.Option(8, 'Number of threads')
usernames = exploits.Option('admin', 'Username or file with usernames (file://)')
passwords = exploits.Option(wordlists.passwords, 'Password or file with passwords (file://)')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []

Expand Down Expand Up @@ -70,9 +72,10 @@ def run(self):
print_error("Credentials not found")

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name

print_status(name, 'process is starting...')
print_status(name, 'process is starting...', verbose=module_verbosity)

ftp = ftplib.FTP()
while running.is_set():
Expand All @@ -89,22 +92,22 @@ def target_function(self, running, data):
ftp.connect(self.target, port=int(self.port), timeout=10)
break
except socket.error, socket.timeout:
print_error("{} Connection problem. Retrying...".format(name))
print_error("{} Connection problem. Retrying...".format(name), verbose=module_verbosity)
retries += 1

if retries > 2:
print_error("Too much connection problems. Quiting...")
print_error("Too much connection problems. Quiting...", verbose=module_verbosity)
return

try:
ftp.login(user, password)

running.clear()
print_success("{}: Authentication succeed!".format(name), user, password)
print_success("{}: Authentication succeed!".format(name), user, password, verbose=module_verbosity)
self.credentials.append((user, password))
except:
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password))
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)

ftp.close()

print_status(name, 'process is terminated.')
print_status(name, 'process is terminated.', verbose=module_verbosity)
15 changes: 9 additions & 6 deletions routersploit/modules/creds/ftp_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
LockedIterator,
print_success,
print_table,
boolify,
)


Expand All @@ -30,6 +31,7 @@ class Exploit(exploits.Exploit):

threads = exploits.Option(8, 'Numbers of threads')
defaults = exploits.Option(wordlists.defaults, 'User:Pass pair or file with default credentials (file://)')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []

Expand Down Expand Up @@ -62,9 +64,10 @@ def run(self):
print_error("Credentials not found")

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name

print_status(name, 'process is starting...')
print_status(name, 'process is starting...', verbose=module_verbosity)

ftp = ftplib.FTP()
while running.is_set():
Expand All @@ -81,22 +84,22 @@ def target_function(self, running, data):
ftp.connect(self.target, port=int(self.port), timeout=10)
break
except:
print_error("{} Connection problem. Retrying...".format(name))
print_error("{} Connection problem. Retrying...".format(name), verbose=module_verbosity)
retries += 1

if retries > 2:
print_error("Too much connection problems. Quiting...")
print_error("Too much connection problems. Quiting...", verbose=module_verbosity)
return

try:
ftp.login(user, password)

running.clear()
print_success("{}: Authentication succeed!".format(name), user, password)
print_success("{}: Authentication succeed!".format(name), user, password, verbose=module_verbosity)
self.credentials.append((user, password))
except:
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password))
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)

ftp.close()

print_status(name, 'process is terminated.')
print_status(name, 'process is terminated.', verbose=module_verbosity)
15 changes: 9 additions & 6 deletions routersploit/modules/creds/http_basic_bruteforce.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
print_success,
print_table,
sanitize_url,
boolify,
)


Expand All @@ -33,6 +34,7 @@ class Exploit(exploits.Exploit):
usernames = exploits.Option('admin', 'Username or file with usernames (file://)')
passwords = exploits.Option(wordlists.passwords, 'Password or file with passwords (file://)')
path = exploits.Option('/', 'URL Path')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []

Expand Down Expand Up @@ -75,25 +77,26 @@ def run(self):
print_error("Credentials not found")

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name
url = sanitize_url("{}:{}{}".format(self.target, self.port, self.path))

print_status(name, 'process is starting...')
print_status(name, 'process is starting...', verbose=module_verbosity)

while running.is_set():
try:
user, password = data.next()
user = user.strip()
password = password.strip()
user = user.encode('utf-8').strip()
password = password.encode('utf-8').strip()
r = requests.get(url, auth=(user, password))

if r.status_code != 401:
running.clear()
print_success("{}: Authentication succeed!".format(name), user, password)
print_success("{}: Authentication succeed!".format(name), user, password, verbose=module_verbosity)
self.credentials.append((user, password))
else:
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password))
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)
except StopIteration:
break

print_status(name, 'process is terminated.')
print_status(name, 'process is terminated.', verbose=module_verbosity)
15 changes: 9 additions & 6 deletions routersploit/modules/creds/http_basic_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
print_success,
print_table,
sanitize_url,
boolify,
)


Expand All @@ -30,6 +31,7 @@ class Exploit(exploits.Exploit):
threads = exploits.Option(8, 'Number of threads')
defaults = exploits.Option(wordlists.defaults, 'User:Pass or file with default credentials (file://)')
path = exploits.Option('/', 'URL Path')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []

Expand Down Expand Up @@ -66,25 +68,26 @@ def run(self):
print_error("Credentials not found")

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name
url = sanitize_url("{}:{}{}".format(self.target, self.port, self.path))

print_status(name, 'process is starting...')
print_status(name, 'process is starting...', verbose=module_verbosity)

while running.is_set():
try:
line = data.next().split(":")
user = line[0].strip()
password = line[1].strip()
user = line[0].encode('utf-8').strip()
password = line[1].encode('utf-8').strip()
r = requests.get(url, auth=(user, password))

if r.status_code != 401:
running.clear()
print_success("{}: Authentication succeed!".format(name), user, password)
print_success("{}: Authentication succeed!".format(name), user, password, verbose=module_verbosity)
self.credentials.append((user, password))
else:
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password))
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)
except StopIteration:
break

print_status(name, 'process is terminated.')
print_status(name, 'process is terminated.', verbose=module_verbosity)
11 changes: 7 additions & 4 deletions routersploit/modules/creds/http_form_bruteforce.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
print_success,
print_table,
sanitize_url,
boolify,
)


Expand All @@ -34,6 +35,7 @@ class Exploit(exploits.Exploit):
passwords = exploits.Option(wordlists.passwords, 'Password or file with passwords (file://)')
form = exploits.Option('auto', 'Post Data: auto or in form login={{LOGIN}}&password={{PASS}}&submit')
path = exploits.Option('/login.php', 'URL Path')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []
data = ""
Expand Down Expand Up @@ -134,11 +136,12 @@ def detect_form(self):
return '&'.join(res)

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name
url = sanitize_url("{}:{}{}".format(self.target, self.port, self.path))
headers = {u'Content-Type': u'application/x-www-form-urlencoded'}

print_status(name, 'process is starting...')
print_status(name, 'process is starting...', verbose=module_verbosity)

while running.is_set():
try:
Expand All @@ -152,11 +155,11 @@ def target_function(self, running, data):

if l < self.invalid["min"] or l > self.invalid["max"]:
running.clear()
print_success("{}: Authentication succeed!".format(name), user, password)
print_success("{}: Authentication succeed!".format(name), user, password, verbose=module_verbosity)
self.credentials.append((user, password))
else:
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password))
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)
except StopIteration:
break

print_status(name, 'process is terminated.')
print_status(name, 'process is terminated.', verbose=module_verbosity)
11 changes: 7 additions & 4 deletions routersploit/modules/creds/http_form_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
print_success,
print_table,
sanitize_url,
boolify,
)


Expand All @@ -32,6 +33,7 @@ class Exploit(exploits.Exploit):
defaults = exploits.Option(wordlists.defaults, 'User:Pass or file with default credentials (file://)')
form = exploits.Option('auto', 'Post Data: auto or in form login={{LOGIN}}&password={{PASS}}&submit')
path = exploits.Option('/login.php', 'URL Path')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []
data = ""
Expand Down Expand Up @@ -127,11 +129,12 @@ def detect_form(self):
return '&'.join(res)

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name
url = sanitize_url("{}:{}{}".format(self.target, self.port, self.path))
headers = {u'Content-Type': u'application/x-www-form-urlencoded'}

print_status(name, 'process is starting...')
print_status(name, 'process is starting...', verbose=module_verbosity)

while running.is_set():
try:
Expand All @@ -145,11 +148,11 @@ def target_function(self, running, data):

if l < self.invalid["min"] or l > self.invalid["max"]:
running.clear()
print_success("{}: Authentication succeed!".format(name), user, password)
print_success("{}: Authentication succeed!".format(name), user, password, verbose=module_verbosity)
self.credentials.append((user, password))
else:
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password))
print_error(name, "Authentication Failed - Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)
except StopIteration:
break

print_status(name, 'process is terminated.')
print_status(name, 'process is terminated.', verbose=module_verbosity)
23 changes: 16 additions & 7 deletions routersploit/modules/creds/snmp_bruteforce.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import threading
import netsnmp

from routersploit.utils import print_status, print_success, print_error, print_table, LockedIterator
from routersploit import exploits
from routersploit import wordlists
from routersploit import (
exploits,
wordlists,
print_status,
print_error,
LockedIterator,
print_success,
print_table,
boolify,
)


class Exploit(exploits.Exploit):
Expand All @@ -20,6 +27,7 @@ class Exploit(exploits.Exploit):
port = exploits.Option(161, 'Target port')
threads = exploits.Option(8, 'Number of threads')
snmp = exploits.Option(wordlists.snmp, 'Community string or file with community strings (file://)')
verbosity = exploits.Option('yes', 'Display authentication attempts')

strings = []

Expand All @@ -44,10 +52,11 @@ def run(self):
print_error("Valid community strings not found")

def target_function(self, running, data):
module_verbosity = boolify(self.verbosity)
name = threading.current_thread().name
address = "{}:{}".format(self.target, self.port)

print_status(name, 'thread is starting...')
print_status(name, 'thread is starting...', verbose=module_verbosity)

while running.is_set():
try:
Expand All @@ -58,12 +67,12 @@ def target_function(self, running, data):

if res[0] is not None:
running.clear()
print_success("{}: Valid community string found!".format(name), string)
print_success("{}: Valid community string found!".format(name), string, verbose=module_verbosity)
self.strings.append(tuple([string]))
else:
print_error("{}: Invalid community string.".format(name), string)
print_error("{}: Invalid community string.".format(name), string, verbose=module_verbosity)

except StopIteration:
break

print_status(name, 'thread is terminated.')
print_status(name, 'thread is terminated.', verbose=module_verbosity)
4 changes: 2 additions & 2 deletions routersploit/modules/creds/ssh_bruteforce.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class Exploit(exploits.Exploit):
threads = exploits.Option(8, 'Number of threads')
usernames = exploits.Option('admin', 'Username or file with usernames (file://)')
passwords = exploits.Option(wordlists.passwords, 'Password or file with passwords (file://)')
verbosity = exploits.Option(True, 'Display authentication attempts')
verbosity = exploits.Option('yes', 'Display authentication attempts')

credentials = []

Expand Down Expand Up @@ -88,7 +88,7 @@ def target_function(self, running, data):
break
except paramiko.ssh_exception.SSHException as err:
ssh.close()
print_error(name, err, user, password, verbose=module_verbosity)
print_error(name, err, "Username: '{}' Password: '{}'".format(user, password), verbose=module_verbosity)
else:
running.clear()

Expand Down
Loading

0 comments on commit 7d5e78c

Please sign in to comment.