hallo,
laut Buch:
<noP Blcok><shellcode><rücksprung>
Nop ist da, weil es verschiedene Syteme gibt.
Aber warum kann ich nicht gleiche mit dem shellcode anfangen?
2.Frage:
wiso Rücksprung, mir reicht doch den shellcode, wo ist die logig?
hallo,
laut Buch:
<noP Blcok><shellcode><rücksprung>
Nop ist da, weil es verschiedene Syteme gibt.
Aber warum kann ich nicht gleiche mit dem shellcode anfangen?
2.Frage:
wiso Rücksprung, mir reicht doch den shellcode, wo ist die logig?
Die 1. Frage kann ich dir beantworten.
Und zwar kannst du nicht immer zu 100% sagen, an welche Stelle der Prozessor springt.
Deswegen gibt es die NOP-RampeEgal an welche Stelle er springt, er geht die NOP-Rampe entlang bis der Shellcode kommt.
Die 2. Frage kann ich dir nicht beantworten.
Gruß.
Athlon 700, 256MB SD 133, 20GB WD 7200 U/Min IDE 133, Elsa Erazor III Pro, 17" TFT, Windows XP Pro SP0, Opera 6, DSL 786
Zu 2) Shellcode nützt dir ja nix, wenn er nicht ausgeführt wird.
Ich habe dir mal aus dieser PDF eine passende Stelle kopiert: http://www.zotteljedi.de/stacksmashi...cksmashing.pdf
Sorry, Adobe Reader zerhaut die Sonderzeichen beim Kopieren.
Die Website zur PDF findest du hier: http://www.zotteljedi.de/stacksmashing/index.html4. Eigenen Code einschleusen
Inzwischen ist es uns moglich, die Rucksprungadresse beliebig zu manipuliern. Damit kann also Code
angesprungen werden, der im Programm bereits vorhanden ist. Viel interessanter ist es aber, eigenen
Code einzuschleusen, und diesen dann auszufuhren. Damit kann man dem Programm dann ganz neue
Tricks beibringen, von denen es noch gar nichts wusste ;-)
Die Idee ist ganz einfach: wir haben einen Puer, in den wir zum Uberlauf sogar noch mehr Daten
reinschreiben
"
durfen\, als reinpassen. Das heit erstmal: wir konnen nahezu beliebige Daten im
Programm (genauer: auf seinem Stack) unterbringen. Nahezu beliebig, weil je nach Eingabefunktion
moglicherweise bestimmte Zeichen nicht erlaubt sind. Die Funktion gets() beispielsweise bricht bei
Auftreten von 'nn' das Einlesen ab. String-Funktionen wie strcpy() reagieren auf 'n0' innerhalb der
Zeichenkette.
Ziel ist es also, eine Zeichenkette zu erzeugen, die einerseits unseren beliebigen Code enthalt, und
andererseits nur aus Zeichen besteht, die
"
verdaulich\ sind. Zunachst wollen wir dabei nur 'n0' und
'nn' vermeiden, in Kapitel 4.5 werde ich jedoch ein Verfahren zeigen, mit dem man auch Funktionen
uberlisten kann, die auf andere Zeichen reagieren.
Über das neue Zeitalter der Gehirne eines Menschen!
echo 'main() { char z[] = "ping "; for(;printf(z);z[1]^=6); }' > a.c; gcc a.c -o a; ./a # 16.11.2011 02:51
thx all,
zu 1.
so steht es auch in meinem Buch.Aber es ist mir trotzdem nicht ganz klar.
Geanu 10 Stellen hat die Variable x und beginnt 555500.
Dann überflute ich 555500 bis 555510. Dann kann ich ja dierekt mit mit dem Shellcode beginnen.
zu 2.
Verstehe ich das richtig?
Rücksprung Adressen springen = Shellcode ausführen?!
Generell kann dein Shellcode anfangen, wo er will. Hauptsache er ist irgendwo im Speicher.
Und wenn du dann im Stack die Rücksprungadresse so umgeschrieben hast, DASS SIE NOCH AUF DEINEN SHELLCODE ZURÜCKSPRINGT, dann haste was geleistet.![]()
Über das neue Zeitalter der Gehirne eines Menschen!
echo 'main() { char z[] = "ping "; for(;printf(z);z[1]^=6); }' > a.c; gcc a.c -o a; ./a # 16.11.2011 02:51
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)