Buffer Overflow für login bei C-Programm

Neue Frage »

Auf diesen Beitrag antworten »
DienerAl Buffer Overflow für login bei C-Programm

Guten Tag,
ich würde mich gerne bei folgendem Programm mit einem Buffer overflow einloggen können als Übung. Das password kenne ich dabei nicht. Nun habe ich bereits vieles versucht, beispielsweise username mit vielen Zeichen zu überladen, das userPassword zu überladen. Jedoch habe ich wahrscheinlich einen Denkfehler wie der Stack aufgebaut ist. Mir fehlt im Moment jeder Ansatz für die Lösung.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int password = 12341234;
    char username[10];
    char userPassword[10];

    printf("Enter username:");
    gets(username);
    printf("Enter password:");
    gets(userPassword);

    int inputCode = atoi(userPassword);

    if (inputCode == password) {
        printf("Logged in.\n");
    } else {
        printf("Wrong passcode.\n");
    }
}


Unter Linux habe ich bereits mit gdb mir den Assembler Code angesehen, und ich vermute, dass ich irgendwie die Rücksprungadresse verändern muss oder so. Aber wie gesagt, mir fehlt selbst der Ansatz zu einer Lösung.
Kann mir da bitte jemand helfen?
 
Auf diesen Beitrag antworten »
Karlito

Hallo DienerAl,

wir hatten das mal in der "Betriebssysteme und Sicherheit"-Vorlesung. Der Dozent hat als Grundlage diese Seite verwendet: http://www.phrack.org/issues/49/14.html#article. Ich habe mir den Artikel nie vollständig durchgelesen und weiß deshalb auch nicht, ob auch die entsprechenden Hinweise gegeben werden, welche Maßnahmen man auf modernen Betriebssystem ergreifen muss, damit ein solcher Angriff funktioniert. Aktuelle Betriebssysteme verwenden verschiedene Technologien, welche Buffer-Overflows nutzlos machen. Ich denke in dem Zusammenhang sind "Address Space Randomization", "Speicherschutz" und "virtueller Speicher", nützliche Stichworte.

Leider kann ich also nur eine halbe Hilfestellung geben und darauf hinweisen, dass Pufferüberläufe ohne das Abschalten bestimmter Mechanismen nicht mehr funktionieren sollten.

Gruß,

Karlito
Auf diesen Beitrag antworten »
eulerscheZahl

Einen Overflow kriegt man eigentlich noch ganz gut hin. Wenn man einen Funktionszeiger schreiben möchte, wird es komplizierter (Stichwort ASLR).
Das Problem (zumindest bei mir) ist, dass die password Variable nicht nach den strings steht:
code:
1:
2:
3:
4:
5:
6:
7:
	printf("username: %p\n", username);
	printf("userPassword: %p\n", userPassword);
	printf("password: %p\n", password);
//Ausgabe:
username: 0x7ffe6607a070
userPassword: 0x7ffe6607a080
password: 0xbc4ff2
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »