* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
[**DragonJAR Security Conference es un evento internacional de ciberseguridad**](https://www.dragonjarcon.org/) con más de una década que se celebrará el 7 y 8 de septiembre de 2023 en Bogotá, Colombia. Es un evento de gran contenido técnico donde se presentan las últimas investigaciones en español que atrae a hackers e investigadores de todo el mundo.\
¡Regístrate ahora en el siguiente enlace y no te pierdas esta gran conferencia!:
{% embed url="https://www.dragonjarcon.org/" %}
## Falta la ubicación raíz <a href="#missing-root-location" id="missing-root-location"></a>
La directiva root especifica la carpeta raíz para Nginx. En el ejemplo anterior, la carpeta raíz es `/etc/nginx`, lo que significa que podemos acceder a los archivos dentro de esa carpeta. La configuración anterior no tiene una ubicación para `/ (location / {...})`, solo para `/hello.txt`. Debido a esto, la directiva `root` se establecerá de forma global, lo que significa que las solicitudes a `/` te llevarán a la ruta local `/etc/nginx`.
Una solicitud tan simple como `GET /nginx.conf` revelaría el contenido del archivo de configuración de Nginx almacenado en `/etc/nginx/nginx.conf`. Si la raíz se establece en `/etc`, una solicitud `GET` a `/nginx/nginx.conf` revelaría el archivo de configuración. En algunos casos, es posible acceder a otros archivos de configuración, registros de acceso e incluso credenciales cifradas para la autenticación básica de HTTP.
Nginx is a popular web server that is commonly used to serve static content, reverse proxy, and load balance web applications. It is known for its high performance, scalability, and reliability.
## Configuration Files
Nginx uses configuration files to define how it should handle incoming requests. The main configuration file is typically located at `/etc/nginx/nginx.conf`. Additional configuration files can be included using the `include` directive.
## Virtual Hosts
Nginx supports virtual hosts, allowing multiple websites to be hosted on a single server. Each virtual host is defined in a separate configuration file, typically located in the `/etc/nginx/conf.d/` directory. Virtual hosts can be used to serve different websites based on the domain name or IP address.
## Reverse Proxy
Nginx can be used as a reverse proxy to forward requests to backend servers. This is useful for load balancing, caching, and improving performance. The `proxy_pass` directive is used to specify the backend server to which requests should be forwarded.
## Load Balancing
Nginx can also be used as a load balancer to distribute incoming requests across multiple backend servers. It supports various load balancing algorithms, such as round-robin, least connections, and IP hash. The `upstream` directive is used to define a group of backend servers, and the `proxy_pass` directive is used to forward requests to the backend servers.
## SSL/TLS Termination
Nginx can terminate SSL/TLS connections, allowing it to handle HTTPS requests. It can also be used to offload SSL/TLS processing from backend servers, improving performance. The `ssl_certificate` and `ssl_certificate_key` directives are used to specify the SSL/TLS certificate and private key, respectively.
## Security Considerations
When configuring Nginx, it is important to consider security best practices. This includes properly securing the server, implementing access controls, and protecting sensitive information. Regularly updating Nginx and its modules is also important to address any security vulnerabilities.
## Conclusion
Nginx is a powerful web server that offers a wide range of features and capabilities. Understanding how to configure and use Nginx effectively can greatly enhance the performance, scalability, and security of web applications.
**Entonces, si encuentras algún servidor Nginx, debes verificar esta vulnerabilidad. Además, puedes descubrirla si notas que la fuerza bruta de archivos/directorios se comporta de manera extraña.**
Más información: [https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/](https://www.acunetix.com/vulnerabilities/web/path-traversal-via-misconfigured-nginx-alias/)
Pruebas de Accunetix:
```
alias../ => HTTP status code 403
alias.../ => HTTP status code 404
alias../../ => HTTP status code 403
alias../../../../../../../../../../../ => HTTP status code 400
Los caracteres de nueva línea para las solicitudes HTTP son \r (retorno de carro) y \n (salto de línea). La codificación de URL de los caracteres de nueva línea resulta en la siguiente representación de los caracteres `%0d%0a`. Cuando estos caracteres se incluyen en una solicitud como `http://localhost/%0d%0aDetectify:%20clrf` a un servidor con la configuración incorrecta, el servidor responderá con una nueva cabecera llamada `Detectify`, ya que la variable $uri contiene los caracteres de nueva línea decodificados de la URL.
Aprende más sobre los riesgos de la inyección de CRLF y la división de respuestas en [https://blog.detectify.com/2019/06/14/http-response-splitting-exploitations-and-mitigations/](https://blog.detectify.com/2019/06/14/http-response-splitting-exploitations-and-mitigations/).
En algunos casos, los datos proporcionados por el usuario pueden ser tratados como una variable de Nginx. No está claro por qué esto puede estar sucediendo, pero no es tan raro o fácil de probar como se ve en este [informe de H1](https://hackerone.com/reports/370094). Si buscamos el mensaje de error, podemos ver que se encuentra en el [módulo de filtro SSI](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx\_http\_ssi\_filter\_module.c#L365), revelando así que esto se debe a SSI.
Escaneamos esta configuración incorrecta y encontramos varias instancias donde un usuario podría imprimir el valor de las variables de Nginx. El número de instancias vulnerables encontradas ha disminuido, lo que podría indicar que esto fue parcheado.
Con `proxy_pass` de Nginx, existe la posibilidad de interceptar errores y encabezados HTTP creados por el backend. Esto es muy útil si desea ocultar mensajes de error y encabezados internos para que sean manejados por Nginx en su lugar. Nginx automáticamente servirá una página de error personalizada si el backend responde con una. Pero, ¿qué sucede si Nginx no entiende que es una respuesta HTTP?
Si un cliente envía una solicitud HTTP inválida a Nginx, esa solicitud se reenviará tal cual al backend, y el backend responderá con su contenido en bruto. Luego, Nginx no entenderá la respuesta HTTP inválida y simplemente la reenviará al cliente. Imagina una aplicación uWSGI como esta:
[proxy\_intercept\_errors](http://nginx.org/en/docs/http/ngx\_http\_proxy\_module.html#proxy\_intercept\_errors) servirá una respuesta personalizada si el backend tiene un estado de respuesta mayor a 300. En nuestra aplicación uWSGI anterior, enviaremos un `Error 500` que será interceptado por Nginx.
[proxy\_hide\_header](http://nginx.org/en/docs/http/ngx\_http\_proxy\_module.html#proxy\_hide\_header) es bastante autoexplicativo; ocultará cualquier encabezado HTTP especificado del cliente.
La directiva [merge\_slashes](http://nginx.org/en/docs/http/ngx\_http\_core\_module.html#merge\_slashes) está establecida en "on" de forma predeterminada, lo cual es un mecanismo para comprimir dos o más barras diagonales en una sola, por lo que `///` se convertiría en `/`. Si Nginx se utiliza como un proxy inverso y la aplicación que se está proxyando es vulnerable a la inclusión local de archivos, el uso de barras diagonales adicionales en la solicitud podría dejar espacio para explotarla. Esto se describe en detalle por [Danny Robinson y Rotem Bar](https://medium.com/appsflyer/nginx-may-be-protecting-your-applications-from-traversal-attacks-without-you-even-knowing-b08f882fd43d).
> establece el valor resultante si el valor de origen no coincide con ninguno de los variantes especificados. Cuando no se especifica un valor por defecto,\
> el valor resultante por defecto será una cadena vacía.
Es fácil olvidarse del valor `default`. Por lo tanto, **un malhechor puede evadir este "control de autorización"** simplemente accediendo a un **caso inexistente dentro de `/map-poc`** como `https://targethost.com/map-poc/another-private-area`.
Según esta publicación: [http://blog.zorinaq.com/nginx-resol**ver-vulns/**](http://blog.zorinaq.com/nginx-resolver-vulns/) **Podría ser posible suplantar registros DNS** en Nginx si **conoces el servidor DNS que Nginx** está utilizando (y puedes interceptar de alguna manera la comunicación, por lo que esto **no es válido si se utiliza 127.0.0.1**) y el **dominio que está solicitando**.
Si el servidor nginx está configurado para pasar los encabezados Upgrade y Connection, se podría realizar un [**ataque de h2c Smuggling**](../../pentesting-web/h2c-smuggling.md) para acceder a puntos finales protegidos/internos.
Esta vulnerabilidad permitiría a un atacante **establecer una conexión directa con el punto final `proxy_pass`** (`http://backend:9999` en este caso) cuyo contenido no será verificado por nginx.
{% endhint %}
Ejemplo de configuración vulnerable para robar `/flag` de [aquí](https://bishopfox.com/blog/h2c-smuggling-request):
Ten en cuenta que incluso si `proxy_pass` apunta a una **ruta** específica como `http://backend:9999/socket.io`, la conexión se establecerá con `http://backend:9999`, por lo que puedes **contactar cualquier otra ruta dentro de ese punto final interno. Por lo tanto, no importa si se especifica una ruta en la URL de proxy\_pass.**
Detectify ha creado un repositorio en GitHub donde puedes usar Docker para configurar tu propio servidor de prueba vulnerable de Nginx con algunas de las configuraciones incorrectas discutidas en este artículo y tratar de encontrarlas tú mismo.
Gixy es una herramienta para analizar la configuración de Nginx. El objetivo principal de Gixy es prevenir la configuración incorrecta de seguridad y automatizar la detección de fallas.
[**DragonJAR Security Conference es un evento internacional de ciberseguridad**](https://www.dragonjarcon.org/) con más de una década que se celebrará el 7 y 8 de septiembre de 2023 en Bogotá, Colombia. Es un evento de gran contenido técnico donde se presentan las últimas investigaciones en español que atrae a hackers e investigadores de todo el mundo.\
¡Regístrate ahora en el siguiente enlace y no te pierdas esta gran conferencia!:
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).