Buffer Overload - kann da mal jemand?

Hi,
ich habe noch nie kapiert, wie ein Exploit des Buffer Overloads funktioniert.
Diffus ist mir klar, daß man ein Programm mit Daten füttert, die zu groß für irgend einen internen Puffer sind, und daß dies „irgendwie“ benutzt wird, um plötzlich Root-Rechte zu erlangen.
Aber wie geht das genau? Warum habe ich Root-Rechte, wenn ich einen Puffer volllaufen lasse?
Kann mir das jemand verständlich erklären?

Gruß

J.

Moin

ich habe noch nie kapiert, wie ein Exploit des Buffer
Overloads funktioniert.

Overload ist mir neu, overrun kenn ich.

Diffus ist mir klar, daß man ein Programm mit Daten füttert,
die zu groß für irgend einen internen Puffer sind, und daß
dies „irgendwie“ benutzt wird, um plötzlich Root-Rechte zu
erlangen.

dazwischen liegen noch ein paar kleine Details:

Ein Puffer liegt an einer bestimmten Stelle im RAM. Diese Stelle ist mehr oder weniger bekannt (das Prog. legt sie beim start immer an die gleiche Stelle, es sei denn es läuft komplett dyn. oder in einer VM).

schreibt man mehr rein als reinpasst gehen die zusätzlichen Daten nicht verloren sondern landen auch im RAM, direkt „hinter“ dem Buffer. Wenn an dieser Stelle nun ein Teil eines Prog. liegt wird diese Stelle irgendwann als Programmcode dieses Prog. ausgeführt. Wenn dieses Prog. root-rechte hat ist man „drin“. Cross-Programm-Puffer-overrun Angriffe funzten nur unter windows, gute Systeme wie z.b. Linux, Unix,… haben ein funktionierendes Speicherschutzmodell. Das verhindert den Angriff nicht prinzipel, macht die Sache mit den root-rechten aber komplex.

Eine einfache if-then-Anweisung, für deren Programmierung man etwa 5-10sek. macht diesen Angriff von vorne herein unmöglich. Leider bedenken dass viele Programmierer nicht, und so entstehen immerwieder solche Löcher. (ok, in der Realität ist es komplexer und kostet vor allem Rechnzeit)

Aber wie geht das genau? Warum habe ich Root-Rechte, wenn ich
einen Puffer volllaufen lasse?

wenn der Puffer in das richtige Prog. überläuft kanns du alles kriegen.

cu