Enumeración en Ethical Hacking

* Este post corresponde a la serie de apuntes del Learning Path «Become an Ethical Hacker» de LinkedIn Learning.
* Todos los comandos mencionados son para ser ejecutados desde Linux a no ser que se diga lo contrario.

Enumeration es el proceso de identificar nombres de usuario, direcciones del sistema, recursos de red, servicios y otras características de un objetivo. El objetivo es entender el target del ataque antes de testearlo. Forma parte de la fase 1 de ethical hacking: recolección de información o reconnaissance.

Contexts

El código se ejecuta en forma de procesos, los cuales operan en uno de los siguientes modos (en realidad los procesos suelen ir cambiando de un modo a otro por ejemplo operando en modo kernel cuando se ha de hacer una llamada de sistema):

User mode

  • Corren en su propio espacio de direcciones
  • Hace llamadas de sistema para acceder al resto de recursos del sistema

Kernel o System mode

  • Corren procesos con acceso a todos los recursos del sistema (privileged)
  • Se divide en 1) Kernel interrupt, para código ejecutado como resultado de una interrupción [+ info] y 2) Kernel user, para peticiones de usuario a través de llamadas de sistema.

Los OS proporcionan diferentes niveles de acceso a los recursos, a través de anillos de protección. El de nivel 0 (kernel mode) tiene acceso directo al hardware como la CPU o la memoria. Los niveles 1/2 no se usaban hasta que pasó a usarlos el hypervisor. Finalmente el tercer nivel es el de usuario. Ésto puede variar según la arquitectura del host.

En Windows, la cuenta local SYSTEM sería el análogo a «root». Esta cuenta corre todos los procesos de sistema. Quizá tenga otros usuarios administradores, pero no tendrán todos los permisos que tiene SYSTEM.

NetBios, SMB, Samba y RPC

  • NetBIOS (Network basic I/O system): Es una API (requiere del uso de protocolos de transporte para transportar los payloads) que permite a otros hosts de la misma LAN comunicarse con él. Usa los puertos 137/TDP (Name Service), 138/UDP (Datagram distribution service) y 139/TCP (NetBIOS over TCP/IP)
  • SMB (Server Message Block): permite habilitar acceso compartido a cuentas, ficheros, impresoras y demás, no sólo a nivel LAN si no también WAN. SAMBA es una implementación libre de SMB.
  • RPC se usa para implementar comunicaciones cliente-servidor. Un programa en el cliente haría una llamada a una subrutina que se ejecutaría en el servidor. Microsoft RPC es una implementación extendida que usa SMB over TCP/IP. En Windows lo usan por ejemplo sus servidores DNS, MS Exchange o MAPI.

Local Host Enumeration

Linux profiling

# Información del sistema
uname -a
cat /proc/version
cat /etc/*-release

# Información de la CPU
cat /proc/cpuinfo

# Sistemas de fichero montados
df -a
df -h

# Shells disponibles
cat /etc/shells

# Usuarios logueados
users
pinky
finger

# Usuarios logueados y procesos
w
who -a

# History de actividad de los usuarios
last
lastlog

# Otros básicos
top, ps, ifconfig, route, iptables -L

Windows profiling

Microsoft ofrece unas herramientas «PsTools» que nos permiten obtener bastante información sobre el sistema local, así como de sistemas remotos (si éstos lo permiten)

psInfo     # Información sobre el sistema
psList     # Información sobre los procesos
psLogList  # Muestra los logs del EventLog
psLoggedOn # Lista los usuarios logeados
psService  # Lista los servicios en ejecución

Windows network interface

net view    # Muestra el nombre de la máquina (y el dominio con /domain)
netstat     # Muestra las conexiones desde/hacia el host
netstat -nr # Muestra las tablas de ruta e información de la red

Linux network interface

netstat
ss         # Ofrece opciones extendidas de netstat

Remote Hosts Enumeration

nmap -PS   # puertos TCP abiertos
nmap -sU   # puertos UDP abiertos (incluyendo los "filtered")
nmap -sTUV # "SV" lista servicios corriendo en esos puertos abiertos y sus versiones

Enumerating SMB from Linux

SMB (o Samba en Linux) son protocolos clave para los pentesters. Podemos enumerar la red mediante «nbtscan«

# Lista los servicios activos en la red y su nombre netbios. Muestra el código para 
# identificar el tipo de host, e.g. 00U = Workstation, 00G = Domain Name
nbtscan -v -s : 10.0.2.0/24

# Netbios information de un host
nbtscan -rv 10.0.2.10

Kali viene con muchos SMB scripts para ser usados con nmap y enumerar así dominios, grupos, procesos, sesiones, shares y usuarios. en /usr/share/nmap/scripts

nmap --script smb-os-discovery 10.0.2.10
nmap --script smb-enum-users 10.0.2.6

Otras herramientas de Kali para enumerar hosts Linux son enum4linux, smbmap o shareenum

enum4linux -U 10.0.2.4 # Cuentas de usuario, dominio y otros
enum4linux -S 10.0.2.4 # Shares. Los testea intentando mapearlos
enum4linux -a 10.0.2.4 # Full enumeration: ntbstat, accounts, shares, passwd policy 
                       # info, RID cycling
# Establece una sesión samba y enumbera los shares y sus permisos
# Con USER y PASS vacíos ('') probaremos de usar la Null Session de Linux
# La opción -R lista el contenido del share
smbmap -u USER -p PASS -H HOST  

rpcclient es útil para enumerar máquinas Windows, las cuales por cierto, no aceptan null sessions con lo que se ha de indicar un usuario/password. Al establecer la conexión aparecerá el rpcclient prompt donde poder ejecutar los comandos

rpcclient 10.0.2.5 -U USER
$> srvinfo         # server info
$> enumdomusers    # lista de usuarios y sus RID
$> queryuser RID   # muestra info de la cuenta. Damos el rid en hexadecimal o decimal
$> enumprivs       # privilegios del sistema
$> enum y doble tab para ver la lista completa

Enumerating SMB from Windows

Windows ofrece tools como netbiosscan, nbtenum (o deepnetscanner), MiTec Network Scanner, ShareEnum de la propia Microsoft o SoftPerfect Network Scanner.

SNMP (Simple Network Management Protocol) enumeration

SNMP permite gestionar máquinas tanto Windows como Linux, a través de un agente SNMP corriendo en ellas, lo cual da acceso a muchísima información sobre el estado y la configuración del sistema. El SNMP manager (desde el que conectamos a los agentes) almacena toda esta información en la Management Information Base (MIB).

A la información se le da un identificador de objeto siguiendo un número, tal y como se explica aquí. snmpenum de Packet Storm es un script perl (y un conjunto de ficheros txt) que usa SNMP para obtener la información sin necesidad de tener que introducir nosotros el identificador de los objetos.

perl snmpenum.pl 10.0.2.6 public linux.txt

MibDepot es una web con más de 1800 millones de identificadores SNMP.

Enumerating with RPC

En RCP, cada endpoint tiene su propio UUID, usado por el server para identificar la aplicación a usar. RPC provee varios métodos para que cliente y servidor se comuniquen entre sí una vez establecida la conexión.

Windows incluye algunas herramientas oficiales para RPC como rpcdump, u otras third-party como WinFingerprint de QP Download. Kali tiene rpcinfo

Usando WMI para enumerar Windows

Microsoft provee objetos WMI (+info) para comunicar información sobre el OS así como herramientas como powershell para acceder a estos objetos o ejecutar métodos WMI.

Hay 2 tipos de objetos, los generádos dinámicamente mediante queries usando WMI Query Language (WQL), como los procesos, y los persistentes, guardados en el CIM repo, en:

C:/Windows/System32/wbem/Repository/objets.data

Windows ofrece dos protocolos para acceder a los datos WMI de forma remota: DCOM (135/TCP) y WinRM (5958/TCP).

Las clases WMI se categorizan jerárquicamente en nampespaces. Todos penden de root. La herramienta WMI Explorer de CodePlex nos ayudará a explorar todas las tablas de la base de datos WMI que existen a través de su GUI.

# Desde Powershell testeamos la conexión remota
PS C:\> Test-WSMan -ComputerName 10.0.2.10

Enumeración usando finger

finger (puerto 79) es protocolo legacy que hace fácil enumerar usuarios y sus propiedades en hosts remotos.

finger -l @10.0.2.9      # Muestra detalles de los usuarios logueados
finger -l [email protected]  # Muestra detalles del usuario "root" esté o no logueado 

Enumerating Web Apps

Una forma rápida de hacer fingerprint de un servidor web es usando el comando whatweb. Es útil para empezar a recopilar información.

whatweb 10.0.2.0/24 --no-errors | grep -v Unassigned

Una vez identificado el objetivo, podemos usar nikto para obtener más información sobre el webserver incluyendo vulnerabilidades y problemas de configuración

nikto -h 10.0.2.8

La herramienta Burp Suite permite rastrear una web, actuando como proxy para nuestro tráfico web. Ésto nos ayudará a obtener el listado de todos los enlaces que dependen de la web principal. Para obtener los enlaces no linkados a la web principal podemos usar DIRB, Dirbuster o Gobuster, que usan diccionarios para validar la existencia de enlaces. La clave es usar el diccionario correcto. Kali viene con varios de ellos, aunque lo ideal es ir haciéndose uno propio en función de los resultados de tus pentests.

Database enumeration with sqlmap

Usando Burp Suite como proxy para nuestro tráfico web, navegaríamos para obtener datos recuperados de la base de datos (un foro, el listado de posts, etc.). En Burp Suite podríamos tratar de identificar la llamada (por ejemplo una llamada POST a una determinada url, con su cookie con la sesionID y el datastring). Con ésto, podríamos realizar la siguiente consulta (nótese que al parámetro cookie se le ha añadido «showhints=0»):

# Listar bases de datos disponibles
sqlmap -u "http://web/w2/index.php" --data="author=admin&view=entries" --cookie="showhints=0;PHPSESSID=123123123123123" --dbs

# Listar tablas de la base de datos "db"
sqlmap -u "http://web/w2/index.php" --data="author=admin&view=entries" --cookie="showhints=0;PHPSESSID=123123123123123" -D db --tables

# Dump de la tabla "users" de la base de datos "db"
sqlmap -u "http://web/w2/index.php" --data="author=admin&view=entries" --cookie="showhints=0;PHPSESSID=123123123123123" -D db -T users --dump

Enumerating the Internet

En ocasiones es útil trazar las rutas desde nuestra máquina al host objetivo. Para ello, además de traceroute, podemos usar hping3.

hping3 --traceroute -V -1 66.32.101.17     # opción -1 = ICMP

Shodan es un buscador de cualquier tipo de dispositivo conectado a intenet. Permite realizar búsquedas del estilo «dame los servers con puerto 80 abierto para la red 177.137.102.0/24». Además de los resultados en sí, muestra valiosa información sobre vulnerabilidades y exploits.

net: "177.137.102.0/24" port:"80"

zmap permite escanear en menos de 5 minutos porciones de internet (sólo IPv4). Incluye una blacklist con IPs que no quieren ser escaneadas. Incluye opciones como «-p» para ver sólo los hosts con determinados puertos abiertos.

# Por defecto realiza un TCP/SYN scan. Podemos limitar el escaneo a 200 packetes/seg
zmap -p 80 66.77.0.0/16 -r 200 -o output.txt

Otras herramientas

SuperScan de McAfee es una herramienta gráfica para Windows que permite enumerar sesiones, grupos y usuarios, endpoints RPC, shares, dominios, drives, registro y servicios etc.

NetScanTools Pro es otra herramienta para Windows que permite enumerar nuestra red.

LDAP (Lightwight Directory Access Protocol) se usa principalmente para autenticar usuarios y usa una base de datos en forma de árbol para almacenar información sobre la compañía. OpenLDAP para Linux y AD para Windows son los más usados.
Se puede instalar phpLDAPAdmin junto a OpenLDAP para la gestionarlo gráficamente. OpenLDAP permite conectar de forma anónima por defecto. Otras herramientas para enumerar LDAP son nmap o JXplorer.

Directamente con telnet podemos conectar via SMTP a un emailserver para validar si una cuenta de email existe o no.

telnet 10.0.2.6 25
> vrfy account-to-check     # 5.1.1 no existe. 2.0.0 existe
> mail from: whatever
> mail to: account-to-check # 5.1.1 no existe. 2.1.5 existe

Recursos

Metasploitable 2, una máquina virtual intencionadamente vulnerable pensada para testeos. La máquina incluye Mutillidae, scripts PHP con vulnerabilidades.

Deja una respuesta

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