dup2() und socket
-
Hallo,
Ich habe einen Teil-Code welcher sich bei Authentifizierung eine Shell reverse macht. Sprich. Benutzer kommt auf Server. Gibt über HTTP sein username+passwort ein. Wenn alles ok, wird das C Script gestartet, welches sich dann zu dem User auf Port 9000 verbindet. Wenn er jetzt da den Client laufen hat (kann auch netcat sein) so kann er mit Userprivelegien mit dem Server Konsolenbefehle austauschen.
Das Problem. STDIN, STDOUT, STDERR würde ich gerne auf den Socket legen, dass wenn der user z.b. cat /etc/nofileabcd eingibt auch einen Fehler bekommt wie "File not found".
Code mäßig schaut das folgendermaßen aus:
void set_ioe (int sock) { dup2 (sock, 0); dup2 (sock, 1); dup2 (sock, 2); } int client_sock (char* ip, int port, unsigned int timew) { int s; struct sockaddr_in srv; s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket failed()"); // return 2; } srv.sin_addr.s_addr = inet_addr(ip); srv.sin_port = htons( (unsigned short int) port); srv.sin_family = AF_INET; while (1) { sleep (timew); if (connect(s, (struct sockaddr*) &srv, sizeof(srv)) == -1) { perror("Connection error occured"); // return 3; } else { set_ioe (s); return s; } } }
s wird dann returned auf die Main Funktion und die wartet in einer while (1) schleife auf benutzereingaben und pipt dann die benutzer angaben und sendet das result davon an den benutzer. ich denke das ist uninteressant, da das dup ja eigentlich schon beim erstellen des sockets gesetzt werden sollte oder?
Problem:
Wenn ich das so mache, wie oben und der user gibt cat /etc/iwasasdf ein, dann hängt sich die shell komplett auf.Danke für eure Hilfe