2049 - Pentesting NFS Service

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Informações Básicas

NFS é um sistema projetado para cliente/servidor que permite aos usuários acessar arquivos em uma rede como se esses arquivos estivessem localizados em um diretório local.

Um aspecto notável desse protocolo é a 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 de usuário fornecidas pelo cliente no formato de autorização necessário do sistema de arquivos, seguindo principalmente a sintaxe UNIX.

A autenticação geralmente depende dos identificadores UID/GID UNIX e das associações de grupos. No entanto, surge um desafio devido ao potencial desajuste nas associações de 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, dada sua dependência desse método de autenticação.

Porta padrão: 2049/TCP/UDP (exceto a versão 4, que só precisa 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 estabeleceu as bases para desenvolvimentos futuros.

  • NFSv3: Introduzida com uma série de aprimoramentos, o NFSv3 expandiu seu antecessor ao suportar tamanhos de arquivo variáveis e oferecer mecanismos de relatório de erros 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 uma série 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. Seus aprimoramentos de desempenho e a adoção de um protocolo baseado em estado distinguem o NFSv4 como um avanço fundamental nas tecnologias de compartilhamento de arquivos em rede.

Cada versão do NFS foi desenvolvida com a intenção de abordar as necessidades em constante evolução dos ambientes de rede, aprimorando progressivamente a segurança, compatibilidade e desempenho.

Enumeração

Scripts nmap úteis

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

scanner/nfs/nfsmount #Scan NFS mounts and list permissions

Montagem

Para saber qual pasta o servidor tem disponível para montar, você pode perguntar usando:

showmount -e <IP>

Em seguida, monte usando:

mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock

Deve-se especificar para usar a versão 2 porque ela não possui nenhuma forma de autenticação ou autorização.

Exemplo:

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 alterar o UID e GID facilmente para ter acesso aos arquivos, você pode usar nfsshell.

Tutorial legal do NFSShell.

Arquivos de configuração

/etc/exports
/etc/lib/nfs/etab

Configurações perigosas

  • Permissões de Leitura e Escrita (rw): Essa configuração permite tanto a leitura quanto a escrita no sistema de arquivos. É essencial considerar as implicações de conceder um acesso tão amplo.

  • Uso de Portas Inseguras (insecure): Quando habilitado, 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): Essa configuração torna os diretórios visíveis mesmo se outro sistema de arquivos estiver montado abaixo de um diretório exportado. Cada diretório requer sua própria entrada de exportação para um gerenciamento adequado.

  • Propriedade de Arquivos Raiz (no_root_squash): Com essa configuração, arquivos criados pelo usuário raiz mantêm seu UID/GID original de 0, ignorando o princípio do menor privilégio e potencialmente concedendo permissões excessivas.

  • Não Supressão de Todos os Usuários (no_all_squash): Essa opção garante que as identidades dos usuários sejam preservadas em todo o sistema, o que poderia levar a problemas de permissão e controle de acesso se não forem tratados corretamente.

Escalação de Privilégios usando configurações incorretas do NFS

Escalação de Privilégios do NFS no_root_squash e no_all_squash

Comandos Automáticos do HackTricks

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}
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Last updated