Posts by onkel_keks

    Quote

    Genau das ist aber das merkwürdige, denn so habe ich es mir auch gedacht, allerdings wenn ich nun testausgaben von get_sp() mache an verschiedenen Stellen in einem Programm, dann kommt immer die selbe Addy zurück!! egal ob ich davor nochmal int a = 2; oder float b = 3; habe !.
    Nach solchen Zuweisungen muss sich doch der Stackpointer ändern???

    achtung: durch zuweisungen alleine ändert sich der stack pointer nicht! wenn du mitten in einer funktion eine variable deklarierst, wird diese vom compiler zu den lokalen variablen gezählt, damit wird nur der stack frame der aktuellen funktion größer. der aleph one-artikel erklärt das mit folgendem diagramm (ich hoffe das forumssystem ruiniert die formatierung nicht komplett):


    Code
    1. bottom of top of
    2. memory memory
    3. buffer2 buffer1 sfp ret a b c
    4. <------ [ ][ ][ ][ ][ ][ ][ ]
    5. top of bottom of
    6. stack

    hier sind buffer2 und buffer1 lokale variablen und a, b, und c auf den stack gepushte werte(argumente für die funktion). in c kann man afaik nicht "direkt" werte auf den stack pushen; das geht nur explizit mit inline assembler oder implizit durch einen funktionsaufruf. wenn du folgendes machst

    dann bekommst du sehr wohl verschiedene stack pointer-werte.


    es ist für das verständnis hier sehr hilfreich (und wenn wir dann zu reverse engineering kommen umso mehr), nicht in C, sondern in Assembler zu denken.



    Quote

    Ein weiteres Bsp.: Ausgabe von get_sp() liefert immer eine höhere Adresse als der Anfang eines Buffer Arrays ??? wie soll das möglich sein wenn der Buffer ganz oben am Stack liegt und der Stack vom hohen zu niedrigem Adressspeicher wächst???

    [sorry, vorhin stand hier schwachsinn]
    wie hast du das getestet? bei mir liegen die lokalen variablen auf einer höheren adresse als der stack pointer...
    ich teste das so:


    und das gibt mir

    Code
    1. buffer: 0xbffffbf4
    2. sp: 0xbffffbc8


    Quote

    Ist was beim InetSec Server anders (also die Arbeitsumgebung)?

    Die Frage kann ich dir leider nicht eindeutig beantworten, da kenn ich mich mit Linux zu wenig aus. Mein Erklärungsversuch wäre folgender: Die Umgebungsvariable mit dem Shellcode wird in einem Programm, nennen wir es ./exploit, generiert. In diesem Shellcode steht als Sprungadresse eine absolute Speicheradresse (nämlich die, die die "echte" rücksprungadresse später überschreiben wird). diese absolute speicheradresse errechnet sich durch den vom user angegebenen offset und dem stack pointer auf der main() ebene von ./exploit. der so generierte shellcode wird nun in einem anderen programm, ./vulnerable, verwendet, unter der annahme, dass der stack pointer auf der main() ebene von ./vulnerable denselben wert hat wie der stack pointer auf der main() ebene von ./exploit. Und aus einem bestimmten Grund (wie gesagt, da reichen meine Linux-Kenntnisse nicht), trifft diese Annahme im Aleph ONe-Tutorial zu, aber auf unserem Server nicht (zumindest nicht immer). Daher kann es sein, dass die im Tutorial angegebenen Offsets nicht stimmen.
    Kann da evtl jemand der besser bescheid weiß was dazu sagen?

    Hallo,


    aaalso...bei einer so komplexen Materie ist es klar dass die Übersicht schnell verlorengeht. Jetzt kann man sich alle Adressen und das Stack-Layout mit Zettel und Stift mühsam überlegen und aufschreiben nur um dann draufzukommen dass man eine Kleinigkeit übersehen hat und alles nochmal machen muss. ODER man verwendet einfach einen Debugger und schaut sich an was passiert.
    LERNT DEN DEBUGGER ZU LIEBEN - er ist mehr oder weniger das wichtigste Werkzeug für jemanden, der wissen will, was im Computer eigentlich passiert. Ich weiß, GDB ist furchtbar, aber wenn man mal damit zurechtkommt ist die Challenge 2 ein Kinderspiel.
    Genug der Predigt; zu den konkreten Fragen:


    fuxi17:

    Quote

    bei exploit3.c bekomme ich allerdings auch immer einen segmantation fault und habe keine ahnung warum? ich wuerde mal auf ein adressproblem tippen.

    ich nehme an, du springst an die falsche adresse. es gibt aber einen einfachen weg, herauszufinden, was genau falsch läuft: genau, debugger anwerfen und durchtracen. gdb-Tutorials gibts genug falls das ein Problem sein sollte.


    Quote


    des weiteren wuerde mich auch interesieren, ob man fuer vuln1.c einen eigenen shellcode schreiben muss, oder einen schon vorhandenen nehmen kann? problem ist ja allerdings dieses gemeine stoppzeichen.

    Ach ja, dieses gemeine stoppzeichen...nachdem dieses ja im shellcode vom aleph one-tutorial 2x vorkommt, kann man diesen shellcode nicht so einfach verwenden [ich hoff mal ich hab jetzt nicht zuviel verraten...:rolleyes:]. überleg mal, was jede einzelne assembler-instruktion im shellcode genau macht. dann schau dir an, welche assembler-instruktion für das stoppzeichen verantwortlich ist. und dann ersetze die verantwortliche instruktion durch eine, die logisch gesehen dasselbe tut aber keine bösen zeichen enthält...ist recherchearbeit, ich weiß...
    übrigens nicht vergessen: wenn man den shellcode ändert kann es leicht passieren, dass die offsets der realtiven sprünge (call, jmp) nicht mehr passen. das muss man dann ebenfalls entsprechend anpassen.


    Tno:

    Quote

    Folgendes Problem: Bei Ausführung am Server bekomme ich immer einen segmentation Fault.
    Warum? Wie schaut hier der Stack aus?

    selbiges wie fuxi17...der debugger weiß alles. auch wie der stack aussieht. man muss ihn nur fragen. angenommen du hast irgendwo im programm einen breakpoint getriggert und willst wissen wie der stack gerade aussieht. dann würde ein befehl wie "p $esp" den aktuellen stack pointer ausgeben und "x/20xw $esp-32" den speicherbereich um den stack pointer. und so kann man sich recht gut ein bild von den abläufen im programm machen.


    Quote

    Vielleicht kann mir wer den movl esp,eax Befehl genauer erklären, ich dachte das wäre der stack
    pointer der immer an den Top of the Stack zeigt???

    "movl esp, eax" kopiert den stack pointer (esp) in das akkumulatorregister (eax). der stack pointer zeigt immer auf das zuletzt auf den stack gepushte (double)word.


    Quote

    Wie das Bsp exploit3.c im Dokument ausgeführt werden kann ohne einen Offset anzugeben ist mir auch
    ein Rätsel.
    Wenn ich die Ret-Addy, welche an den Anfang des Stacks zeigt, in den Buffer schreibe werde ich ja nicht
    mit der ret-addy in den Anfangsbereich des buffer Array zeigen??

    Mir ist die Frage nicht ganz klar...kannst du das eventuell anders formulieren? Soweit ich sehe, wird ja (zumindest implizit durch die konstante DEFAULT_OFFSET) ein offset angegeben...



    viel erfolg
    onkel_keks

    nein das hilft nicht das Prob ist Rlimit blockiert alle nachfolgenden Prozesse somit sobald er es schafft ein fopen zu blocken (was mir damit gelinkt), kann er den nachstehenden Call -> less nicht mehr ausführen


    daher ist Rlimit sicherlich keine Lösung :(


    Das verstehe ich nicht ganz...warum kann der Call zu less nicht ausgeführt werden?

    Danke für die Antworten,


    tja...interessante Sache.


    > also ich stuf die mündliche variante schon als einfachere variante ein, außer du bist natürlich rechnerische gut drauf in den bereichen, dann gehts.


    können vor lachen...schriftlich gut...pffft :p
    ich hätt an sich nichts gegen eine mündliche (im gegenteil), ich dachte allerdings, da der termin für 9999 teilnehmer ausgelegt ist, sie wäre schriftlich. weiß übrigens wer, wann und wo die prüfung ist?

    Hallo,


    da ja irgendwann, also am 3.10., also ziemlich bald eine ET-Prüfung ansteht, die ich vorhabe zu machen...
    Gibt es irgendwelche Angaben von alten Prüfungen? Wie sieht die Prüfung aus? Und ja, ich kenn die alten Threads in diesem Forum, da gehts aber immer nur um die mündliche Prüfung...
    Was muss man für die schriftliche Grünbacher-Prüfung können/lernen? Wie wird was gefragt?



    Danke,
    onkel_keks

    gut, antworte ich mir halt selbst ^^


    also, wen's interessiert (noch hatte ich allerdings nicht die zeit, eines dieser tools selbst zu testen):


    ein guter hex editor soll der HT Editor sein (hxxp://hte.sourceforge.net/screenshots.html). kann auch disassemblieren und ist damit sowas wie hiew für linux. siehe screenshots.
    übrigens soll ida pro mit wine ganz gut funktionieren. das wär doch was.


    debugger hab ich bis jetzt nur den gefunden:
    hxxp://www.zero-bugs.com/2.0/product_intro.html
    immerhin eine gui, allerdings weit von ollydbg entfernt (wo sind in den screenshots die registerinhalte? immer diese source-level-debugger...:rolleyes:)


    für weitere anregungen bin ich immer noch dankbar :p

    allgemein ist es recht hilfreich, sich alles im debugger anzusehen. aus memory dumps, registerinhalten und disassembly sieht man genau, was wann wo passiert.
    es zahlt sich aus, sich damit zu beschäftigen...auch wenns mühsam is...
    ürbrigens wird keines der examples aus dem aleph one tutorial fix-fertig mit vuln1.c funktionieren. man muss aber nur eine kleinigkeit aus den/m beispiel-exploit(s) ändern, damit es funktioniert.


    wodka: schau mal, wo und warum dein segementation fault passiert.

    ja, SPF war irgendwie gemein. aber wenn man sich alte prüfungen anschaut, stellt man fest, dass SPF bei fast jeder gekommen ist.
    wirklich gemein fand ich die frage "nutzt vpn was wenn manche tcp-connections nicht funktionieren". was soll man darauf antworten?

    hallo allerseits, aus gegebenem anlass (challenge 6) habe ich mich in letzter zeit etwas mit reverse engineering unter linux beschäftigt (neuland für mich). etwas schockiert hat mich dabei die geringe auswahl an tools. aber vielleicht habe ich auch nur nicht richtig gesucht. deswegen meine frage: kennt ihr "gute" reverse-engineering tools für linux? konkret einen



    • debugger
      kommt mir jetzt bitte nicht mit gdb...mag ja sein dass gdb viel kann aber es ist soooo umständlich. wer ollydbg (leider nur für windows) kennt, weiß, was ein guter user-level-debugger ist. kernel-level brauch ich ja gar nicht.
    • disassemblierer
      habe lida und bastard gefunden, ersteres gibt nichts aus, zweiteres lässt sich nur mit makefile-hacks kompilieren und lässt sich dann nicht ausführen
    • hex editor
      ghex ist nicht das wahre...


    und diese at&t-assembler-syntax...:puke: warum verwenden leute so was?


    wenn also wer gute tools kennt, bitte melden :D


    danke, lg onkel_keks

    ls -al ist dein Freund. ;)


    ja...so viel is klar...
    ich scheitere nur blöderweise schon daran, shell-commands auszuführen. special characters wie *, | oder `` werden doch gefiltert, oder?
    immerhin konnte ich schon mal den gesamten inhalt von /etc auflisten (also incl. dateiinhalten - und die memory usage von firefox hat mein system fast zum absturz gebracht :p). wenn ich denselben trick aber auf /proc anwenden will, krieg ich nur ein timeout. und um die prozessspezifischen informationen in /proc zu finden, brauch ich doch die pid... und das ist es doch genau, was ich finden soll...
    also: hints? anyone? please? :confused:


    mfg onkel_keks

    Hallo,


    es heißt ja auf de LV-Homepage, man darf fremde Model-Loader verwenden (abgesehen von deren Draw() od. Render()-Methode(n)). Müssen das kompilierte Loader (aka LIBs oder DLLs) sein oder kann man auch den Sourcecode eines fremden Loaders verwenden (natürlich entsprechend gekennzeichnet)?

    Hallo,


    wenn ich Elektrotechnik 1 VO+UE aus dem Elektrotechnik-Studium machen würd, glaubt ihr, das könnte man für Elektrotechn. Grundlagen der Informatik anrechnen lassen? Ich weiß halt nicht so genau, was man themtisch in Elektrotechn. Grundlagen so macht, aber rein von den ECTS wärs möglich...


    Comments?

    ouais, meine lsg:


    F(x) = { 0: x<=a; x/(b-a)-a/(b-a): a<x<b; 1: x<=b }
    f(x) = F'(x) = { 0: x<=a; 1/(b-a): a<x<b; 1: x>=b }


    wer fragen hat möge sich melden da ich gerade nicht wirklich die zeit hab viel zu erklären wenns eh keinen interessiert. HO!

    tiare: hab ich auch so
    edit: sorry, ich meinte ich habs so ähnlich. ich rechne mal ein bisschen herum...

    komme auf das Selbe.


    ??
    was hast du ausprobiert und was ist dasselbe wie...?
    bezüglich mickles post: i can see your point. irgendwie ist die angabe schon so schwammig.


    was ich mir allerdings dazu denk: die wahrscheinlichkeit, dass der monitor von anbeginn seines jämmerlichen lebens an 8 jahre hält, ist irgend ein wert x.
    nach 3 jahren wird der monitor verkauft. wir wollen die wahrscheinlichkeit, dass der monitor 5 weitere jahre hält (=y). ob der konkrete monitor zum zeitpunkt des verkaufs funktioniert oder nicht ist eigentlich egal, da die wahrscheinlichkeitsrechnung sich ja nicht auf konkrete fälle bezieht (d.h. ich kann nicht berechnen, wie lange _dieser_ monitor noch halten wird).


    y kann jetzt nicht derselbe wert sein wie x, oder? man berechnet bei y ja die wahrscheinlichkeit, dass der monitor noch 5 jahre hält (unter der bedingung, dass der m. schon 3 jahre gelebt hat). du weißt also bei der berechnung von y schon, dass der m. 3 jahre gelebt hat (i.e. die wahrscheinlichkeit, dass der m. innerhalb der ersten 3 jahre stirbt ist 0) - bei x wissen wir das nicht (die w. dass der m. innerhalb der ersten 3 jahren stirbt ist != 0).
    ich weiß, ich drücke mich sehr konfus aus. :rolleyes:

    aaaber, das problem sind die 2d-atoffs die werde einfach gar nicht darsgestellt bzw. einige sehe ich wenn ich die camera.distanc runterschraube...


    der fehler kommt mir bekannt vor :rolleyes: bei mir war der fehler, dass ich zwar brav nur die worldtransformation gemacht hab, wenn das doOnlyWorldTrans flag gesetzt war, nachher aber getDeviceCoordinates auch bei gesetztem flag ausgeführt hab. wenn das flag also gesetzt ist soll man - wie der name sagt - nur die world transformation machen, dann müssten die 2d files ganz normal (wie nach fertigstellung des 2. bsp) aussehen (natürlich nur wenn das hakerl "do only world trans." im gui gesetzt ist)

    es gäbe da noch die curve-funktion mit der sich die sache einfacher gestalten lässt...


    Code
    1. curve(1-exp(-x^2/2), from=0, to=5)


    was ich nicht zusammenbring: eine composite function zeichnen...also für x<0 y=0 und für x>=0 y=1-exp(-x^2/2) in einem plot. wär toll wenn das wer erklären könnt :rolleyes:


    sollten die device koordinaten NICHT neu berechnet werden (die 2d files sind schon in device koordinaten)


    ahhh...das wars...danke! :rolleyes:


    dann muss ich nur noch das kamera-problem lösen...hat da vielleicht irgendwer eine idee? :lauscher: oder noch besser: eine angaben-interpretations-hilfe?
    wie gesagt:

    Quote from onkel_keks


    wie kann es sein, dass die kamera auf den ursprung schauen soll, wenn sie sich im ursprung befindet (zprp=0; zvp=-2)?



    grüße
    onkel_keks