alex@root:~$

Grep para Hackers

El comando grep es una herramienta de búsqueda de texto que se utiliza en sistemas operativos Unix, Linux y macOS. Su nombre proviene de “Global Regular Expression Print” (“Impresión global de expresiones regulares”, en español).

La función principal de grep es buscar patrones de texto dentro de uno o varios archivos. Los patrones se definen mediante expresiones regulares, que son secuencias de caracteres que describen un conjunto de cadenas de texto.

grep recorre línea por línea los archivos especificados y devuelve las líneas que contienen el patrón buscado. También puede mostrar la línea anterior o posterior a la que contiene el patrón, contar el número de líneas que contienen el patrón, entre otras funciones.

Acontinuacion vamos a ver con distintos ejemplos como puedes emplear grep en tu diario dia a dia como Hacker.

Obteniendo urls que comienzen con https:// http://

grep -o 'http[s]\?://[a-zA-Z0-9\-\.]\+\.[a-zA-Z]\{2,\}\(:[0-9]\+\)\?[^[:space:]]\+'

Obteniendo urls que comienzen con www. y no con http:/https:

grep -o 'www\.[a-zA-Z0-9\-\.]\+\.[a-zA-Z]\{2,\}\(:[0-9]\+\)\?[^[:space:]]\+'

Obteniendo IPs (IPv4)

grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

Obteniendo IPs IPv6

grep -oE "([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}"

Obteniendo direcciones que tengan el formato “usuario@gmail.com”

grep -oE ':alnum:]_]+@[[:alnum:]_]+\.[[:alpha:{2,4}'

Obteniendo direcciones que incluyan subdominios y tengan un fomato mas complejo

grep -oE ':alnum:]_]+@[[:alnum:]_]+\.[[:alpha:{2,4}(\.:alpha:{2,4})+'

Buscando buscando palabras claves dentro de directorios de manera recursiva

grep -r "password" /ruta/al/directorio

Buscando palabra clave dentro de un fichero individual

grep -i "password" index.php

Ejemplos de uso

Puedes usarlo para obtener todas las URLs de un sitio Web

curl -s https://target.com | grep -o 'http[s]\?://[a-zA-Z0-9\-\.]\+\.[a-zA-Z]\{2,\}\(:[0-9]\+\)\?[^[:space:]]\+' | cut -d '/' -f 3 | tr -d '">' | uniq -u

Puedes obtener urls de ficheros binarios

string <fichero binario> | grep 'http[s]\?://[a-zA-Z0-9\-\.]\+\.[a-zA-Z]\{2,\}\(:[0-9]\+\)\?[^[:space:]]\+'

Puedes usar grep para la recoleccion Emails de un fichero sql u otros ficheros.

cat db.sql | grep -oE ':alnum:]_]+@[[:alnum:]_]+\.[[:alpha:{2,4}(\.:alpha:{2,4})+' | uniq -u