Cargando



Encontrar servidor web vulnerable, Banner Grabbing en Python

En este tutorial se aprenderá a hacer un simple Banner Grabbing en Python 3 para buscar vulnerabilidades en servidores web


jul 18 2016 11:16
Avanzado
jul 18 2016 14:03

En este tutorial vamos a hablar sobre Banner Grabbing, una técnica utilizada para obtener información de los servicios que se encuentran en la red. Gracias a esto podemos descubrir máquinas en la red que tienen corriendo servicios con vulnerabilidades conocidas, si queremos consultar vulnerabilidades podemos dirigirnos a la siguiente página: CVE.

 

Para comprender su uso se va a proceder a hacer un ejemplo, éste tratará de comprobar si un servidor web es vulnerable (solo nos vamos a centrar en web en este tutorial). Vamos a imaginar que buscamos 2 tipos de vulnerabilidades, por lo que añadimos a un fichero de texto las siguientes 2 líneas (mi fichero se llamara vulnerables.txt):

Apache/2.4.18 CVE-2016-4979
Apache/2.3.20 CVE-2016-4438
A continuación pongo el código en Python, para la versión 3.X, y más abajo se da una explicación.
import http.client

host = "localhost"
http = http.client.HTTPConnection(host, timeout=2)
http.request("HEAD", "/")
server = http.getresponse().getheader('server')
vulnerables = open("vulnerables.txt", "r")
esVulnerable = False

for servicio in vulnerables:
    s = servicio.split(" ")
    if(s[0] in server):
        print(host,"tiene servicio", s[0],"con posible vulnerabilidad",s[1])
        esVulnerable = True

if(not esVulnerable):
    print(host,"aparentemente no tiene servidor vulnerable a lo que buscas")
Vamos a ver ahora una explicación por partes del código, primero importamos la librería http.client que la vamos a necesitar:
import http.client
A continuación definimos el host y establecemos la conexión, con un timeout de 2 segundos.
host = "localhost"
http = http.client.HTTPConnection(host, timeout=2)
Nuestro próximo paso es hacer una petición de tipo HEAD, que no nos devolverá el cuerpo (los datos, pero que para esto no los necesitamos). Y acto seguido obtenemos la respuesta.
http.request("HEAD", "/")
server = http.getresponse().getheader('server')
Ahora abriremos nuestro fichero de texto en modo lectura (r) con las vulnerabilidades a buscar, y creamos una variable booleana que nos sirva para saber si se encontró vulnerabilidad (nos servirá para al final mostrar un mensaje o no).
vulnerables = open("vulnerables.txt", "r")
esVulnerable = False
En este momento haremos un bucle, que va a recorrer cada servidor vulnerable que hemos puesto en el fichero para comprobar si alguno es usado en la página consultada. Se usa el método split para partir la línea en servidor y vulnerabilidad, como se pudo ver más arriba el fichero están separados con un espacio en blanco.
for servicio in vulnerables:
    s = servicio.split(" ")
    if(s[0] in server):
        print(host,"tiene servicio", s[0],"con posible vulnerabilidad",s[1])
        esVulnerable = True
Por último cerramos el fichero que tenemos abierto y comprobamos si hemos encontrado vulnerabilidad, si no es así mostramos un mensaje al usuario para que esté informado.
vulnerables.close()
if(not esVulnerable):
    print(host,"aparentemente no tiene servidor vulnerable a lo que buscas")
Bien vamos a ejecutarlo contra 2 objetivos, el primero es solvetic.com:

 

 

noVulnerable.jpg

 

Y el segundo y último objetivo es mi máquina, tengo corriendo un servidor Apache que podría ser vulnerable, por la versión de Apache que usa.

 

posible_vulnerabilidad.jpg

 

Si queremos saber algo de la vulnerabilidad, en la página que he dejado al principio se puede buscar por el CVE que puedes ver en la terminal: CVE-2016-4979. Pincharás en Search & Donwloads e insertaras el identificador en Search Master Copy of CVE, en el recuadro debajo del texto by CVE Identifier y posteriormente pincha en Submit.

 

cve1.jpg

 

Te saldrá la vulnerabilidad, y podrás ver una explicación, referencias, fechas, etc.

 

cve2.jpg

 

Aquí concluye el tutorial, esta técnica la puedes aplicar para buscar servicios vulnerables no solo para servidores web, además puedes comprobar varios host a la vez, para no tener que lanzarlo varias veces, aquí por simplicidad se ha dirigido a servidor web y a un solo host. También puedes hacer Banner Grabbing con la ayuda de Telnet o Netcat, a continuación te dejo una imagen del uso de Telnet para sacar el servidor de mi localhost:

 

telnet_informacion.jpg

 

Nota
En Windows Telnet viene desactivado por defecto, si quieres activarlo puedes seguir el siguiente tutorial.


¿Te ayudó este Tutorial?


1 Comentarios


Pablo Ramirez
jul 21 2016 12:37

Genial, gracias. 

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X