schon wieder ich 
wie der betreff es schon sagt, geht es mir momentan um die bestimmung der rücksprungadresse. ich verstehe soweit warum man ausreichend NOPs vor dem eigentlich shellcode hinzufügen solle. nun treffe ich bei so gut wie allen texten, die ich zu diesem thema durchgelesen habe, auf folgendes programm zur "abschätzung" der adresse, wohin gesprungen werden soll:
Quelle: http://www.phrack.org/phrack/49/P49-14
was ich mich jetzt frage ist: inwiefern ist die zurückgegebene adresse relevant für das auszunutzende programm? also dieses programm "sp" läuft ja in seiner eigenen umgebung ab. wenn ich "sp" starte und es mir die adresse ausgibt, hab ich doch den stack-pointer von "sp" und nicht von dem programm, in dessen puffer der shellcode reinkommt. inwiefern haben sie überhaupt miteinander zu tun? mein verständnis der sache ist bis jetzt so, dass der stack des einen programms nichts mit dem anderen zu tun hat - ausser dass die anfangsadresse für beide dieselbe ist. warum ist dann die ausgabe dieser adresse für das andere übertragbar oder besser gesagt benutzbar (und irgendwie relevant)?
und wenn es doch miteinander zu tun hat: wie kommt es? ist diese methode der "bestimmung" des RIP demnach nur für einen lokalen exploit zu gebrauchen - dass also beide programme auf demselben rechner laufen müssen? fragen über fragen. wenn jemand da eine antwort weiß oder einen link speziell hierzu kennt, wäre es klasse, wenn ich diese infos bekommen könnte.
nur noch einmal zur verdeutlichung: es geht nicht um das allgemenite shellcode-howto, sondern speziell um diese funktion wie sie in vielen tutorials und büchern benutzt wird, mir jedoch im moment der hintergrund nicht klar ist WARUM es so funktioniert.
grüße,
alpha.

wie der betreff es schon sagt, geht es mir momentan um die bestimmung der rücksprungadresse. ich verstehe soweit warum man ausreichend NOPs vor dem eigentlich shellcode hinzufügen solle. nun treffe ich bei so gut wie allen texten, die ich zu diesem thema durchgelesen habe, auf folgendes programm zur "abschätzung" der adresse, wohin gesprungen werden soll:
Code:
sp.c
------------------------------------------------------------------------------
unsigned long get_sp(void) {
__asm__("movl %esp,%eax");
}
void main() {
printf("0x%x\n", get_sp());
}
Quelle: http://www.phrack.org/phrack/49/P49-14
was ich mich jetzt frage ist: inwiefern ist die zurückgegebene adresse relevant für das auszunutzende programm? also dieses programm "sp" läuft ja in seiner eigenen umgebung ab. wenn ich "sp" starte und es mir die adresse ausgibt, hab ich doch den stack-pointer von "sp" und nicht von dem programm, in dessen puffer der shellcode reinkommt. inwiefern haben sie überhaupt miteinander zu tun? mein verständnis der sache ist bis jetzt so, dass der stack des einen programms nichts mit dem anderen zu tun hat - ausser dass die anfangsadresse für beide dieselbe ist. warum ist dann die ausgabe dieser adresse für das andere übertragbar oder besser gesagt benutzbar (und irgendwie relevant)?
und wenn es doch miteinander zu tun hat: wie kommt es? ist diese methode der "bestimmung" des RIP demnach nur für einen lokalen exploit zu gebrauchen - dass also beide programme auf demselben rechner laufen müssen? fragen über fragen. wenn jemand da eine antwort weiß oder einen link speziell hierzu kennt, wäre es klasse, wenn ich diese infos bekommen könnte.
nur noch einmal zur verdeutlichung: es geht nicht um das allgemenite shellcode-howto, sondern speziell um diese funktion wie sie in vielen tutorials und büchern benutzt wird, mir jedoch im moment der hintergrund nicht klar ist WARUM es so funktioniert.
grüße,
alpha.