mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-30 06:53:11 +00:00
141 lines
8.5 KiB
Markdown
141 lines
8.5 KiB
Markdown
|
# 2049 - Pentesting NFS Service
|
||
|
|
||
|
{% hint style="success" %}
|
||
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary>Support HackTricks</summary>
|
||
|
|
||
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
|
||
|
</details>
|
||
|
{% endhint %}
|
||
|
|
||
|
## **Informações Básicas**
|
||
|
|
||
|
**NFS** é um sistema projetado para **cliente/servidor** que permite aos usuários acessar arquivos de forma contínua através de uma rede como se esses arquivos estivessem localizados em um diretório local.
|
||
|
|
||
|
Um aspecto notável deste protocolo é a sua falta de **mecanismos de autenticação** ou **autorização** integrados. Em vez disso, a autorização depende das **informações do sistema de arquivos**, com o servidor encarregado de traduzir com precisão as **informações do usuário fornecidas pelo cliente** para o formato de **autorização** exigido pelo sistema de arquivos, seguindo principalmente a **sintaxe UNIX**.
|
||
|
|
||
|
A autenticação geralmente depende de **identificadores `UID`/`GID` do UNIX e associações de grupos**. No entanto, um desafio surge devido ao potencial descompasso nas **mapeações `UID`/`GID`** entre clientes e servidores, não deixando espaço para verificação adicional pelo servidor. Consequentemente, o protocolo é mais adequado para uso em **redes confiáveis**, dado que depende desse método de autenticação.
|
||
|
|
||
|
**Porta padrão**: 2049/TCP/UDP (exceto a versão 4, que precisa apenas de TCP ou UDP). 
|
||
|
```
|
||
|
2049/tcp open nfs 2-3 (RPC #100003
|
||
|
```
|
||
|
### Versões
|
||
|
|
||
|
- **NFSv2**: Esta versão é reconhecida por sua ampla compatibilidade com vários sistemas, marcando sua importância com operações iniciais predominantemente sobre UDP. Sendo a **mais antiga** da série, ela lançou as bases para desenvolvimentos futuros.
|
||
|
|
||
|
- **NFSv3**: Introduzido com uma série de melhorias, o NFSv3 expandiu seu predecessor ao suportar tamanhos de arquivo variáveis e oferecer mecanismos de relatórios de erro aprimorados. Apesar de seus avanços, enfrentou limitações na compatibilidade total com clientes NFSv2.
|
||
|
|
||
|
- **NFSv4**: Uma versão marcante na série NFS, o NFSv4 trouxe um conjunto de recursos projetados para modernizar o compartilhamento de arquivos em redes. Melhorias notáveis incluem a integração do Kerberos para **alta segurança**, a capacidade de atravessar firewalls e operar pela Internet sem a necessidade de portmappers, suporte para Listas de Controle de Acesso (ACLs) e a introdução de operações baseadas em estado. Suas melhorias de desempenho e a adoção de um protocolo com estado distinguem o NFSv4 como um avanço crucial nas tecnologias de compartilhamento de arquivos em rede.
|
||
|
|
||
|
Cada versão do NFS foi desenvolvida com a intenção de atender às necessidades em evolução dos ambientes de rede, aprimorando progressivamente a segurança, compatibilidade e desempenho.
|
||
|
|
||
|
## Enumeração
|
||
|
|
||
|
### Scripts nmap úteis
|
||
|
```bash
|
||
|
nfs-ls #List NFS exports and check permissions
|
||
|
nfs-showmount #Like showmount -e
|
||
|
nfs-statfs #Disk statistics and info from NFS share
|
||
|
```
|
||
|
### Módulos úteis do metasploit
|
||
|
```bash
|
||
|
scanner/nfs/nfsmount #Scan NFS mounts and list permissions
|
||
|
```
|
||
|
### Montando
|
||
|
|
||
|
Para saber **qual pasta** o servidor tem **disponível** para montar, você pode perguntar a ele usando:
|
||
|
```bash
|
||
|
showmount -e <IP>
|
||
|
```
|
||
|
Então monte-o usando:
|
||
|
```bash
|
||
|
mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock
|
||
|
```
|
||
|
Você deve especificar para **usar a versão 2** porque ela não tem **nenhuma** **autenticação** ou **autorização**.
|
||
|
|
||
|
**Exemplo:**
|
||
|
```bash
|
||
|
mkdir /mnt/new_back
|
||
|
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
|
||
|
```
|
||
|
## Permissões
|
||
|
|
||
|
Se você montar uma pasta que contém **arquivos ou pastas acessíveis apenas por algum usuário** (por **UID**). Você pode **criar** **localmente** um usuário com esse **UID** e usando esse **usuário** você poderá **acessar** o arquivo/pasta.
|
||
|
|
||
|
## NSFShell
|
||
|
|
||
|
Para listar, montar e mudar facilmente UID e GID para ter acesso a arquivos, você pode usar [nfsshell](https://github.com/NetDirect/nfsshell).
|
||
|
|
||
|
[Ótimo tutorial sobre NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)
|
||
|
|
||
|
## Arquivos de configuração
|
||
|
```
|
||
|
/etc/exports
|
||
|
/etc/lib/nfs/etab
|
||
|
```
|
||
|
### Configurações Perigosas
|
||
|
|
||
|
- **Permissões de Leitura e Escrita (`rw`):** Esta configuração permite tanto a leitura quanto a escrita no sistema de arquivos. É essencial considerar as implicações de conceder acesso tão amplo.
|
||
|
|
||
|
- **Uso de Portas Inseguras (`insecure`):** Quando ativado, isso permite que o sistema utilize portas acima de 1024. A segurança das portas acima desse intervalo pode ser menos rigorosa, aumentando o risco.
|
||
|
|
||
|
- **Visibilidade de Sistemas de Arquivos Aninhados (`nohide`):** Esta configuração torna diretórios visíveis mesmo que outro sistema de arquivos esteja montado abaixo de um diretório exportado. Cada diretório requer sua própria entrada de exportação para gerenciamento adequado.
|
||
|
|
||
|
- **Propriedade de Arquivos do Root (`no_root_squash`):** Com esta configuração, arquivos criados pelo usuário root mantêm seu UID/GID original de 0, desconsiderando o princípio do menor privilégio e potencialmente concedendo permissões excessivas.
|
||
|
|
||
|
- **Não Squashing de Todos os Usuários (`no_all_squash`):** Esta opção garante que as identidades dos usuários sejam preservadas em todo o sistema, o que pode levar a problemas de permissão e controle de acesso se não for tratado corretamente.
|
||
|
|
||
|
## Escalada de Privilégios usando configurações incorretas do NFS
|
||
|
|
||
|
[NFS no\_root\_squash e no\_all\_squash escalada de privilégios](../linux-hardening/privilege-escalation/nfs-no\_root\_squash-misconfiguration-pe.md)
|
||
|
|
||
|
## HackTricks Comandos Automáticos
|
||
|
```
|
||
|
Protocol_Name: NFS #Protocol Abbreviation if there is one.
|
||
|
Port_Number: 2049 #Comma separated if there is more than one.
|
||
|
Protocol_Description: Network File System #Protocol Abbreviation Spelled out
|
||
|
|
||
|
Entry_1:
|
||
|
Name: Notes
|
||
|
Description: Notes for NFS
|
||
|
Note: |
|
||
|
NFS is a system designed for client/server that enables users to seamlessly access files over a network as though these files were located within a local directory.
|
||
|
|
||
|
#apt install nfs-common
|
||
|
showmount 10.10.10.180 ~or~showmount -e 10.10.10.180
|
||
|
should show you available shares (example /home)
|
||
|
|
||
|
mount -t nfs -o ver=2 10.10.10.180:/home /mnt/
|
||
|
cd /mnt
|
||
|
nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in
|
||
|
|
||
|
https://book.hacktricks.xyz/pentesting/nfs-service-pentesting
|
||
|
|
||
|
Entry_2:
|
||
|
Name: Nmap
|
||
|
Description: Nmap with NFS Scripts
|
||
|
Command: nmap --script=nfs-ls.nse,nfs-showmount.nse,nfs-statfs.nse -p 2049 {IP}
|
||
|
```
|
||
|
{% hint style="success" %}
|
||
|
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
|
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary>Support HackTricks</summary>
|
||
|
|
||
|
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||
|
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
|
||
|
</details>
|
||
|
{% endhint %}
|