redireccionar_trafico_tuneles_http_https_con_socat
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
redireccionar_trafico_tuneles_http_https_con_socat [2021/01/03 20:56] – [HTTP > HTTP] 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 | + | Por norma, las configuraciones de servidores web suelen permitir |
- | <code bash># Se enviará la cabecera Host: " | + | <code bash># Se enviará la cabecera |
curl -vI --resolve www.ejemplo.com: | 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: | + | 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. | ||
+ | |||
+ | <code bash># Redirige un puerto escuchando en las interfaces IPv6 a su análogo en IPv4 | ||
+ | socat TCP6-LISTEN: | ||
+ | |||
+ | NOTA: Hay otras opciones muy interesantes y se invita al lector a usar las págians del manual de socat. |
redireccionar_trafico_tuneles_http_https_con_socat.1609703765.txt.gz · Last modified: 2021/01/03 20:56 by busindre