shodita

[subscribe2]

Volvemos el primer día de la última semana de julio de 2016. La pasada semana hicimos una prueba con 100 IPs para ver el funcionamiento y comprobamos que todo funcionaba correctamente. Tardábamos unos 40 minutos aproximadamente en analizar las 100 Ips por bot. Siempre dependerá de nuestra conexión y la del servidor, además de las características del ordenador con el que trabajemos.

Mencionar que si estas interesado empezar a programar con Python: QuantiKa14 desde 2013 oferta un curso online por solo 110 € donde podrás aprender hacer todo esto y mucho más.

Hoy quiero arreglar el fallo de la comprobación en los puertos 80 debido a qué detecté manualmente que muchas de esas IPs tenían algún servicio web en el puerto 80 y no devolvían ningún mensaje de respuesta. Por lo que decidí incluir una función que intentara acceder por HTTP y si devolvía una web consigamos obtener la etiqueta “<title></title>” y “‘name’:’description'”.

Antes de empezar a explicar debemos importar la librería urllib2 y BeautifulSoup. ¿Cómo instalar BeautifulSoup?

pip install beautifulsoup4

Esta librería es muy útil para realizar el parser html de la web, podemos crear infinidades de crawlers y bots con esta herramienta.

Lo primero que haremos después de incluir las 2 librerías será añadir en la función “main()” de nuestro bot un condicional que nos dirija a la función “detect_web_service()” si la variable port contiene el valor  80. En caso contrarío seguirá el flujo por la función “banner_grabbing()” que ya hablamos de él en las anteriores entradas.

condicional-main-shodita

Después de hacer esto debemos crear la función detect_web_service(). A través de los métodos urllib2.urlopen(url).read()importante incluir en la ip “http://” –  obtendremos el código html que luego se lo pasaremos a la varita mágica de BeatifulSoup.

detect-web-shodita

También podemos usar las excepciones de urllib2 para controlar mejor que es lo que pasa. Por si nos da un error HTTP o un URLerror.

urllib2-exception

En la linea 40 y 41 creamos 2 variables que tendrán el contenido del título y de la descripción de la web. Para conseguir eso he inventado estas 2 funciones que parsearan el código en busca de lo que necesitamos:

title-description-web-shodita

Ya tenemos nuestro sistema de comprobado de servicios web que serán insertados en nuestra base de datos mongoDB. El resultado quedaría así:

report-shodita

NOVITA-FOOTER

5 thoughts on “CÓMO CREAR TU PROPIO SHODAN: DETECCIÓN DE SERVICIO WEB [PARTE V]”

    1. Hola Norberto, muchas gracias por tu comentario. Tu idea la he incluido en un bot secundario que hará la función de extraer los dominios que comparten una misma IP. Un saludo.

  1. Excelente aporte, solo tengo algunas sugerencias tal vez este en equivocación pero:
    1.-
    Error
    línea: 36. def detect_web_service(ip):
    línea: 78. detect_web_service(ip_address, port)
    Sol
    debido a que ya se define el puerto en este caso el 80 y el solo se puede enviar un parámetro en la función
    línea: 36. def detect_web_service(ip):
    línea: 78.detect_web_service(ip_address)

    2.- si la ip a consultar seria 45.55.166.101 siendo esta una list files seria recomendable usar.
    def get_description(html):
    try:
    soup = BeautifulSoup(html, “html.parser”)
    .
    .
    def get_title(html):
    try:
    soup = BeautifulSoup(html, “html.parser”)

    Para importar BeautifulSoup:
    from bs4 import BeautifulSoup

    Saludos Cordiales

Responder a Norberto Cancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.