This page looks best with JavaScript enabled

Pentesting con Bash - Conceptos básicos de scripting, Cap III

 ·   ·   4 min read

Conocer scripting en bash es de gran ayuda en el día a día, no sólo para un pentester, sino para todo aquel que tenga que trabajar con una consola de bash.

No voy a hacer valoraciones respecto a bash frente a otros lenguajes de scripting o programación. Pero como estamos en bash, voy a hablar un poco sobre como crear algunos scripts.

Bash, está bajo el paradigma de programación estructurada, por lo tanto veremos algunos ejemplos de condicionales, bucles y como jugar con variables, principalmente, para automatizar tareas repetitivas y manuales.

Aclaremos primero que el siguiente es un ejemplo y la intención no es realizar un ataque o análisis exhaustivo, sólo nos servirá de ejemplo. Supongamos que tenemos que hacer un análisis a una empresa pequeña local llamada Google, el alcance estará reducido a sus productos Youtube, Blogspot y Drive, por lo tanto debemos conocer su direcciones IPs.

Primero, armamos un listado en un fichero de texto con los nombres de dominio de nuestro alcance.

Ahora, utilizaremos algo de scripting para hacer un whois a cada uno de dominios que colocamos en el listado de la siguiente manera

for NombreDeVariable in $(cat NombreDeArchivo); do Acción $NombreDeVariable; done 

Lo que realizamos en éste ejemplo es correr un cat sobre el listado con los dominios de manera iterativa gracias al for, luego del ; colocamos do para indicar al script que debe realizar las acciones mencionadas a continuación. En este caso utilizamos un simple whois y lo guardamos en un archivo de texto. Por último terminamos el bloque de acciones con otro ; y por último done.

Si queremos extraer las direcciones ip, podemos utilizar algo de grep, cut y sort como hemos visto en el post anterior Pentesting con Bash Cap II.

De esas direcciones IPs, veamos cuáles poseen el puerto 80 abierto. Para eso podríamos volver a utilizar el bucle for, pero ésta vez utilizando nc con los parámetro n para que no resuelva dominio, v de verbose y w para establecer un timeout.

De éste ejemplo, podríamos extraer sólo las conexiones exitosas para utilizarlas con el fin de identificar el tipo de webserver, tecnología, versión, etc. Pero lo veremos más adelante en la fase de reconocimiento.

Hasta aquí, hemos visto cómo se pueden concatenar más de una acción en una misma línea de manera que nos queda un pequeño script. Para el siguiente ejemplo vamos a utilizar un editor de texto y nuestro código será un poco más elaborado.

Vamos a realizar un ping sweep en el cual podamos establecer a gusto los tres primeros octetos y el rango que deseamos analizar del último, además, sólo queremos ver los host que están activos.

El código es el siguiente:

Veamos en detalle qué es lo que hace nuestro código.

echo: Imprime en pantalla lo que le indiquemos, es el equivalente a print en otros lenguajes.

read: Se encarga de leer y guardar en una variable el contenido ingresado por teclado.

while: Es un bucle o iteración que se ve sujeta a una condición

$x: El signo pesos ($) se utiliza para las variables.

Una vez aclarados los aspectos más importantes del código, adentrémonos en su funcionamiento. Una vez que las variables son ingresadas por teclado (en éste caso ip, min y max) el bucle while itera mientras el contenido de $min sea menor o igual a $max.

El while se comporta de manera similar a un condicional if, sólo que repite una acción mientras la condición que le hemos declarado se cumpla. Mientras que la condición se cumpla, el código ejecutará el las instrucciones (do) que siguen.

El ping -n es para que realice una sola petición por icmp (en linux el ping no está configurado como en windows para que sólo realice cuatro peticiones, sino que las realiza hasta que el usuario finalice la acción).

El ping es realizado a la IP y rango que hemos definido en las variables. La variable “$ip” almacena los tres primeros octetos (por ejemplo 192.168.10), mientras que la variable “$min” en la primer iteración posee el valor que le asignamos al comienzo.

La utilización de egrep con los strings ping y recibidos es para en pantalla sólo sean impresos los host que recibieron el ping exitosamente.

Para que la iteración continúa hasta que la condición sea falsa, debemos hacer incrementar el valor de la variable “$min”, en éste caso el incremento lo hacemos de uno en uno realizando una adhesión al valor anterior.

Una vez guardado nuestro script y asignado los permisos de ejecución ya podemos probar si funciona correctamente:

Para más bash scripting, podés visitar éste link http://www.sniferl4bs.com/2016/12/bash-scripting-for-pen-testers-x-2.html

Saludos.

@balderramaeric

Share on
Support the author with

Avatar
WRITTEN BY