Hacking Tools: Obteniendo datos de un objetivo web con Python
Continuando con el post anterior, que es una introducción a la creación de herramientas en Python, veremos ahora cómo obtener datos interesantes (desde el punto de vista de seguridad informática) de un objetivo web.
En este artículo vamos a realizar pruebas con un sitio que tenga instalado Moodle, obtendremos los banners del servidor y luego vamos a comparar un archivo (/admin/environment.xml) que viene en la raíz de Moodle con un hash MD5, con esto buscaremos identificar la versión de Moodle. Por seguridad puede que existan webmasters que eliminen dicho archivo, pero recuerda que esto es un ejemplo, luego podrás incorporar todas las comparaciones que quieras para obtener de mejor manera la versión.
Importamos la librería "urllib". Con ella podremos generar peticiones HTTP y obtener las cabeceras de la respuesta. Utilizaremos el código del post anterior y lo iremos completando
Importamos la librería hashlib y crearemos un arreglo o matríz con las versiones que conocemos de Moodle y su Hash MD5
Saludos
En este artículo vamos a realizar pruebas con un sitio que tenga instalado Moodle, obtendremos los banners del servidor y luego vamos a comparar un archivo (/admin/environment.xml) que viene en la raíz de Moodle con un hash MD5, con esto buscaremos identificar la versión de Moodle. Por seguridad puede que existan webmasters que eliminen dicho archivo, pero recuerda que esto es un ejemplo, luego podrás incorporar todas las comparaciones que quieras para obtener de mejor manera la versión.
Importamos la librería "urllib". Con ella podremos generar peticiones HTTP y obtener las cabeceras de la respuesta. Utilizaremos el código del post anterior y lo iremos completando
#! /usr/bin/python import optparse import urllib.request print (""" Mi primera herramienta 1.0 modo de uso: scan.py -u URL """) #comentario: las líneas dentro de las tres comillas se interpretan #incluyendo los saltos de línea parser = optparse.OptionParser() parser.add_option('-u', '--url', dest="url", help="Direccion del sitio web a escanear") options = parser.parse_args()Luego de incorporar la librería, realizaremos la llamada a la URL y con la conexión establecida en una variable podremos obtener su información
#! /usr/bin/python import optparse import urllib.request print (""" Mi primera herramienta 1.0 modo de uso: scan.py -u URL """) #comentario: las líneas dentro de las tres comillas se interpretan #incluyendo los saltos de línea parser = optparse.OptionParser() parser.add_option('-u', '--url', dest="url", help="Direccion del sitio web a escanear") (options, args) = parser.parse_args() url = options.url print ("Obteniendo datos del servidor") cnn = urllib.request.urlopen(url) print ("server : " + cnn.info().get('server')) print ("x-powered-by : " + cnn.info().get('x-powered-by')) print ("x-frame-options : " + cnn.info().get('x-frame-options'))Realizo una prueba con un Moodle local de la siguiente forma
./scan.py -u http://localhost/moodleY la salida es la siguiente
Mi primera herramienta 1.0 modo de uso: scan.py -u URL Obteniendo datos del servidor server : Apache/2.2.15 (CentOS) x-powered-by : PHP/5.3.3 x-frame-options : sameoriginCon sólo algunas líneas de código ya tenemos el banner del servidor web y versión de PHP. Ahora vamos a buscar el archivo environment.xml de nuestro Moodle y obtendremos su hash MD5, con ese dato podremos comparar con el archivo environment.xml de nuestro objetivo y saber qué versión de Moodle tiene instalada.
Importamos la librería hashlib y crearemos un arreglo o matríz con las versiones que conocemos de Moodle y su Hash MD5
#! /usr/bin/python import hashlib import optparse import urllib.request print (""" Mi primera herramienta 1.0 modo de uso: scan.py -u URL """) #comentario: las líneas dentro de las tres comillas se interpretan #incluyendo los saltos de línea parser = optparse.OptionParser() parser.add_option('-u', '--url', dest="url", help="Direccion del sitio web a escanear") (options, args) = parser.parse_args() url = options.url print ("Obteniendo datos del servidor") cnn = urllib.request.urlopen(url) print ("server : " + cnn.info().get('server')) print ("x-powered-by : " + cnn.info().get('x-powered-by')) print ("x-frame-options : " + cnn.info().get('x-frame-options')) versiones = [ ['54145C49BF5F6A90ACE4CF7613580587', '2.9'], ['B8C9BB0F1F212E66A561E17EFD7BC142', '3.2.1'] ]Nos queda descargar el archivo del servidor, calcular su hash MD5 y compararlo con nuestro arreglo 'versiones'. Para descargar el archivo volveremos a usar la librería urllib.
#! /usr/bin/python import hashlib import optparse import urllib.request print (""" Mi primera herramienta 1.0 modo de uso: scan.py -u URL """) #comentario: las líneas dentro de las tres comillas se interpretan #incluyendo los saltos de línea parser = optparse.OptionParser() parser.add_option('-u', '--url', dest="url", help="Direccion del sitio web a escanear") (options, args) = parser.parse_args() url = options.url print ("Obteniendo datos del servidor") cnn = urllib.request.urlopen(url) print ("server : " + cnn.info().get('server')) print ("x-powered-by : " + cnn.info().get('x-powered-by')) print ("x-frame-options : " + cnn.info().get('x-frame-options')) versiones = [ ['54145C49BF5F6A90ACE4CF7613580587', '2.9'], ['B8C9BB0F1F212E66A561E17EFD7BC142', '3.2.1'] ] cnn = urllib.request.urlopen(url + '/admin/environment.xml') contenido = cnn.read() hashremoto = hashlib.md5(contenido).hexdigest() for i in versiones: if i[0].lower() == hashremoto.lower(): print("\nMoodle version " + i[1])Con estos datos podremos revisar vulnerabilidades para la versión objetivo y luego explotarlas. La búsqueda de vulnerabilidades la dejamos para el siguiente post.
Saludos
Comentarios
Publicar un comentario