systemadmin.es » LAMP y web » Host header para nginx en modo proxy

Host header para nginx en modo proxy

Resulta divertido ver como algunas aplicaciones propietarias suponen algunos headers como absolutamente ciertos. Vamos a ver como engañar una aplicación que comprueba la URL dónde se supone que esta instalado.

Dicha aplicación va por licencias, por lo que debes registrar en su web en que dominio estará instalada para que te de la key.

Para evitar tener que coger una IP pública nueva y que dicha aplicación afecte a los frontales con módulos como el ionCube lo que hice fue instalar un Apache nuevo y hacer pasar las peticiones por un nginx que ya tienen IP pública.

Con esto configuré lo siguiente en el nginx para que haga de proxy al Apache:

server
{
        listen 		80;
        server_name 	evil.systemadmin.es;

        access_log 	off;
	error_log 	off;

	root /var/www/void/;

	location /
	{
		proxy_pass        http://evil.localhost:8080;
	}

}

En el /etc/hosts añadí la entrada evil.localhost que resuelva 127.0.0.1:

127.0.0.1		evil.localhost localhost.localdomain localhost

Y registré, como sería lo adecuado, el dominio público de la aplicación web para la key.

El problema apareció con que no aceptaba que las peticiones le llegasen por el proxy porque el header Host era la dirección interna “evil.localhost“. Simplemente indicando al nginx que modifiquie el header Host por otro mediante la directiva proxy_set_header podemos engañar a la aplicación:

	location /
	{
		proxy_pass        http://evil.localhost:8080;
		proxy_set_header  Host  evil.systemadmin.es;
	}

Por lo tanto, no me parece esto ninguna protección eficaz ya que si queremos usar una key que ya tenemos para un dominio diferente podríamos hacer esto mismo.

Relacionados

Imprimir Imprimir

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>