Banner Grabbing con Python - BoomerNiX

lunes, 2 de abril de 2018

Banner Grabbing con Python

En este post vamos a hablar sobre Banner Grabbing, un método que se utiliza para obtener información de los servicios que se encuentran en la red. Si queremos comprobar si un servicio es vulnerable podemos dirigirnos a la página de CVE.

Vamos a ver un ejemplo en Python 3 centrado en la web, se podría dirigir a otros servicios, como FTP, para ello se tendría que adaptar el código, ya que la librería que se va a utilizar aquí es exclusiva de web.

Las tareas que realizar son:
  • Un fichero con servicios y vulnerabilidades que queremos comprobar
  • Un script en Python que haga una petición a una página web y comprueba si tiene un servicio de los del fichero
Os dejamos una captura del fichero que vamos a utilizar:


A continuación, se muestra el código:


Primero importamos la librería http.client que la vamos a usar para realizar la petición web. En la línea 3 y 4 se define el host al que vamos a hacer la petición, y un timeout para evitar una espera infinita en caso de no recibir contestación.

Después, se va a realizar una petición de tipo HEAD (si la web no acepta este tipo de peticiones, se puede hacer uso de GET), y a continuación, recogemos la respuesta (líneas 5 y 6). La respuesta tendrá la información que buscamos, siempre y cuando esté mal configurada y “hable” más de lo que debe. 

Acto seguido, en la línea 7 se abre el fichero que tiene las vulnerabilidades en modo lectura, además, en la 8 nos creamos una variable booleana, que se inicializa en False, esta variable, solo nos sirve para mostrar al final una línea de texto si no se encuentran vulnerabilidades.

En el for que se recorre cada línea del fichero y se comprueba si el servicio se encuentra en la respuesta que nos devolvió el servidor. Si se echa un vistazo al fichero que tenemos arriba, cada línea viene con el servicio, un espacio en blanco, y el CVE, por ello se usa el Split para conseguir partir la línea por el espacio en blanco, así se puede comprobar el servicio y mostrar la información de la vulnerabilidad.

Si la comprobación es positiva, se muestra la información por pantalla, tanto servicio (posición 0), como CVE (posición 1), y se pone la variable booleana en True. Para finalizar, después del bucle, se cierra el fichero y se comprueba la variable para ver si se han encontrado vulnerabilidades.

El script mostrado no gestiona errores, por simplicidad, por ejemplo, si no encuentra el fichero que se le indica, verás como salta una excepción. Ahora vamos a hacer la prueba contra un servidor que tenemos en localhost, y que va a ser vulnerable.


Si no tuviera un servicio de los que hemos puesto en el fichero, nos daría el mensaje de que no es vulnerable. Para ver información sobre la vulnerabilidad podemos hacer uso de la página que hemos puesto al inicio y buscar por el CVE.


El código se puede adaptar al gusto de cada uno, por ejemplo, podemos evitar la creación de un fichero y que se muestre solo el servicio por pantalla y en vez de buscar por CVE, buscamos ese servicio en la BD a ver si es vulnerable.

Para ir terminando, también podemos hacer uso de Telnet o Netcat para llevar a cabo esta tarea (mostrar el servicio), en la siguiente imagen se puede comprobar:



Para evitar regalar información y dar facilidades a posibles cibercriminales, la mejor opción es que nuestros servicios no devuelvan esa información. Además, no olvidéis lo más importante, mantener los servicios actualizados y fortificados :).

¡Hasta la próxima!

No hay comentarios:

Publicar un comentario