BlogRecon

Cómo: escribir su propio script Bash para automatizar Recon

La automatización ha sido una palabra de moda desde hace bastante tiempo, pero los principios detrás de ella son tan sólidos como siempre. Para un pirata informático o pentester, el script Bash es una forma de automatización que no se puede ignorar. Prácticamente cualquier comando que se pueda ejecutar desde la terminal puede ser programado, y debería serlo, en muchos casos, para ahorrar tiempo y esfuerzo valiosos. Y resulta que un script de Bash es genial para el reconocimiento.

Paso 1: Inicie el script

Para comenzar, cree un script Bash y asígnele el nombre que desee. Llamaré mía recon.sh. Con su editor de texto favorito, haga que la primera línea se vea así:

#!/bin/bash

Esto se llama shebang, o hashbang, y simplemente apunta al intérprete del sistema para Bash.

A continuación, nos aseguraremos de que el usuario proporcione datos para el script y, si no es así, imprimiremos un ejemplo de uso y saldrá. Use un bloque condicional si-entonces:

if [ -z "$1" ]
then
        echo "Usage: ./recon.sh <IP>"
        exit 1
fi

El $ 1 es el argumento que pasaremos al script, y el -z La opción devuelve verdadero si la cadena es nula. Básicamente, esto dice que si no se pasa ningún argumento, imprima el ejemplo de uso y salga. El argumento que usaremos es una dirección IP.

Paso 2: escanee el host

La siguiente sección ejecutará un escaneo de Nmap en la dirección IP del host que proporcionamos. Primero, imprimiremos un encabezado para Nmap solo para mantener las cosas bonitas y organizadas:

printf "n----- NMAP -----nn" > results

Usamos printf aquí porque maneja nuevas líneas ( n) de manera más confiable que echo. Esto se está escribiendo en un archivo de texto llamado resultados – primero creará el archivo, ya que aún no existe, y sobrescribirá el archivo en el futuro con análisis posteriores.

A continuación, imprimiremos un mensaje y ejecutaremos el comando:

echo "Running Nmap..."
nmap $1 | tail -n +5 | head -n -3 >> results

El nmap El comando toma el argumento que le proporcionamos al script, la dirección IP, y agrega los resultados a nuestro archivo de salida. El cola y cabeza Los comandos eliminan algunas líneas del principio y el final de la salida de Nmap; esto es solo mi preferencia personal y, en mi opinión, hace que se vea un poco más limpio.

Paso 3: enumere HTTP

La siguiente sección tomará los resultados del escaneo de Nmap e intentará enumerar HTTP si se cumplen ciertos criterios. Ejecutaremos Gobuster para buscar directorios y WhatWeb para obtener información sobre el servidor web.

Usaremos un ciclo while para leer cada línea de nuestro archivo de resultados, y si encuentra un puerto abierto que ejecuta HTTP, iniciará Gobuster y WhatWeb:

while read line
do
        if [[ $line == *open* ]] && [[ $line == *http* ]]
        then
                echo "Running Gobuster..."
                gobuster dir -u $1 -w /usr/share/wordlists/dirb/common.txt -qz > temp1

        echo "Running WhatWeb..."
        whatweb $1 -v > temp2
        fi
done < results

Si se encuentra un puerto HTTP abierto, se ejecutará el código en el bloque if-then. Gobuster toma la dirección IP que le proporcionamos como -u opción y utiliza una lista de palabras especificada por la -w opción. También usaremos el -q y -z opciones aquí para deshabilitar el banner y ocultar el progreso, nuevamente, solo para mantener la salida ordenada. Esto escribirá en un archivo temporal que se utilizará más adelante en el script.

WhatWeb simplemente toma la dirección IP que le proporcionamos y escribe la salida en un segundo archivo temporal. El -v La opción aquí nos da resultados detallados. Cuando el ciclo while agota todas las líneas del archivo de resultados, se completa y el script pasa a la siguiente sección.

Paso 4: mostrar los resultados

El siguiente bloque de código determinará si existen los archivos temporales anteriores y, de ser así, agregará la salida al archivo de resultados principal:

if [ -e temp1 ]
then
        printf "n----- DIRS -----nn" >> results
        cat temp1 >> results
        rm temp1
fi

if [ -e temp2 ]
then
    printf "n----- WEB -----nn" >> results
        cat temp2 >> results
        rm temp2
fi

El -mi La opción comprueba si el archivo existe; si existe, el código después luego carreras. Imprime otro encabezado, escribe el contenido del archivo temporal en nuestros resultados y elimina el archivo temporal.

Finalmente, la última línea de nuestro script simplemente mostrará los resultados en nuestra pantalla:

cat results

Paso 5: revise el guión

El script completo ahora debería verse así:

#!/bin/bash

if [ -z "$1" ]
then
        echo "Usage: ./recon.sh <IP>"
        exit 1
fi

printf "n----- NMAP -----nn" > results

echo "Running Nmap..."
nmap $1 | tail -n +5 | head -n -3 >> results

while read line
do
        if [[ $line == *open* ]] && [[ $line == *http* ]]
        then
                echo "Running Gobuster..."
                gobuster dir -u $1 -w /usr/share/wordlists/dirb/common.txt -qz > temp1

        echo "Running WhatWeb..."
        whatweb $1 -v > temp2
        fi
done < results

if [ -e temp1 ]
then
        printf "n----- DIRS -----nn" >> results
        cat temp1 >> results
        rm temp1
fi

if [ -e temp2 ]
then
    printf "n----- WEB -----nn" >> results
        cat temp2 >> results
        rm temp2
fi

cat results

Paso 6: ejecutar el script

Ahora deberíamos estar listos para ejecutar nuestro script de reconocimiento. En mi ejemplo, estoy usando Metasploitable 2 como el objetivo.

Primero, haga que el script sea ejecutable:

~# chmod +x recon.sh

Si intentamos ejecutarlo sin un argumento, nos da el ejemplo de uso:

~# ./recon.sh

Usage: ./recon.sh <IP>

Simplemente proporcione la dirección IP y ejecútela nuevamente:

~# ./recon.sh 10.10.0.50

Running Nmap...
Running Gobuster...
Running WhatWeb...
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete

----- NMAP -----

PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp
3306/tcp open  mysql
5432/tcp open  postgresql
5900/tcp open  vnc
6000/tcp open  X11
6667/tcp open  irc
8009/tcp open  ajp13
8180/tcp open  unknown

----- DIRS -----

/.hta (Status: 403)
/.htaccess (Status: 403)
/.htpasswd (Status: 403)
/.bash_history (Status: 200)
/cgi-bin/ (Status: 403)
/dav (Status: 301)
/phpMyAdmin (Status: 301)
/index (Status: 200)
/index.php (Status: 200)
/test (Status: 301)
/twiki (Status: 301)
/phpinfo (Status: 200)
/phpinfo.php (Status: 200)

----- WEB -----

WhatWeb report for http://10.10.0.50
Status    : 200 OK
Title     : Metasploitable2 - Linux
IP        : 10.10.0.50
Country   : RESERVED, ZZ

Summary   : WebDAV[2], X-Powered-By[PHP/5.2.4-2ubuntu5.24], Apache[2.2.8], PHP[5.2.4-2ubuntu5.24], HTTPServer[Ubuntu Linux][Apache/2.2.8 (Ubuntu) DAV/2]

Detected Plugins:
[ Apache ]
        The Apache HTTP Server Project is an effort to develop and
        maintain an open-source HTTP server for modern operating
        systems including UNIX and Windows NT. The goal of this
        project is to provide a secure, efficient and extensible
        server that provides HTTP services in sync with the current
        HTTP standards.

        Version      : 2.2.8 (from HTTP Server Header)
        Google Dorks: (3)
        Website     : http://httpd.apache.org/

[ HTTPServer ]
        HTTP server header string. This plugin also attempts to
        identify the operating system from the server header.

        OS           : Ubuntu Linux
        String       : Apache/2.2.8 (Ubuntu) DAV/2 (from server string)

[ PHP ]
        PHP is a widely-used general-purpose scripting language
        that is especially suited for Web development and can be
        embedded into HTML. This plugin identifies PHP errors,
        modules and versions and extracts the local file path and
        username if present.

        Version      : 5.2.4-2ubuntu5.24
        Google Dorks: (2)
        Website     : http://www.php.net/

[ WebDAV ]
        Web-based Distributed Authoring and Versioning (WebDAV) is
        a set of methods based on the Hypertext Transfer Protocol
        (HTTP) that facilitates collaboration between users in
        editing and managing documents and files stored on World
        Wide Web servers. - More Info:
        http://en.wikipedia.org/wiki/WebDAV

        Version      : 2

[ X-Powered-By ]
        X-Powered-By HTTP header

        String       : PHP/5.2.4-2ubuntu5.24 (from x-powered-by string)

HTTP Headers:
        HTTP/1.1 200 OK
        Date: Wed, 19 Jun 2019 18:03:39 GMT
        Server: Apache/2.2.8 (Ubuntu) DAV/2
        X-Powered-By: PHP/5.2.4-2ubuntu5.24
        Connection: close
        Transfer-Encoding: chunked
        Content-Type: text/html

Nos dice qué se está ejecutando (ignore el error ruby ​​de WhatWeb) e imprime una bonita pantalla de los resultados cuando está hecho.

Expandiendo el guión

En su estado actual, este script de Bash no es complicado. Ejecuta un escaneo de Nmap y, si se encuentra un puerto HTTP abierto, inicia Gobuster y WhatWeb. Si bien es útil, esto podría ampliarse de muchas maneras.

En primer lugar, solo estamos ejecutando un escaneo básico de Nmap. Podríamos escanear puertos adicionales, ejecutar los scripts predeterminados, habilitar la detección del sistema operativo y más. Básicamente, cualquier cosa que pueda hacer desde la línea de comando puede incluirla en el script. Lo mismo ocurre con Gobuster y WhatWeb.

También podríamos expandir el script para enumerar otros servicios además de HTTP. Cosas como SMB, SSH y FTP podrían ser buenos candidatos para agregar allí. Una vez más, el scripting Bash es poderoso porque es posible automatizar muchas de las funciones que se usan típicamente en una forma de línea de comandos.

Terminando

En este tutorial, creamos un script Bash para automatizar algunas de las actividades utilizadas en la fase de reconocimiento de una prueba de penetración. El script tomó una dirección IP como argumento, ejecutó un escaneo de Nmap en el objetivo y, si se encontraba un puerto HTTP abierto, inició Gobuster y WhatWeb. Bash Scripting es extremadamente poderoso, e incluso este simple script nos ahorró un montón de tiempo y de escritura.

Imagen de portada de StockSnap / Pixabay; Capturas de pantalla de drd_ / Null Byte

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar