redireccionar_trafico_tuneles_http_https_con_socat
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
redireccionar_trafico_tuneles_http_https_con_socat [2021/01/03 17:11] – created busindre | redireccionar_trafico_tuneles_http_https_con_socat [2021/01/03 22:10] (current) – busindre | ||
---|---|---|---|
Line 1: | Line 1: | ||
===== socat con HTTP/HTTPS: Redireccionar tráfico / Crear Tuneles / Cifrar tráfico HTTP ===== | ===== socat con HTTP/HTTPS: Redireccionar tráfico / Crear Tuneles / Cifrar tráfico HTTP ===== | ||
- | Socat es una herramienta muy popular y útil para crear túneles que permitan redireccionar tráfico de una IP/Puerto a otro diferente, entre otras muchas cosas. También es usada para intermediar entre un protocolo no cifrado y uno cifrado. Hay entornos empresariales donde aplpicaciones antidiluvianas | + | Socat es una herramienta muy popular y útil para crear túneles que permitan redireccionar tráfico de una IP/Puerto a otra IP/ |
+ | |||
+ | En este tipo de casos, gracias a socat, sería factible crear un túnel para que la aplicación | ||
En este artículo nos centraremos en el protocolo HTTP para los ejemplos y explicaremos los casos más comunes a la hora de querer tunelizar conexiones HTTP/S. Socat y los ejemplos aquí expuestos son igual de válidos para otros protocolos / puertos de red. | En este artículo nos centraremos en el protocolo HTTP para los ejemplos y explicaremos los casos más comunes a la hora de querer tunelizar conexiones HTTP/S. Socat y los ejemplos aquí expuestos son igual de válidos para otros protocolos / puertos de red. | ||
+ | |||
+ | Para ver qué hace socat al tunelizar conexiones se pueden agregar las opciones informativas " | ||
+ | |||
+ | < | ||
+ | -v Writes | ||
+ | -x Writes the transferred data not only to their target streams, but also to stderr. The output format is hexadecimal, | ||
+ | -xv Muestra el hexadecimal pero junto la represetacion ASCII (-v) a la derecha. | ||
+ | -d Without this option, only fatal and error messages are generated; applying this option also prints warning messages. See DIAGNOSTICS for more information. | ||
+ | |||
+ | -d -d Prints fatal, error, warning, and notice messages. | ||
+ | -d -d -d | ||
+ | -d -d -d -d Prints fatal, error, warning, notice, info, and debug messages.</ | ||
==== HTTP > System ==== | ==== HTTP > System ==== | ||
El tráfico entrante por localhost: | El tráfico entrante por localhost: | ||
- | <code bash> | + | <code bash> |
# Si se escriben los comandos en un script este puede ser ejecutado de la siguiente forma. | # Si se escriben los comandos en un script este puede ser ejecutado de la siguiente forma. | ||
- | socat -v -v TCP-LISTEN: | + | socat TCP-LISTEN: |
< | < | ||
Line 31: | Line 45: | ||
Escuchar peticiones en un puerto determinado (8080) y que las peticiones entrantes a dicho puerto sean redirigidas al puerto 80 del host " | Escuchar peticiones en un puerto determinado (8080) y que las peticiones entrantes a dicho puerto sean redirigidas al puerto 80 del host " | ||
- | <code bash> | + | <code bash> |
+ | |||
+ | Por norma, las configuraciones de servidores web suelen permitir solicitudes con nombres de dominio que no tienen configurados de manera explicita. Por ejemplo en Nginx, si no se ha configurado un servidor predeterminado, | ||
+ | |||
+ | <code bash># Se enviará la cabecera " | ||
+ | curl -vI --resolve www.ejemplo.com: | ||
+ | </ | ||
+ | |||
+ | NOTA: Si no se especifica la cabecera Host, al no usar el mismo puerto en local que en destino, la cabecera será "Host: www.ejemplo.com: | ||
+ | |||
+ | ==== HTTP > HTTPS ==== | ||
+ | |||
+ | Socat puede usarse para tunelizar conexiones HTTP a HTTPS, algo muy útil a la hora de auditar comunicaciones. | ||
+ | |||
+ | Supongamos que una aplicación unicamente puede hacer peticiones HTTP y no HTTPS, con socat se podría especificar un puerto (normalmente en local , pero podría ser remoto también) que solo use HTTP y redirija la comunicación a otro puerto HTTPS. De esta manera socat se encarga de realizar el Handshake y establecer la conversación cifrada HTTPS. | ||
+ | |||
+ | Aunque no sea la mejor herramienta para ello se podría usar para ataques SSL Strip. Editar el fichero /etc/hosts, registros DNS o simplemente crear un dominio muy similar al de una plataforma de compras en linea y servir una versión sin SSL de la misma para auditar las credenciales (SSL MITM). | ||
+ | |||
+ | Se debe tener en cuenta que al usar socat para conexiones SSL/TLS, este comprueba de manera predeterminada la validez (confiable, no revocado, etc) de los certificados con los que conecta. | ||
+ | |||
+ | <code bash> # El puerto 8080 escucha peticiones no cifradas y las redirecciona usando SSL/TLS al puerto 443 de www.dominio.com. | ||
+ | socat TCP-LISTEN: | ||
+ | |||
+ | # Si no se requiere que socat compruebe el certificado se puede usar verfy=0 | ||
+ | socat TCP-LISTEN: | ||
+ | |||
+ | # Si se prefiere que socat compruebe el campo " | ||
+ | socat TCP-LISTEN: | ||
+ | </ | ||
+ | |||
+ | ==== IPv4 > IPv6 ==== | ||
+ | |||
+ | No todas las aplicaciones que escuchan en un puerto tienen soporte para IPv6, esto es algo que se puede remediar con socat fácilmente. | ||
- | Por norma, | + | <code bash># Redirige un puerto escuchando en las interfaces IPv6 a su análogo |
+ | socat TCP6-LISTEN: | ||
- | <code bash># Se enviará la cabecera Host: " | + | NOTA: Hay otras opciones muy interesantes |
- | curl -vI --resolve www.ejemplo.com: | + |
redireccionar_trafico_tuneles_http_https_con_socat.1609690260.txt.gz · Last modified: 2021/01/03 17:11 by busindre