PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sicherheitslücken durch speicherüberläufe [verständnisfrage]



Cypher
13-08-2007, 01:31
hi,

es ist ja allgemein bekannt, dass wenn man über speicherbereiche rausschreiben kann sicherheitslücken entstehen über die man irgendwie eigenen code ausführen kann.
kann mir wer erklären wie ungefähr das funktionieren soll?

ich hab versucht das mit nem kleinen (c-) programm nachzuvollziehen, das ne zeile einliest und wieder ausgibt. allerdings bekomm ich da nur n speicherverletzungsfehler wenn ich zuviel eingebe.

das "programm" sieht so aus:

#include <stdio.h>

int main() {
char str[10];
scanf("%s", str);
printf("%s", str);
return 0;
}
vielleicht ist auch das programm zu billig um das auszuprobieren?
wie gesagt würde gern verstehen wie das funktioniert.


mfg, cypher

jan61
13-08-2007, 04:22
Google doch mal mit "buffer overflow example", da wirst Du erschlagen mit Material.

Jan

bischi
13-08-2007, 08:30
Das Problem ist halt dann, wenn du in den Bereich eines Programmes im Memory reinschreiben kannst, welches mit Admin-Rechten läuft :D (um gleich das krasseste Beispiel zu nennen).

MfG Bischi

Cypher
13-08-2007, 13:14
danke erst mal für die antworten, hab mit google einen artikel dazu gefunden der recht verständlich ist: http://mixter.void.ru/exploit.html

aber das beispielprogramm verwendet ein konstrukt wie dieses hier:

int main() {
char foo[5];
*(long*)foo[0] = 0x78787878;
foo[4] = '\0';
puts(foo);
}
und das gibt bei mir einen segmentation fault...
dabei bewege ich mich doch innerhalb meines speicherberreichs

und das "*(long*)" hab ich direkt von obiger seite übernommen... kann mir jemand sagen wohin das castet? das dürfte doch dann die addresse eines zeigers sein oder?

also mein hauptproblem is im moment: wie kann ich über ein array-element hinausschreiben?

edit: hab gerade den fehler gefunden.... hab ein "&" vor dem "foo[0]" vergessen...