Mit Puffer-überlauf, der zum ausführen von shell-code
Ich habe lernen computer-Sicherheit in letzter Zeit und kommen über ein paar Probleme, und ich habe einige Schwierigkeiten mit diesem im besonderen.
Ich eine Funktion mit einer festen Puffer ich brauche zu überlaufen, um zum ausführen von shellcode in der Datei shellcode. Die Funktion ist ganz einfach:
void vuln(char *str) {
char buf[64];
strcpy(buf, str);
//function provided to display stack on command prompt
dump_stack((void **) buf, 21, (void **) &str);
}
Meine erste Vermutung war, zum ändern der Rücksprungadresse, die eip, der Funktion, um zu finden und auszuführen, was in der Datei shellcode, aber ich merkte, ich habe keine Adresse, um die Datei, die ich darstellen kann, in einen hexadezimalen Wert. Ich bin ziemlich sicher, dass ich brauche zu manipulieren, um die Rückkehr-Adresse, also derzeit, was ich bin, eine Berufung ist:
//the string is passed as a command line arg
./buffer_overflow_shellcode $(python -c "print 'A'*72 + '\x41\xd6\xff\xff' ")
meiner Ausgabe:
Stack dump:
0xffffd600: 0xffffd7fd (first argument)
0xffffd5fc: 0x08048653 (saved eip)
0xffffd5f8: 0xffffd641 (saved ebp)
0xffffd5f4: 0x41414141
0xffffd5f0: 0x41414141
0xffffd5ec: 0x41414141
0xffffd5e8: 0x41414141
0xffffd5e4: 0x41414141
0xffffd5e0: 0x41414141
0xffffd5dc: 0x41414141
0xffffd5d8: 0x41414141
0xffffd5d4: 0x41414141
0xffffd5d0: 0x41414141
0xffffd5cc: 0x41414141
0xffffd5c8: 0x41414141
0xffffd5c4: 0x41414141
0xffffd5c0: 0x41414141
0xffffd5bc: 0x41414141
0xffffd5b8: 0x41414141
0xffffd5b4: 0x41414141
0xffffd5b0: 0x41414141 (beginning of buffer)
Segmentation fault
das python-Skript einfach druckt 72 Buchstabe A ist zu einem überlauf des Puffers zu dem Punkt, der EDV und eip, nachdem ich die Stelle des edp-Adresse mit der zusätzlichen Adresse und kommen Sie an die Adresse zurück, bereit, Sie zu manipulieren. Jede Hilfe wird wirklich geschätzt, danke!
-really-no-protection
und -make-me-vulnerable-to-everything
Fahnen? Das ist heute notwendig für die Nutzung.Fischer ja, ich habe kompiliert früheren computer-Sicherheits-Programme korrekt ausgeführt haben und in der Lage gewesen, zu einem überlauf führen Sie ohne Probleme. Ich weiß, dass mein Programm läuft wie vorgesehen
Okay, nur die überprüfung der offensichtlichen verdächtigen.
Haben Sie deaktivieren address space layout randomization? (echo 0 > /proc/sys/kernel/randomize_va_space)
Jungs, das Programm ist in Ordnung, ich schwöre es. Es kompiliert und funktioniert dementsprechend keine Gedanken über die compile-Zeit, ich brauche Hilfe mit der Logik überlaufen und das eigentliche Programm.
InformationsquelleAutor Syntactic Fructose | 2013-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ich denke, vielleicht ist das ein wie ein Buffer-Overflow-Lab in Computer Systems: A Programmer ' s Perspective. Erstens, nutzen
objdump
um die statische Adresse. Zweite, starten Sie ihn mitgdb
um herauszufinden, die Adresse des stack. Dann füllen Sie den Puffer mit einem solchen string, der überschreibt die return-Adresse auf den Puffer (so dass Sie können exploit-code, alternativ könnte man Aufruf anderer code im Programm).Schauen Sie sich dieses pdf das als Leitfaden dient, um das Labor. Es konnte Ihnen einige Einblicke.
Als darauf hingewiesen wird, dass viele compile-time-flags sind erforderlich, um dies zu erreichen. ( Ich würde prüfen, welche und kommen bald wieder ). Alternativ diese post bietet eine Anleitung zum kompilieren ist ein Beispiel dafür.
InformationsquelleAutor phoeagon
Den Sie ändern möchten die RET-Adresse, so dass, wenn die Funktion endet es nicht zurück auf den Aufrufer aus, sondern auf den Beginn Ihres shellcode.
((, Wie ein kurzer überblick über das, was shellcode ist, es ist ein Satz von assembly-Anweisungen (also stark abhängig von der Plattform, die Sie ausführen anfällig Prozess), die das ausführen einer shell (in der Regel eine root-shell), so fallen Sie ab in einer schönen Umgebung, die man ausnutzen kann.))
Nun wieder, was Sie wollen, ist zu zeigen das RET bei der ersten Versammlung Anweisung in deinem shellcode. Das seltsame etwas ist, dass Sie es in einer separaten Datei. Ist das erforderlich?
Wie es normalerweise gemacht wird, ist, dass Sie so etwas wie dieses:
So, jetzt, wenn Sie Ihre Funktion zurückgegeben wird, gibt es unter der Adresse der shellcode[] string, und es wird weiterhin die Ausführung von Anweisungen von dort. Das ist, was Sie wollen. Weil diejenigen, die Anweisungen geben Sie die root-shell (oder was auch immer es ist, dass Ihre shellcode).
Bitte beachten Sie, dass die oben ist nur Beispiel-code, es ist nicht einmal kompilieren getestet.
Wenn ich es nicht verstehen, Ihr problem oder wenn ich nicht gut genug erklären, fühlen Sie sich bitte frei zu Fragen.
InformationsquelleAutor Paul Irofti
wenn 'buff' überflogen, der extra-input drehen Sie den "pass" in ein größer als 0 ist, machen es zu einem 'wahren' Wert.
buff
Eingang Klamotten alle Register geschoben, und/oder die Rückkehr-Adresse, anstattpass
.InformationsquelleAutor BufferOverflowFan
Es ist nicht schwer, wenn Sie wissen, wo zu suchen, wie gesagt, vor dem öffnen der app w/gdb.
r(un). Dann habe ich(nfo) (r egisters), um zu sehen, warum es abgestürzt ist. zerlegen ist sehr nützlich aswell.
Auch, (ich nehme an, Sie wissen):
ist eigentlich
InformationsquelleAutor Stolas