Guten Tag.
Ich probiere gerade bei einem Beispiel Programm aus diesem Buch, per Perl die Rücksprungadresse umzuschreiben.
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...
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");
}
}
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...