Un WAF o Web Application Firewall es un software que se suele instalar entre el servidor(o granja de servidores) e Inet para realizar algún tipo de filtrado, registrar algún tipo de ataque o tráfico sospechoso. Resulta útil en escenarios donde los ataques son frecuentes y los servidores web no están parcheados ya sea por algún requerimiento impuesto por el código a ejecutar o porque simplemente se quiere filtrar por HW en un aparato especializado para tal tarea. En este artículo veremos como instalar una herramienta destinada a detectar los tipos de WAF que hay delante de los servidores web.
La herramienta a utilizar es
wafw00f
, para su instalación necesitaremos pip ya que wafw00f está escrito en python:
pip install wafw00f
Esta tool se basa en ejecutar varias pruebas enviando tráfico al dominio, este tráfico procura generar errores en los que buscar patrones de ciertos fabricantes o software de balanceo.
Realizamos una primera prueba:
The site http://www.hotmail.com is behind a F5 BIG-IP LTM
Parece que la cosa va bien ;), ahora probemos con alfaexploit y google:
No WAF detected by the generic detection
The site http://www.google.es seems to be behind a WAF or some sort of security solution
Reason: The server header is different when an attack is detected.
The server header for a normal response is "gws", while the server header a response to an attack is "sffe.",
Si ponemos un ngrep y observamos el tráfico generado veremos cabeceras similares a la siguiente, en este caso se está intentando generar el error asignando un valor muy grande a la cabecera http Transfer-Encoding.
T 192.168.34.23:40232 -> A.B.C.D:80 [AP]
GET / HTTP/1.1.
Host: www.ASD.com.
Accept-Encoding: identity.
Transfer-Encoding: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7.
Accept: */*.
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b1) Gecko/20081007 Firefox/3.0.
####
T A.B.C.D:80 -> 192.168.34.23:40232 [AF]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
sys@A.B.C.D and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
<p>Additionally, a 500 Internal Server Error
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache Server at www.A.B.C.D.com Port 80</address>
</body></html>