bufferoverflow?

Code:
void funktion(char *wort)
{
  
char wort2[5];
strcpy(wort2,wort);

}

int main(int argc,char *args[])
{
 
funktion(args[1]);
printf("Eins!");
printf("Zwei!");

}

aus einem hacking buch konnte ich entnehmen dass man den programmfluss
beeinflussen kann indem man mithilfe eines bufferoverflows die rücksprungadresse ändern kann. in diesem fall würde ich die rücksprungadresse von "funktion" so ändern ,dass NUR die zweite printf funktion aufgerufen wird.das mache ich mithilfe von perl. anhand eines anderen programms, was bei der beigelegten live cd war hat dies auch funktioniert. jetzt versuche ich das ganze nur mit einem grundlegenden beispiel um zu sehen ,dass ich verstanden habe.

das problem jedoch ist dass nichts passiert ausser dass ein segmentation error auftritt .

ich habe sehr wenig erfahrung im hacken bisher machen können ,erwartet daher bitte nicht zu viel von mir.

danke im vorraus für eure hilfe!
mfg
 
1. Tipp: Was bedeutet denn ein "segmentation error"? Warum taucht er auf? Und wie sollte es in der Theorie korrekt funktionieren?

2. Tipp: Debugger anwerfen und gucken, wo und warum der Fehler effektiv auftritt.
 
Auf was für einem Betriebssystem testest du das? Linux / Windows? Welche Version? 32 bit / 64 bit?

Ich meine, dass es da gewisse Unterschiede gibt ...
 
Ein SegFault ist doch schon die halbe Miete.
Das bedeutet das du das Programm dazu bekommen hast auf einen Speicherbereich zugreifen zu lassen, und es schlug fehl.
Du musst halt die richtige Adresse in den Stack schreiben.

Es kommt auch drauf an wie und mit welchem Kompiler du das ganze kompilierst, denn wenn Address space layout randomization (ASLR) an
hast dann wir das alles etwas schwierieger obwohl das in einem Callstack nicht greifen sollte(soweit ich mich errinere).

Gruß

Fluffy
 
also ich arbeite mit ubuntu in einer virtualbox auf windows.
der compiler ist gcc.

also ich habe das nochmals nachgeprüft und ich habe ganz sicher die rücksprungadresse mit der adresse überschrieben die man aus dem codesegment entnehmen kann. also die adresse für den zweiten funktionsaufruf.

das komische ist ,dass das eip dann an einer völlig anderen mir unbekannten adresse liegt. bei 0xe9...
 
ich habs!

mein fehler war dass ich auch den safed frame pointer überschrieben habe.
ich bin schon am anfang darauf gekommen jedoch habe ich das ausgeschlossen,da das nach dem buch kein problem war komischerweise.

danke vielmals für eure hilfe!
 
Was für ein Hacking Buch benutzt du?


Gesendet von iPhone mit Tapatalk
 
Auf Windows XP (32 bit, MSVC 6.0) das scheint unmöglich, wenn man wort2 nicht einen bischen längeren Raum zuteilt.


Besonders, unter strcpy steht das erste Byte für wort2[5] an Addresse 12FF20h. Man muß das Rücksprungaddresse an 12FF2Ch überschreiben. Idealerweise, das Zweck ist nur das Addresse 0040B801h ins 12FF2Ch schreiben. Doch während eine späteren Überprüfung des ESP und des EBP Registers ein Fehler erlangt. Deshalb man muß mittels Buffer Code den EBP Register zuerst wiederherstellen. Problem ist das nicht alle Bytes zwischen 12FF20h und 12FF2Ch verfügbar sind.


Oder, hat irgendjemand daran (auf 32 bit WinXP, MSVC 6.0) erfolgt?
 
Zuletzt bearbeitet:
Zurück
Oben