Reverse Shell en máquina vírtual

El problema


Cuando se realizan ataques de explotación de vulnerabilidades que permiten establecer una sesión sobre la máquina victima, normalmente se utilizan payload los cuales nos brindan una Shell de línea de comandos de la victima sobre nuestra máquina atacante.
Algunos profesionales de la seguridad suelen realizar este tipo de ataques desde una máquina vírtual con las herramientas necesarias para ello (Kali, Parrot, BlackArch, etc). Esta máquina vírtual suelen ejecutarla desde un equipo con sistema operativo Microsoft Windows.
Dependiendo de los permisos que se tengan en la organización a la cual se le esta realizando la auditoria, un atacante podría configurar la tarjeta de red vírtual en modo puente/Bridge, lo cual permitiría tomar direccionamiento propio de la compañía y facilitar el tipo de ataques.
Sin embargo, en la mayoría de las compañías, se tiene direccionamiento IP estático o reserva DCHP desde la MAC del equipo, y adicionalmente solo proporcionan una dirección IP desde la cual se ejecutan las pruebas de seguridad. Personalmente recomiendo tener el equipo con dual boot, para poder realizar las pruebas de seguridad directamente desde un sistema operativo Linux, aunque esto en algunas ocasiones no puede realizarse por limitaciones propias del cliente, en las cuales únicamente permite realizar conexiones desde sistemas operativos Windows a través de NAC u otros controles de seguridad.
Retomando los ataques de sesión remota, al ejecutar el exploit (manual o automático) normalmente se recibe la sesión en el sistema operativo desde el cual se realiza la explotación. Por ejemplo desde Metasploit Framework, al ejecutar este tipo de ataques se establece una sesión de meterpreter o una reverse_tcp configurando la IP de la máquina atacante en la opción LHOST y especificando el puerto en LPORT. Lo anterior configura automáticamente el puerto en escucha para establecer la sesión.
Pero al realizar este tipo de ataques desde una máquina vírtual con configuración de red NAT, la máquina vírtual adquiere una dirección IP privada la cual no es visible desde la máquina victima, por lo que al configurar esta dirección como “Local host” en el exploit, no se establece la sesión debido a que no es visible para la victima.


Posibles soluciones


Al tener este problema, realice una busqueda en internet para poder dar una solución a la conexión en este tipo de escenarios. Al no encontrar una solución publicada en internet, pense en el tipo de solución que yo le daría a este problema. De esta manera se me ocurrieron dos posibles soluciones: