Buffer-Overflow bei Beispiel-Programm

Guten Tag.
Ich probiere gerade bei einem Beispiel Programm aus diesem Buch, per Perl die Rücksprungadresse umzuschreiben.
Code:
#include <stdio.h>
#include <string.h>

int check_authentication(char *password)
{
int auth_flag = 0;
char password_buffer[16];
if (strcmp(password_buffer, "pass")==0)
{
auth_flag = 1;
}
return auth_flag;
}
int main(int argc, char *argv[])
{
if (check_authentication(argv[1]))
{
printf("====ACESS GRANTED======\n");
}
else
{
printf("Acess denied\n");
}
}
Leider wurde die Beispiel-CD aus dem Buch zerkratzt, weshalb ich mir jetzt Ubuntu heruntergeladen habe... Dadurch kann ich die beispiele nich mehr 1 zu 1 nachempfinden...
back 2 Topic:
Mein Ziel: Die Rücksprungadresse von der Funktion check_authentication() so umschreiben, dass es automatich bei "ACESS GRANTED" landet...
Zuerst untersuchte ich den Speicher und stellt fest dass er ungefähr so aufgebaut ist:
0x05050605 0x05050605 0x05050605 0x05050605 <--password_buffer
0xDFF45667 0xDFF45667 0xDFF45667 0xDFF45667 <-- denke mal, dass das der Saved Frame Pointer ist
0x12345678 <----Rücksprungadresse

Meine Ziel Adresse ist z.b. 0xdeadbeef
Jetzt versuchte ich die Rücksprungadresse per Perl umzuschreiben...

programm $(perl -e 'print "A"x32 . "\xef\xbe\xad\xde"')

Da gab es den Fehler "Segmentation fault".
Meine Vermutung--->der framepointer ist doch wichtiger, als das man ihn einfach überschreiben kann^^
Also:
programm $(perl -e 'print "\x90\x90\x90\x90\"x2 . "\xef\xbe\xad\xde"')

Leider hab ich es auch net geschafft, einen Teil des Stackes mit NOP-Blöcken zu überschreiben-.-
Allerdings sind all die Adressen gerade von mir frei ausgedacht... Ich hab Ubuntu nicht installiert, weshalb ich gerade kein Zugriff auf die beispiele habe...
Ausserdem habe ich probleme dabei, bei GDB den "Intel"-Anzeigemodus einzustellen. (wie er mir den Assem-Code anzeigt)

im Buch steht, man stellt es mit "set dis intel" um... bei mir geht das iwie net^^
Er stellt mir den Assembler-Code trotzdem mit Prozentzeichen und Klammern dar...
mfg
@night@
PS: ich hoffe dass, das der richtige Bereich ist...
 
Ubuntu nutzt diverse Schutzmechanismen wie Stack Randomization um den Stack zu schützen, weswegen solche einfachen Beispiele darauf zumeist nicht mehr funktionieren. Nimm dir zum Üben am Besten ein möglichst altes Linux, bei dem solche Stackschutz-Mechanismen noch nicht drin waren (z.B. SuSE <=8.x, Redhat <=6.x o.ä., Debian <=3.x).
 
srry, aber ich finde absolut keine download-links... Alle FTP oder HTTP-Downloads verweisen auf ein Objekt, dass nicht mehr vorhanden ist...
mfg
@night@
 
Zurück
Oben