Hallo
Moin,
Über den MSBlast gelesen:
Dieser erzeugt einen Buffer Overrun und führt dadurch
Programm-Code aus.
Ich kenn nur buffer overflows. Wird wohl das gleiche sein.
Meine Fragen:
Was bedeutet ein Buffer Overrun?
Das Ueberschreiben von Speicherbereichen, meist ungewollt, im boesen Fall beabsichtigt.
Wie kommt es dass dadurch Code ausgeführt wird?
Ganz einfach
. Im Speicher gibt es etwas, dass nennt sich Stack (Stapel). Klingt komisch, ist aber so. Wenn ein Programm ablaeuft und in eine Unterfunktion springt muss sich der Rechner ja irgendwie merken, woher die Funktion gerufen wird, weil er ja irgendwann wieder zurueck springen will, um mit dem eigentlichen Programm weiterzumachen. Logisch. Er schreibt die Adresse (und einigen anderen Krempel) also auf den Stack, so aehnlich, wie ihr auf euren Notizblock, und springt in die Funktion. Ausserdem wird auf diesem Stack auch Platz fuer Daten angelegt, die nur die Funktion selbst braucht, eben auch wie im Notizbuch. Gut.
Nun hat jemand eine kaputte Funktion programmiert. Das ist der Fred Foobar. Hallo Fred. Die Funktion soll nach dem Namen des Nutzers fragen. Den Namen notiert sich Fred im Datenbereich der Funktion und macht damit noch Sachen, die uns jetzt mal nicht interessieren. Und da der Fred nur Leute kennt, deren Namen weniger als 10 Buchstaben haben, laesst er auf dem Stack auch nur Platz fuer 10 reservieren.
Sein schnippischer Kumpel, das ist der J. Random Hacker (Hallo J.) weiss das. Er startet das Programm und laesst die Funktion von Fred aufrufen. Jetzt gibt der Spitzbube aber anstatt seines Namens ‚J. Random0x&d§2[$´#,s"Xii-‘ ein. Freds Funktion schreibt ‚J. Random0‘ auf ihren persoenlichen Platz im Notizbuch. Dann macht die Funktion den vorgesehenen Krempel und springt schliesslich den Code von J. Random an… halt, wieso das denn?
Okay, das ist der Herr MHz. Hallo, Herr MHz. Der Herr MHz hat frueher mal hier gearbeitet (sein juengerer Bruder GHz hat ihn abgeloest) und wird fuer uns mal die Maschine langsamer laufen lassen, damit wir sehen, was mit dem ‚x&d§2[$´#,s"Xii-‘ von J. passiert. Normalerweise geht das nicht, aber fuer uns macht er eine Ausnahme.
Dem Fred seine Funktion schaufelt nicht nur die ersten 10 Buchstaben auf den Stack, schliesslich ist J. Random Hackers eingegebener Name da noch nicht zu Ende. Sie macht munter weiter bis zu einer Markierung nach dem ‚x&d§2[$´#,s"Xii-‘. Koennt ihr euch noch an den notierten Ruecksprungpunkt erinnern? Der steht da auch. Da der Fred aber so bloed war, zu wenig Platz auf dem Notizbuch vorzusehen, radiert seine Funktion die Notiz der Ruecksprungadresse weg und schreibt den Krempel von J. dahin. Klar?
J. ist nun aber ein ausgesprochen cleveres Kerlchen. In dem Kauderwelsch steht naemlich die Adresse seiner eigenen Funktion, die er vorher irgendwie in den Speicher gelegt hat. Und wie man sowas liest und wie man seinen eigenen Code im Speicher ablegt und vor allem wiederfindet, das zeigen wir euch in der naechsten Folge der lustigen Hack- und Crackgeschichten.
Und was ist das für ein Code Java, Assembler oder was?
Maschinencode. Was anderes kann der Rechner sowieso nicht.
Viele Grüsse
Ratz
In welcher Form hab ich gerade das Niveau des Bretts beinfluss?
Gruss vom Zentrum.