system() exploit auf Linux/UNIX
-
Und was hat das mit C und der Funktion system zu tun?
EDIT: Hab schon verstanden, was gemeint war. Man kann ja dadurch die Wirkung seines system-Aufrufes manipulieren. Dennoch sehe ich nicht den alleinigen Sicherheitszusammenhang zu system, da das allein ja doch eigentlich kein Sicherheitsrisiko darstellt außer dem üblichen Abschottungsprinzip
-
supertux, wenn du mein passwort geknackt hast und in meiner bashrc rumpfuscht, ist ohnehin schon alles verloren. Da brauchts dann auch kein system-benutzendes programm mehr
Diese path-sache ist eher harmlos. Viele dumme Programme verwenden sogar exec wo sie eigentlich system oder wenigstens execlp verwenden sollten. Das sind dann die wo man /usr/bin/vim eingeben muss, statt einfach nur vim.
system ist eigentlich nur problematisch, wenn man fremddaten weiterreicht.
sprintf(buf, "cp %s %s", a, b); system(buf);
sowas kann ganz schön in die hose gehen und man bräuchte nichtmal den gemeinen hacker dazu sondern nur eine datei die zB. "balabala!!!.mp3" heißt.
-
DrGreenthumb schrieb:
supertux, wenn du mein passwort geknackt hast und in meiner bashrc rumpfuscht, ist ohnehin schon alles verloren. Da brauchts dann auch kein system-benutzendes programm mehr
das sollte auch nicht der ultimative Exploit sein, sondern demonstrieren, was man machen kann. Klar, wenn ich dein Passwort hab und mein Absicht ist es zu löschen, dann tue ich es sofort ohne irgendetwas setzen zu müssen ...
-
supertux schrieb:
DrGreenthumb schrieb:
supertux, wenn du mein passwort geknackt hast und in meiner bashrc rumpfuscht, ist ohnehin schon alles verloren. Da brauchts dann auch kein system-benutzendes programm mehr
das sollte auch nicht der ultimative Exploit sein, sondern demonstrieren, was man machen kann.
kriegst du auch ein Beispiel hin, wo es noch irgendeinen Sinn macht den Pfad zu verändern, wenn man als Angreifer bereits schon zu so einem Eingriff in die Intimsphäre in der Lage ist?
-
hmm!
ich dachte eher an ein exploit, das es zeigt, wie man damit einen bösen code in
system("...") reinkopieren kann.Ich meine, wenn der code mit system schon läuft.
Und nicht wie ich andere dateien erstelle und dort eine shell zum ausführen bringe oder ähnliches.
Auch nicht wenn ich den code mit system verändere damit ich es ausnutzen kann, wie
DrGreenthumb es zeigt.
Es ging nur darum, um zu wissen, wie sowas aussieht.
Erst reden alle über system, dass man es nicht benutzen soll und dann kann keiner ein exploit machen?
-
maximo schrieb:
Erst reden alle über system, dass man es nicht benutzen soll und dann kann keiner ein exploit machen?
"alle" sind hier nur die, die es nicht besser wissen. Ansonsten habe ich ein Beispiel gezeigt wo's zu problemen kommt. Noch offensichtlicher: eine der Dateien könnte "; rm -rf ~ ;" heißen.
-
vielleicht bin ich mit c nicht so weit, aber da habe ich kein signal gesehen oder auch keinen code
also könntest du mir das näher erklären bitte?
danke schön
-
system gibt den befehl an /bin/sh (oder cmd.com oder was auch immer) weiter, wo er dann erst von der shell interpretiert wird.
In der shell gibts jede menge zeichen die eine beliebige bedeutung haben können und darum weiß man nie, was die shell damit eigentlich genau macht.
Ein Semikolon trennt zum beispiel befehle voneinander.
-
DrGreenthumb schrieb:
system ist eigentlich nur problematisch, wenn man fremddaten weiterreicht.
Oder man sich auf Resultate von system verläßt (zB ausgeschriebene Dateien oder sowas) was unter geeigneten Umständen, soll heißen, geeignete sh, race conditions produzieren kann.
maximo: Hmm, man kann system auch dann nicht benutzen wollen, wenn es keine primäre Sicherheitslücke darstellt, so wie man feof idR nicht benutzen will.
-
maximo schrieb:
Erst reden alle über system, dass man es nicht benutzen soll und dann kann keiner ein exploit machen?
Hmmm, für dich mal mein beliebtes Kanonenbeispiel:
Vergleiche system() mal mit einer Kanone. Und eine systemspezifische Funktion als deine Hand.
Nun hast du die Aufgabe eine (unverschlossene) Tür zu öffnen. Mit was wirst du es wohl eher machen?
-
DrGreenthumb schrieb:
system gibt den befehl an /bin/sh (oder cmd.com oder was auch immer) weiter, wo er dann erst von der shell interpretiert wird.
In der shell gibts jede menge zeichen die eine beliebige bedeutung haben können und darum weiß man nie, was die shell damit eigentlich genau macht.
Ein Semikolon trennt zum beispiel befehle voneinander.Ja, genau.
Die Shell muss auch nicht /bin/sh sein, sondern ist von System anhängig. Du kannst auch system benutzen, aber du kannst dich nicht darauf verlassen, dass das, was du mit system ausführen willst, auch ausgeführt wird. Ein Typisches Beispiel willst du: system("clear"); Ich kenne manche UNIX Benutzer, die kein clear haben, und wenn du dort das Programm ausführst, dann kann kein Programm nicht erkennen, dass clear es gar nicht gibt, und du bekommst einen Fehler statt des leeren Bildschirms.
Du kannst einfach nicht wissen, ob a) system tatsächlich ausgeführt wird b) ob's Fehler gegeben hat, usw.
-
Zu der Pfad-Manipulations-Sache ist mir jetzt doch noch was eingefallen:
man sollte system oder execlp definitiv nicht in anwendungen benutzen, die mit besonderen rechten laufen.