Unteschied zwischen Reverse- und Remote Shell?

Eine Remoteshell ist eine Konsole die du zu einem Rechner aufbaust, eine Reverse Shell wird andersherum aufgebaut, also vom zu benutzenden Recher zu dir, das macht man z.B. um NAT Gateways und Firewall zu umgehen.
 
Wenn ich z.B. unter Windows auf die cmd Konsole von außen im Netzwerk zugreiffen möchte, ist es eine Remote- oder Reverse Shell?

Wird bei der Remote oder Reverse Shell die Standardein-/ausgabe zum Client übermittelt?
 
Das kommt drauf an wie du es machst. Beispiel SSH:
Du verbindest dich ganz nochmal mit einem SSH Server und bekommst eine Kommandozeile = RemoteShell.
Der Server verbindet sich via SSH mit deinem Rechner und du öffnest die Verbindung indem du dich mit dem lokalen Port verbindest der die Verbindung hält = ReverseShell.

Im Normalfall benutzt du eine RemoteShell zum arbeiten, dabei wirdder IO der Konsole vom Client zu Server und wieder umgekehrt übertragen.
 
Ich habe folgendes vor:

Auf dem Server läuft ein Dienst der die Shell per richtiger Authentifizierung zum Client übermittelt, also der Client verbindet sich mit dem Server, dann wird ein Passwort usw. abgefragt, wenn alles richtig ist, kann der Client die Shell auf dem Server verwenden.

Ist das nun eine Remote oder Reverse Shell?
 
Eigentlich kommt das hier nicht rein aber wenn wir schon beim Thema sind wollte ich fragen wie der Ablauf der Kommunikation funktioniert.

- Der Server läuft die ganze Zeit und wartet auf einen Client.
- Der Client verbindet sich mit dem Server, welcher dann die Authentifizierung startet
- Die STDOUT von der Shell wird zum Client übermittelt
- Der Client kann nun Befehle in der Konsole eingeben welche per STDIN zum Server übergeben werden.


Ist doch richtig die Funktionsweise mit der Standardausgabe oder?
 
Ob Shell oder sonst was,vergleich das mal mit HTTP, denn da passiert nix anderes.
Der Browser fordert bei einem Webserver eine Seite an, der Server antwortet mit einem Code, der besagt, ob eine Seite gefunden wurde oder nicht, oder verschoben wurde oder eine Authentifizierung notwendig ist. Nun kann man das aufsplitten:

1. Seite wurde gefunden:
1.1 Seite wird an den Client (Browser) geliefert
1.2 Client wird aufgefordert, sich zu identfizieren (Passwort-Abfrage etc)
1.3 Seite wird angezeigt, jedochmit Hinweis "Verschoben, demnächst bitte woanders anfordern"

2. Seite wurde nicht gefunden
2.1 Der Browser bekommt einen Fehlercode,den der Browser kennt und verarbeiten kann

3. Zugriff verweigert
3.1 Browser bekommt einen Fehlercode den er verarbeiten kann


Genauso läuft das mit einer Shell ab:
1. Der Client verbindet sich
1.1 Bei Erfolg Abfrage eines Passwortes
1.2 Client sendet Passwort zurück und erhält nun das STDIN (RemoteShell)

2. Der Client verbindet sich
2.1 Passwort falsch
2.2 Verbindung wird seitens des Servers geschlossen

Der Client erhält deshalb den STDIN, da der Client direkten Speicherzugriff auf dem Server benötigt. STDIN hat der Client jedoch programmiertechnisch auch auf seiner lokalen Konsole (meist Putty,wenn vom Windows - oder eben Bash etc bei Linux), da hier die Tastatureingaben gelesen werden müssen - somit entsteht eine Pipe, mit der die Daten asynchron übertragen werden und die Verbindung dadurchoffen gehalten werden kann ähnlicheinem Ping-Pong-Spiel: Client->Server->Anfrage<-Client-<-Server

Das STDOUT bekommt der Client, allerdings wird DIESES auf der RemoteShell nicht benötigt, da der Speicherinhalt zum Client gesendet wird unddort angezeigt wird.

LG
Andy
 
Ok, vielen Dank erstmal :)

Werde mich damit auseinandersetzen müssen, will sowas für Windows programmieren, falls jemand Projekte oder mehr Infos dazu hat, immer her damit.
 
Zurück