Explotación y Escalada de Privilegios en Seguridad
Explotación y Escalada de Privilegios en Seguridad
2/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
I. Explotación
1.1. Introducción
Tras la identificación de vulnerabilidades en los servicios identificados en las fases anteriores, el siguiente
paso es explotarlas con el objetivo de mostrar el riesgo real de la vulnerabilidad.
1.2. Objetivos
Con esta unidad el estudiante continuará trabajando en las fases que componen una auditoría de
seguridad, pero esta vez, centrándonos en las fases de explotación y escalada de privilegios.
En cuanto a la fase de explotación, el alumno aprenderá los diferentes vectores de ataque, algunos tipos
d e exploit y cómo buscarlos. Además, es importante familiarizarse con diferentes herramientas que
resaltarán de gran utilidad en un futuro como auditor de seguridad.
Con respecto a la escalada de privilegios, en esta unidad los estudiantes conocerán varios métodos de
escalada de privilegios, así como herramientas que les servirán de ayuda para llevarlos a cabo.
1.3. Teoría
Un exploit es un software o técnica que permite explotar o aprovechar una vulnerabilidad de seguridad
de un sistema de información para conseguir un comportamiento no deseado del mismo.
A modo general, desde un punto de vista de ejecución, para la misma hay que contar con:
3/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
La explotación es una fase vital en la ejecución de un test de intrusión ya que nos permite evaluar el
riesgo real de la vulnerabilidad, tanto en información obtenida como en la posibilidad de saltar o pivotar
hacia otros sistemas.
En exploiting, una shellcode es una pequeña porción de código utilizada como carga útil en la
explotación de una vulnerabilidad de software. Se llama "shellcode" porque normalmente inicia un
shell de comandos desde el cual el atacante puede controlar la máquina comprometida, pero
cualquier código que realice una tarea similar se puede llamar shellcode. Hay dos tipos
diferenciados:
Local: normalmente es el utilizado por un atacante que tiene acceso limitado a una
máquina, pero puede explotar una vulnerabilidad, por ejemplo, un desbordamiento de
búfer, en un proceso de mayor privilegio en esa máquina.
Si se ejecuta con éxito, la shellcode proporcionará al atacante acceso a la máquina con
los mismos privilegios superiores que el procesado.
Remota: se utiliza cuando un atacante desea apuntar a un proceso vulnerable que se
ejecuta en otra máquina en una red local, intranet o red remota. Si se ejecuta con éxito, la
shellcode puede proporcionar acceso al atacante a la máquina de destino a través de la
red. Se puede ejecutar remotamente, mediante el procesamiento de un servidor o
localmente, mediante algún tipo de engaño del usuario.
Más adelante vamos a ver este concepto y es necesario tener claro cuál es su finalidad.
4/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Referencias:
[Link]
[Link]
Exploit
Es el código que tiene por objeto ejecutar instrucciones en la víctima de manera no autorizada. Es el
cómo se explota una vulnerabilidad.
Payload
Son las instrucciones que se ejecutan desde la víctima y que nos ofrecen el acceso o interacción no
autorizada a raíz de la explotación de las vulnerabilidades. Es el qué se explota en una vulnerabilidad.
Service-side
Son aquellos que tienen por objetivo comprometer un servicio que ejecuta en modo servidor, como
por ejemplo el servicio apache.
Client-side
Lo s exploit de esta categoría afectan a software que ejecuta en el lado cliente y dentro de esta
agrupación figuran las aplicaciones que más comúnmente usamos en nuestro día a día, tal y como son
el navegador web, una hoja de cálculo o el cliente de correo electrónico.
Son exploits que deben ser ejecutados localmente, es decir, desde la propia máquina, ya sea bien por
consola o por acceso remoto.
5/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Como alternativa a esta, la base de datos online de exploit-db, es una fuente muy útil de información y
búsqueda de exploits de todo tipo, ya sean remotos, locales, de kernel Linux, de explotación de servicios a
través de buffer overflow, etc., y [Link], que cuenta con una base de datos similar a la que dispone
exploit-db.
[Link]
6/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
[Link]
1.7. Metasploit
Metasploit es una plataforma avanzada de código abierto para desarrollar, probar y utilizar código de
explotación escrito en Ruby. Contiene herramientas de desarrollo orientadas a explotar vulnerabilidades.
Lo s frameworks estandarizan la sintaxis de uso de exploit y proporcionan capacidades dinámicas de
código shell. Esto significa que, para cada exploit en el framework, se pueden seleccionar diferentes
payloads , como una bind shell, una reverse shell, descarga y ejecución de shellcodes , etc.
Metasploit cuenta con dos principales interfaces de usuario: msfconsole y armitage. La primera y más
común, es una consola interactiva, usada para ejecutar tareas regulares; la segunda, es un add-on de
terceros que proporciona al usuario una interfaz gráfica.
Mediante el comando show se pueden enumerar los diferentes exploits , módulos auxiliares, payloads y
plugins que ofrece este framework tan completo.
Exploits
Organizados en función del sistema operativo y software afectados, lista tanto de client-side como de
server-side.
# show exploits
7/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Payloads
# show payloads
Encoders
Modifica los exploits y los payloads para evadir elementos de seguridad tales como IDS, IPS, AV.
# show encoders
Auxiliary
Módulos de apoyo durante un test de intrusión, la mayoría son relativos a ejercicios de escaneos o
fuerza bruta.
Post
8/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
ENLACE
ENLACE
Como se ha comentado, otros módulos auxiliares incluyen opciones de fuerza bruta contra
determinados servicios. El mostrado a continuación, se lleva a cabo contra un servidor FTP, donde se
hace fuerza bruta contra el login:
ENLACE
Este framework cuenta con más de 1000 exploits para diferentes plataformas y arquitecturas. Estos se
invocan de la misma manera que en el caso de los módulos auxiliares. A continuación, vamos a mostrar un
ejemplo de explotación del servicio pop3.
Lo primero que tenemos que hacer es seleccionar el host objetivo con el comando set RHOST $ip. El
puerto no es necesario seleccionarlo ya que viene por defecto. Sin embargo, puede darse la situación de
que el servicio se esté ejecutando en otro puerto, por lo que tendríamos que seleccionarlo con set
RPORT $port.
A continuación, vamos a seleccionar el payload , en este caso al tratarse de sistema Windows, una
reverse shell de Windows: set PAYLOAD windows/shell_reverse_tcp.
9/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
El siguiente paso es configurar nuestro payload añadiendo nuestra IP y puerto de escucha de la shell que
vamos a ejecutar en nuestro objetivo. Esto se hace de la misma manera que se explicó unas líneas más
arriba, con la diferencia que vamos a utilizar LHOST y LPORT, que hacen referencia a nuestra máquina.
Una vez configurado todo, ejecutamos el exploit:
ENLACE
Existen dos tipos de payloads : staged y non-staged . En este apartado se van a ver las diferencias entre
ambos.
La primera parte es payload primario, el stager, que establece una conexión entre la
víctima y el atacante a través de la red mediante bind_tcp, reverse_tcp, reverse_http,
etc.
Stage: es el payload secundario, que contiene el resto del shellcode. Es lo que
realmente se ejecuta en la víctima, una vez se ha establecido la conexión entre la
víctima y el atacante. Normalmente se trata de un programa que se carga la memoria
para evitar que sea fácilmente trazable.
VNC, meterpreter.
Actualmente, los stages incluyen su código en el proceso explotado inyectándose
como DLL.
Se pueden dar diferentes situaciones en las que se precise el uso de staged shellcodes en vez de las non-
staged:
La vulnerabilidad que estamos explotando no tiene suficiente espacio de búfer para contener un
payload completo. Como la primera parte de un payload staged es más pequeña que un payload
completo, los que son más pequeños a menudo pueden salvarnos en situaciones complejas.
El software antivirus detecta código shell incrustado en un exploit. Reemplazando el código shell
incrustado con payload staged , eliminaremos la mayor parte de la parte maliciosa del código shell
y la inyectaremos directamente en la memoria de la máquina víctima.
10/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
El framework de Metasploit no solo dispone de una variedad de payloads , sino que también ofrece la
posibilidad de generar la shellcode para incrustar en nuestro exploit y, por otro lado, exportar estos
mismos dentro de diferentes tipos de ficheros y formatos, como son ASP, VBScript, Java War, Windows
DLL y EXE, etc.
11/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
ENLACE
En el ejemplo anterior se observa que hay presencia de caracteres nulos, que pueden provocar que
nuestro shellcode sea ejecutado. Msfvenom permite la generación de shellcodes sin este tipo de
caracteres. Además, en el siguiente ejemplo se va a utilizar la opción para codificar el shellcode
generado:
ENLACE
Este tipo de payloads pueden ser usados como parte de ataques client-side, backdoors o como
método de para pasar un payload de una máquina a otras.
Binarios
Basados en Linux
Basados en Windows
Basados en Mac
12/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Web Payloads
PHP
cat [Link] | pbcopy && echo '<?php ' | tr -d '\n' > [Link] && pbpaste >> [Link]
ASP
JSP
WAR
Scripting Payloads
Python
Bash
Perl
13/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Bind
Reverse
Reuse-socket
Este tipo de shellcode es mucho menos común. A veces se usa cuando un exploit establece una
conexión con el proceso vulnerable que no se cierra antes de ejecutar el shellcode. El shellcode puede
entonces volver a usar esta conexión para comunicarse con el atacante. La utilización de shellcode es
más elaborada, ya que el shellcode necesita saber qué conexión emplear para volver a usar y la máquina
puede tener muchas conexiones abiertas.
Lectura recomendada:
[Link]
2.1. Introducción
Una vez completada la fase de explotación y habiendo obtenido un acceso en el sistema remoto, es
posible que el acceso que se ha logrado no disponga de los privilegios adecuados para realizar ciertas
operaciones.
Es en este momento cuando entra en juego la fase de elevación de privilegios, en la que se intenta,
mediante varias técnicas, conseguir un acceso con mayores privilegios que no suponga ningún
impedimento a la hora de poder ejecutar todo tipo de operaciones en el sistema remoto.
2.2. Teoría
El concepto de escalada de privilegios es el resultado de acciones que permiten a un adversario obtener
un mayor nivel de permisos en un sistema o red a partir de un acceso más restringido.
14/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Ciertas herramientas o acciones requieren un mayor nivel de privilegio para poder ejecutarse. No
disponer de los privilegios adecuados puede impedir la operativa de las mismas y, por tanto, el éxito en
mayor o menor medida del compromiso del equipo remoto.
Existen numerosas tácticas para lograr la elevación de privilegios. A continuación, se enumeran las más
comunes.
Fallos en la configuración
En este apartado se incluirían todas las técnicas utilizadas que se aprovechen de un defecto en la
configuración de las aplicaciones, protocolos, tecnologías, etc. Por ejemplo, el uso de contraseñas por
defecto, una mala gestión de los permisos de acceso o modificación de ficheros sensibles, etc.
Engloba todos los fallos o vulnerabilidades en los mecanismos de autorización. Por ejemplo, que
pueda evadirse el sistema de autenticación de una determinada aplicación o servicio. También se
incluyen fallos o vulnerabilidades en los mecanismos de autorización como que no se compruebe la
autorización de un usuario al acceder a un recurso, que se pueda engañar al sistema de autorización para
que crea que somos un usuario con mayores privilegios, etc.
Inyección en procesos
Su objetivo consiste en intentar inyectar las operaciones deseadas en un proceso que disponga de
privilegios elevados. De esta manera, la operación será ejecutada por el proceso con los privilegios
elevados de los que dispone.
Modificación de servicios
De la misma manera que la técnica anterior, este procedimiento consiste en localizar servicios que se
ejecuten con privilegios elevados, con la finalidad de intentar modificarlos para que realicen las
operaciones elevadas. Dado que las operaciones serán realizadas por el propio servicio, se ejecutarán
con los privilegios elevados del mismo.
15/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Incluye técnicas para averiguar las credenciales de un usuario que disponga de privilegios elevados.
Para ello, se realizan ataques de fuerza bruta, que consisten en probar posibles combinaciones de la
contraseña o usuario/contraseña, sobre una determinada aplicación o servicio hasta que localizan la
contraseña utilizada por el usuario.
Meterpreter es una shell incluida en Metasploit para poder acceder a un equipo remoto o incluso local,
que ha sido comprometido.
Dentro de todo el abanico de módulos disponibles, existe una funcionalidad especifica getsystem que
trata de realizar una elevación de privilegios en los sistemas comprometidos que estén ejecutando ciertas
versiones de Microsoft Windows y que no se encuentren debidamente parcheados.
Para acometer esta tarea, puede utilizar 4 técnicas diferentes, si invocamos la ayuda del módulo
podremos ver las técnicas utilizadas y el método de invocación.
16/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
En caso de no forzar el intento de elevación de privilegios con ninguna técnica en concreto, el módulo
getsystem intentará elevar privilegios de manera consecutiva hasta que se consiga elevar privilegios con
alguna de las técnicas disponibles.
En ciertas ocasiones, dependiendo de la versión del sistema operativo y el nivel de parcheo del mismo,
no es posible realizar una elevación de privilegios mediante el módulo incluido en la shell de meterpreter.
En estos casos, es necesario utilizar algún exploit de elevación de privilegios que se ejecutará a través del
canal de comunicaciones ya establecido por meterpreter, pero que utilizará alguna vulnerabilidad conocida
para elevar privilegios distinta a las que ya incluye el propio meterpreter. A continuación, se muestran los
distintos exploits disponibles para la elevación de privilegios locales en un sistema Microsoft Windows.
17/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
A modo de ejemplo, utilizaremos el exploit ms10_015_kitrap0d, dado que la ejecución se realiza fuera
de meterpreter, pero necesitamos mantener la comunicación con el sistema remoto, ponemos la sesión de
meterpreter en background .
18/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Como podemos comprobar, al ejecutar el exploit, este utilizará la sesión de meterpreter que dejamos en
background para lanzar el exploit, el cual elevará privilegios y nos devolverá una nueva sesión de
meterpreter, pero con privilegios elevados de nt authority\system
19/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Es posible localizar bastantes exploits funcionales en ciertas fuentes (como por ejemplo [Link]
o realizando una búsqueda con la herramienta searchsploit). Estos se aprovechan de alguna vulnerabilidad
conocida para realizar una elevación de privilegios.
Como contrapartida, la morfología de estos exploits es bastante heterogénea, pueden estar desarrollados
en diferentes lenguajes de programación, estar documentados o no, ser versiones funcionales o pruebas de
concepto que necesitan modificarse para que sean funcionales en nuestro entorno objetivo, etc.
Este exploit está desarrollado en lenguaje Python, de esta manera, se podrá ejecutar directamente en el
sistema objetivo siempre que tenga instalado el intérprete de Python. En caso que el intérprete no se
encuentre instalado, se deberá compilar con Python el exploit para que produzca un fichero binario .exe
que integraría el propio motor de Python, para ser ejecutado en cualquier sistema sin necesidad de
disponer del intérprete de Python previamente instalado.
[Link] -O 2k3
20/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
De manera similar, en este caso, se muestra la ejecución de un exploit de elevación de privilegios locales,
en distribuciones Linux con versiones de Kernel comprendidas entre 2.4.4 y [Link] o versiones entre
2.6.0 y [Link] que se aprovecha de una vulnerabilidad conocida en el sistema SELinux ([Link]
[Link]/raw/9545/)
Dado que este exploit está desarrollado en lenguaje C, será necesario compilarlo según las instrucciones
indicadas en los propios comentarios existentes en el código fuente del exploit.
Como podemos comprobar, en el sistema objetivo disponemos de una sesión remota con un usuario
menos privilegiado apache:
21/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Como se puede comprobar, tras la ejecución del exploit, la shell previamente establecida pasa a tener
privilegios elevados como usuario root.
En este tipo de técnicas, las probabilidades de éxito de localizar credenciales válidas dependen, en gran
medida, de la utilización de un buen diccionario de posibles contraseñas para probar. Además, la utilización
de un buen diccionario limita el número de peticiones qe se van a realizar y reduce el tiempo necesario para
localizar las contraseñas.
22/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Existen varias aplicaciones para realizar este tipo de pruebas, cada una de ellas tiene ciertas
características como la compatibilidad con ciertos protocolos o la eficiencia de las mismas en cuanto a la
cantidad de distintas contraseñas por minuto que puede comprobar, etc. En los siguientes apartados se
enumeran algunas de ellas.
2.5.1. Medusa
Es considerada como una herramienta de fuerza bruta bastante rápida, con posibilidad de paralelismo,
utilizada en ataques masivos. Los servicios sobre los que esta herramienta puede operar se encuentran en el
directorio de módulos de la misma (/usr/lib/medusa/modules/):
Por ejemplo, para realizar pruebas sobre un determinado directorio web protegido mediante
htaccess se utilizaría el siguiente comando:
De manera similar, si queremos probar una única contraseña débil sobre un listado de usuarios,
utilizaríamos el siguiente comando:
2.5.2. ncrack
Al igual que la herramienta anterior, es bastante rápida, incorpora funcionalidades de paralelismo de las
conexiones.
A continuación, se muestra el comando utilizado para realizar un ataque de fuerza bruta sobre el
protocolo RDP.
23/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Por el contrario, en este otro ejemplo, se muestra el comando utilizado para realizar un ataque de fuerza
bruta sobre el protocolo SSH:
2.5.3. hydra
Es parecida a las herramientas anteriores, se recomienda su uso para hacer fuerza bruta sobre las
community string de SNMP.
El siguiente comando muestra la ejecución de un ataque de fuerza bruta, sobre el protocolo snmp, para
averiguar las community strings que proporcionan acceso al servicio.
2.5.4. patator
Dispone de un sistema de módulos que soporta la iteración con bastantes protocolos. Aunque la forma
de operar con esta herramienta difiere de las anteriores, es la que más opciones de configuración ofrece,
permitiendo establecer las condiciones necesarias para evaluar la respuesta emitida por el equipo remoto y
considerar si las credenciales introducidas son correctas.
A continuación, se muestra un ejemplo en el que se realiza un ataque de fuerza bruta sobre el servicio
FTP para enumerar nombres de usuario válidos que se encuentren en un listado de usuarios
proporcionado en un fichero. Además, se indica que, si el servidor devuelve el mensaje ‘ Login
incorrect’, se considera que el usuario probado no es válido en el sistema remoto.
ENLACE
En este otro ejemplo, la herramienta trata de averiguar usuarios válidos en el servicio SSH utilizando
una regla basada en el tiempo. Se configura para que, si el servidor SSH devuelve cualquier respuesta
antes de 3 segundos, se considere que el usuario probado no es un usuario válido del sistema.
ENLACE
24/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Está estructurado en distintos módulos, cada uno con varias funcionalidades diferentes para extraer la
información de autenticación que permanezca en memoria.
Para ejecutar correctamente la mayoría de los módulos, es necesario iniciar Mimikatz desde un usuario
privilegiado. En caso contrario, Mimikatz no podrá ejecutar ciertas operaciones reservadas a usuarios con
más privilegios en el sistema.
A continuación, se muestran varias técnicas para extraer de la memoria contraseñas en texto plano,
hashes de contraseñas y tickets de Kerberos. Cualquiera de las opciones mencionadas puede ser utilizada
para autenticarse en un sistema impersonando al usuario legítimo.
Mimikatz puede recuperar de la memoria las contraseñas en texto plano de los usuarios que hayan
iniciado sesión en el sistema objetivo desde la última vez que se reinició, para ello necesita inyectarse en el
proceso LSASS, para lo cual necesitamos haber iniciado Mimikatz desde una sesión de un usuario
privilegiado.
Para comprobar si se disponen de los privilegios necesarios, se puede utilizar el método privilege de
Mimikatz con la funcionalidad debug:
mimikatz # privilege::debug
Privilege '20' OK
Una vez que comprobamos que disponemos de los privilegios asociados, invocamos al método
sekurlsa con la funcionalidad logonpasswords .
A continuación, se muestra la invocación del comando y cómo se obtienen las credenciales de los
usuarios que hubiesen iniciado sesión, en texto plano.
ENLACE
25/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Los tickets de Kerberos son unos identificadores de sesión, utilizados en las infraestructuras Microsoft
que autentican a un usuario en el sistema local o en sistemas remotos. De tal manera, si se puede extraer
cualquiera de estos tickets , siempre que siga teniendo validez, podremos autenticarnos con él suplantando
la identidad del usuario legítimo.
Al igual que en el ejemplo anterior, Mimikatz puede recuperar de la memoria tickets de autenticación de
Kerberos de todas las sesiones presentes en el sistema objetivo. Para ello también necesita inyectarse en el
proceso LSASS, para lo cual necesitamos haber iniciado Mimikatz desde una sesión de un usuario
privilegiado.
Para poder exportar estos tickets , invocamos al método sekurlsa con la funcionalidad tickets ,
indicando además el operador /export para que los tickets se exporten a un fichero.
A continuación, se muestra la invocación del comando y cómo se obtienen las credenciales de los
usuarios que hubiesen iniciado sesión, en texto plano.
ENLACE
El fichero SAM contiene los hashes de las contraseñas de los usuarios locales del sistema. Es un archivo
protegido y no es posible acceder a su contenido mientras el sistema operativo se encuentra en ejecución,
dado que en ciertos servicios podemos realizar una autenticación mediante el usuario y el hash de su
contraseña, pudiendo impersonar al usuario legítimo.
Además, estos hashes podrían ser revertidos, mediante el uso de técnicas de cracking, a la contraseña en
claro del usuario.
En este caso, para poder exportar el contenido del fichero SAM, además de haber iniciado sesión
con un usuario privilegiado, es necesario obtener privilegios de NT AUTHORITY\SYSTEM. Esta
operación de obtener privilegios elevados la puede ejecutar directamente Mimikatz a través del método
token con la funcionalidad elevate .
26/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Una vez que se ha realizado esta elevación de privilegios, es posible acceder al contenido del fichero
SAM en memoria. Para acometer esta tarea se ha de invocar al módulo lsadump con la funcionalidad
sam.
A continuación, se muestra el resultado de acceder al contenido del fichero sam, en el que se muestra
el hash NTLM de la contraseña de cada usuario local del sistema.
ENLACE
La principal ventaja radica en que, si logramos acceder a los hashes LM o NTLM de las contraseñas de
los usuarios, no es necesario averiguar estas contraseñas mediante técnicas de cracking que, dependiendo
del equipamiento informático dónde se realicen, podrían tardar entre varias horas y varios días en averiguar
ciertas credenciales a texto plano.
Existen varias herramientas que nos permiten utilizar la técnica de Pass the Hash. A continuación, se
enumeran algunos ejemplos.
Existen varios módulos de Metasploit que permiten autenticar a un usuario indicando el hash de su
contraseña.
Por ejemplo, el siguiente módulo auxiliar smb_login comprueba las máquinas remotas donde el usuario
tiene privilegios para hacer login. En este caso, se indica el hash NTLM del usuario para realizar la
autenticación.
27/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
En caso que no se le indique ningún comando para ejecutar, Mimikatz abrirá una shell cmd (en el equipo
local) con los privilegios del usuario indicado.
28/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Existe una completa suite pth-toolkit que implementa la ejecución de varias herramientas que permiten la
ejecución de ordenes en el sistema remoto realizando la autenticación mediante el hash NTLM. A
continuación, se muestra el listado completo.
pth-curl
pth-net
pth-rpcclient
pth-smbclient
pth-smbget
pth-sqsh
pth-winexe
pth-wmic
pth-wmis
Por poner algún ejemplo, el comando pth-winexe , es capaz de ejecutar un comando en el equipo
remoto, utilizando el hash NTLM de un usuario dado.
Por ejemplo, para ejecutar un cmd en la máquina remota y que se nos devuelva una shell inversa en
nuestra máquina, se utilizaría el siguiente comando:
pth-winexe -U
Administrator%d7a2630a9ecc4aff186fc03070888283:480d1d426fe52721b915e7870c9e1a8f
//[Link] [Link]
De manera similar, también es posible ejecutar los comandos net de Microsoft Windows en el sistema
remoto mediante pth-net e indicando los hashes como en el caso anterior. En este caso se crea un nuevo
usuario y se añade al grupo de administradores locales de la máquina.
29/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
También es posible autenticarnos con el hash NTLM de un usuario mediante el escritorio remoto, para
ello debemos utilizar la herramienta freerdp.
De la misma manera, se pueden utilizar los hashes NTLM en scripts de nmap para realizar la
autenticación de los mismos en el sistema remoto.
30/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Por definición, un hash no se puede revertir a su contraseña en texto claro, la única manera de averiguar
la contraseña inicial con la que se generó ese hash consiste en probar posibles combinaciones de
contraseñas y aplicar el mismo algoritmo de hash empleado por el protocolo de hashing utilizado para
almacenar la contraseña. En caso que los hashes coincidan, significará que habremos averiguado la
contraseña, ya que genera el mismo hash.
Existen varias aplicaciones que pueden realizar cracking de distintos tipos de hashes , pero a
continuación mostramos las más utilizadas debido a la cantidad de algoritmos de hashes que soportan,
posibilidad de paralelismo o capacidades de utilizar procesamiento GPU para realizar los cálculos de
hashing.
Además, soporta paralelización de procesos, pudiendo indicar el número de cores de CPU que se le
asignan al proceso de cracking.
Otra opción interesante, es que soporta permutaciones de una misma contraseña, es decir, se pueden
indicar reglas específicas para que realice una serie de transformaciones a cada contraseña del diccionario
especificado y probar variaciones de la contraseña como, por ejemplo:
La siguiente captura de pantalla muestra un ejemplo de uso de John the ripper en el que se realiza un
proceso de cracking de contraseñas sobre unos hashes NTLM utilizando 2 cores para el proceso e
indicando que se utilicen todas las reglas disponibles para realizar permutaciones de las contraseñas.
31/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
2.8.2. hashcat
Como las anteriores, hashcat es una herramienta de cracking de contraseñas. Soporta muchos más
algoritmos de hashing que John para realizar el proceso de cracking, lo cual la dota de mayor versatilidad.
Además, soporta el uso de procesamiento GPU, utilizado en las tarjetas gráficas, mucho más rápido que
el uso de procesadores CPU convencionales.
Una curiosidad es que en hashcat se indica el tipo de algoritmo de hash con el parámetro -m seguido
de un identificador numérico que indica el algoritmo de hash que se va a utilizar. Al invocar la ayuda de
hashcat, se muestran los tipos de algoritmos soportados:
ENLACE
El siguiente ejemplo muestra el proceso de cracking de una serie de hashes incluidos en el fichero
[Link], probando las contraseñas almacenadas en el fichero [Link] e indicando en el
parámetro -m 1000 que los hashes se encuentran en formato NTLM.
ENLACE
32/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Otra opción interesante, es que soporta la posibilidad de probar contraseñas en base a una máscara
en la cual se puede indicar la longitud mínima y máxima de las contraseñas para probar, y el tipo de
dígito que podrá tener en cada posición. El uso de máscaras trata de emular el tipo de contraseñas que
generan los usuarios convencionales basándose en la política de generación de contraseñas presente en
el sistema.
A continuación, se muestra la equivalencia de cada opción de máscara con el charset al que hace
referencia.
ENLACE
Siguiendo la leyenda anterior, el siguiente ejemplo intenta realizar el cracking de unos hashes NTLM
indicados en el fichero [Link], generando contraseñas que constan de una primera letra mayúscula,
seguido de 7 letras minúsculas y 4 dígitos al final de la contraseña.
33/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Vamos a poner como ejemplo la explotación de la vulnerabilidad Aurora, una vulnerabilidad que
compromete la memoria, presente en Internet Explorer.
Esta vulnerabilidad fue un componente clave de los ataques de la "Operación Aurora" que condujeron
al compromiso de un número de compañías de alto perfil. El código de explotación es un puerto directo
de la muestra pública publicada en el sitio de análisis de malware de Wepawet. La técnica utilizada por
este módulo puede explotar únicamente Internet Explorer 6 de forma fiable.
34/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Cuando un usuario visita la URL maliciosa que hemos creado, se crea una sesión de meterpreter que
nos proporciona acceso completo al sistema.
Una vez nos conectamos a la sesión de meterpreter que se ha creado, hacemos un ipconfig y vemos
que el sistema vulnerado es dual, se comunica con diferentes redes dentro de una organización.
35/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
A continuación, vamos a utilizar la información recién descubierta y atacar la red adicional. Metasploit
tiene un script de autoroute meterpreter que nos permitirá atacar esta segunda red a través de nuestra
primera máquina comprometida.
Ahora que hemos agregado nuestra ruta adicional, escalaremos a SYSTEM, volcaremos los hashes
de contraseñas y pondremos en segundo plano nuestra sesión de intérprete de medidores presionando
Ctrl-z.
36/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Ahora tenemos que determinar si hay otros sistemas en esta segunda red que hemos descubierto.
Usaremos un escáner básico de puertos TCP para buscar los puertos 139 y 445.
37/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Una vez que hemos descubierto un host con los puertos 139 y 445 abiertos, vamos a utilizar el
módulo de psexec con los hashes que hemos obtenido anteriormente.
38/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
El ataque ha sido exitoso, hemos creado una nueva sesión de meterpreter sobre el objetivo que se
conecta a través del sistema que vulneramos anteriormente. Para comprobar que estamos en dicha
máquina, ejecutaremos un ifconfig para verificarlo:
Como hemos podido observar, pivotar es una característica extremadamente poderosa y es una
capacidad crítica para tener en las pruebas de penetración.
III. Resumen
En esta unidad hemos estudiado las fases de explotación y escalada de privilegios.
Como hemos visto, para la fase de explotación es esencial saber que un exploit se utiliza para conseguir
un comportamiento específico de un sistema de información aprovechando una vulnerabilidad de
seguridad. Respecto a esto, también hemos estudiado diferentes tipos, vectores de entrada, en qué consiste
un sellcode, diferentes tipos y su generación, etc.
En cuanto a la escalada de privilegios, hemos aprendido que existen diferentes tácticas para realizarla y
que tenemos a nuestra disposición varias herramientas que nos ayudarán a llevar a cabo esta tarea.
Por ejemplo: en local (Windows y Linux), mediante fuerza bruta empleando diferentes
herramientas y empleando técnicas Pass the Hash, entre otras.
39/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Recursos
Enlaces de Interés
[Link]
ZenMap (recopilación de herramientas usadas)
[Link]
Xforce (recopilación de herramientas usadas)
[Link]
WPScan (recopilación de herramientas usadas)
[Link]
Wireshark (recopilación de herramientas usadas)
[Link]
Whois (recopilación de herramientas usadas)
[Link]
Vulscan (recopilación de herramientas usadas)
[Link]
theHarvester (recopilación de herramientas usadas)
[Link]
SSLscan (recopilación de herramientas usadas)
[Link]
Shodan (recopilación de herramientas usadas)
[Link]
Securitytracker (recopilación de herramientas usadas)
[Link]
Securityfocus (recopilación de herramientas usadas)
[Link]
Searchsploit (recopilación de herramientas usadas)
[Link]
Robtex (recopilación de herramientas usadas)
[Link]
Ripe (recopilación de herramientas usadas)
40/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
[Link]
Recon-ng (recopilación de herramientas usadas)
[Link]
Qualys web-app (recopilación de herramientas usadas)
[Link]
Qualys SSL (recopilación de herramientas usadas)
[Link]
Pth-toolkit (recopilación de herramientas usadas)
[Link]
Patator (recopilación de herramientas usadas)
[Link]
Pastebin (recopilación de herramientas usadas)
[Link]
Openvas (recopilación de herramientas usadas)
[Link]
Nmap (4)
[Link]
Nmap (3)
[Link]
Nmap (2)
[Link]
Nmap (1)
[Link]
Nmap (recopilación de herramientas usadas)
[Link]
Netcat (recopilación de herramientas usadas)
[Link]
Nessus (recopilación de herramientas usadas)
[Link]
Ncrack (recopilación de herramientas usadas)
[Link]
Mimikatz (recopilación de herramientas usadas)
41/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
[Link]
Metasploit (recopilación de herramientas usadas)
[Link]
Medusa (recopilación de herramientas usadas)
[Link]
Jhon the Ripper (recopilación de herramientas usadas)
[Link]
ICMP
[Link]
Hydra (recopilación de herramientas usadas)
[Link]
Hashcat (recopilación de herramientas usadas)
[Link]
Google (recopilación de herramientas usadas)
[Link]
Github (recopilación de herramientas usadas)
[Link]
FOCA (recopilación de herramientas usadas)
[Link]
Expliot-db (recopilación de herramientas usadas)
[Link]
Enum4linux (recopilación de herramientas usadas)
[Link]
Dnsenum (recopilación de herramientas usadas)
[Link]
CVE (recopilación de herramientas usadas)
[Link]
Bing (recopilación de herramientas usadas)
[Link]
Attack Mitre
[Link]
Arp-scan (recopilación de herramientas usadas)
42/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
[Link]
Arin (recopilación de herramientas usadas)
[Link]
[Link] (recopilación de herramientas usadas)
[Link]
Acunetix (recopilación de herramientas usadas)
[Link]
0day (recopilación de herramientas usadas)
Bibliografía
0day.: [Link]
Hash Crack: Password Cracking Manual. : Picolet, J. (2018). Hash Crack: Password
Cracking Manual.
Penetration Testing Fundamentals: A Hands-On Guide to Reliable Security Audits . :
Easttom, C. (2018). Penetration Testing Fundamentals: A Hands-On Guide to Reliable Security
Audits . Indianapolis: Pearson IT.
Acunetix.: [Link]
[Link].: [Link]
Arin.: [Link]
Arp-scan.: [Link]
Attack Mitre.: [Link]
CVE.: [Link]
Dnsenum.: [Link]
Dnsrecon.: [Link]
Documentación de scripts de Nmap.: [Link]
Enum4linux.: [Link]
Exploit-db.: [Link]
Exploit-db. Linux sock_sendpage() NULL pointer dereference.: [Link]
[Link]/raw/9545/
Exploit-db. Microsoft Windows XP/2003 - '[Link]' Local Privilege Escalation (MS11-
080).: [Link]
FOCA.: [Link]
Github.: [Link]
Hashcat.: [Link]
43/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Hydra.: [Link]
Internet Control Message Protocol (ICMP).:
[Link]
Jhon the Ripper.: [Link]
Medusa.: [Link]
Metasploit.: [Link]
Mimikatz.: [Link]
Ncrack.: [Link]
Nessus.: [Link]
Netcat.: [Link]
Nmap.: [Link]
Nmap. Control de tiempo y rendimiento.: [Link]
Offensive Security. Metasploit Unleashed – Free Ethical Hacking Course.:
[Link]
Openvas.: [Link]
OSVDB.: [Link]
Pastebin.: [Link]
Patator.: [Link]
Pth-toolkit.: [Link]
Qualys SSL.: [Link]
Qualys.: [Link]
Repositorio de Recon-ng.: [Link]
Ripe.: [Link]
Robtex.: [Link]
SANS Institute. Nmap Cheat Sheet.: [Link]
testing/files/2013/10/[Link]
Searchsploit.: [Link]
Securityfocus.: [Link]
Securitytracker.: [Link]
Shodan.: [Link]
SSLscan.: [Link]
theHarvester.: [Link]
Vulscan.: [Link]
Wireshark.: [Link]
WPScan.: [Link]
Xforce.: [Link]
44/45
Auditoría de infraestructuras II: Explotación y Escalada de privilegios
Zenmap.: [Link]
Glosario.
Exploit: Software o técnica que permite explotar o aprovechar una vulnerabilidad de seguridad
de un sistema de información para conseguir un comportamiento no deseado del mismo.
Password cracking: Intentar utilizar los hashes de las contraseñas para averiguar las
contraseñas en texto claro.
Pivotar (pivoting): Técnica única de usar una instancia para poder "moverse" dentro de una
red. La finalidad del pivoting es comprometer a otras máquinas de la red a la que pertenece un
sistema ya comprometido. Como no se puede acceder directamente a ellas, se usa la máquina
comprometida para recolectar información y lanzar exploits.
Shellcode: Pequeña porción de código utilizada como carga útil en la explotación de una
vulnerabilidad de software. Se llama "shellcode" porque normalmente inicia un shell de
comandos desde el cual el atacante puede controlar la máquina comprometida, pero cualquier
código que realice una tarea similar se puede llamar shellcode.
45/45