¿Hay alguna forma de detectar el servidor web en caso de que no esté presente en HEADER?

29

Estoy intentando detectar qué servidor web utiliza un sitio web en particular. Por ejemplo, si es nginX, Apache, Tomcat y así sucesivamente.

Normalmente uso el complemento Live HTTP Headers Firefox. El problema es que los sitios a veces ocultan su back-end. ¿No hay una manera de detectar servidores web cuando no están presentes en HEADER?

EDIT 1:
Una salida de muestra de un sitio web que no coincide con ninguna de las respuestas de @Question Overflow :

HTTP/1.1 200 OK
Date: Mon, 29 Sep 2014 10:43:29 GMT
Content-Type: text/html
Transfer-Encoding: chunked
X-Powered-By: VideoHosting Framework/1.0.1
Cache-Control: no-cache, must-revalidate, no-cache="Set-Cookie", private
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Videohost/1.0.1

Incluso intenté usar httprint en linux, pero da ICMP request timeout en cada sitio web que probé.

EDIT 2:
El HEADER anterior es muy similar a un sitio web que estoy seguro de que utiliza nginX. Si eliminamos aquellas partes que no están presentes ( Connection , Pragma , etc.) en el encabezado anterior, se vuelve muy similar a nginX. Supongo que Server está al final de response porque lo han personalizado por temas. Y debido a eso, nginX lo agregó al final del paquete Response .

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 29 Sep 2014 12:51:37 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip

OWASP debería actualizar su lista con esta también para nginX. ;-)

    
pregunta ALH 29.09.2014 - 08:13
fuente

3 respuestas

27

Si un sitio web no utiliza un servidor creado a la medida para modificar los encabezados HTTP, puede probar examinando el orden de disposición en los campos de respuesta HTTP. De OWASP :

Servidor Apache 1.3.23:

HTTP/1.1 200 OK 
Date: ...
Server: ...
Last-Modified: ...
ETag: ...
Accept-Ranges: bytes 
Content-Length: ...
Connection: ...
Content-Type: text/HTML 

Servidor Microsoft IIS 5.0:

HTTP/1.1 200 OK 
Server: ...
Expires: ...
Date: ...
Content-Type: text/HTML 
Accept-Ranges: bytes 
Last-Modified: ...
ETag: ...
Content-Length: ...

Servidor Netscape Enterprise 4.1:

HTTP/1.1 200 OK 
Server: ...
Date: ...
Content-type: text/HTML 
Last-modified: ...
Content-length: ...
Accept-ranges: bytes 
Connection: ...

Servidor SunONE 6.1:

HTTP/1.1 200 OK
Server: ...
Date: ...
Content-length: ...
Content-type: text/html
Date: ...
Last-Modified: ...
Accept-Ranges: bytes
Connection: ...

Para obtener más información, puede enviar una solicitud con formato incorrecto , como GET / HTTP/3.0 , para obtener una respuesta no estándar. Ejemplo:

Servidores Apache 1.3.23 y SunONE 6.1:

HTTP/1.1 400 Bad Request

Servidor Microsoft IIS 5.0:

HTTP/1.1 200 OK 

Servidor Netscape Enterprise 4.1:

HTTP/1.1 505 HTTP Version Not Supported

Como la información anterior está bastante desactualizada, es posible que desee instalar una herramienta de control de pruebas como enlace para huellas digitales del servidor web automatizado .

Los servidores web pueden ofuscar su firma o hacerse pasar por otro servidor. Tome la información con una pizca de sal, si es necesario.

    
respondido por el Question Overflow 29.09.2014 - 10:58
fuente
7

Puede intentar buscar si puede hacer que el servidor muestre una página de error nativa. Un desarrollador web puede personalizar las páginas de errores, pero cuando no lo están, a menudo revelan mucha información sobre el servidor web.

Por ejemplo, esta es la página de error 404 No encontrado de Apache 2.2.4 que se ejecuta en Unix:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /server-status was not found on this server.</p>
<hr>
<address>Apache/2.2.4 (Unix) mod_antiloris/0.4 Server at example.com Port 3128</address>
</body></html>

Y esta es la página de error 400 Bad Request (obtenida mediante el envío de una solicitud HTTP que consiste solo en GET / HTTP/1.1 usando telnet) enviada por el mismo servidor:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.4 (Unix) mod_antiloris/0.4 Server at 203.0.113.113 Port 3128</address>
</body></html>
    
respondido por el user2428118 29.09.2014 - 15:37
fuente
-3

¿Por qué no solo usar nmap para detectar qué software de servidor web se está utilizando?

    
respondido por el miethpo 29.09.2014 - 14:20
fuente

Lea otras preguntas en las etiquetas