hacktricks/network-services-pentesting/nfs-service-pentesting.md
2023-06-06 18:56:34 +00:00

12 KiB

2049 - Pentesting Serviço NFS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Informações Básicas

É um sistema cliente/servidor que permite aos usuários acessar arquivos em uma rede e tratá-los como se estivessem em um diretório de arquivos local. Tem o mesmo propósito que o SMB, mas não pode se comunicar com o SMB.

O protocolo NFS não tem mecanismo de autenticação ou autorização. A autorização é obtida a partir das informações disponíveis do sistema de arquivos, onde o servidor é responsável por traduzir as informações do usuário fornecidas pelo cliente para as do sistema de arquivos e converter as informações de autorização correspondentes da maneira mais correta possível na sintaxe exigida pelo UNIX.

A autenticação mais comum é via UID/GID do UNIX e membros do grupo, razão pela qual essa sintaxe é mais provável de ser aplicada ao protocolo NFS. Um problema é que o cliente e o servidor não necessariamente precisam ter as mesmas correspondências de UID/GID para usuários e grupos. Nenhuma verificação adicional pode ser feita por parte do servidor. É por isso que o NFS deve ser usado apenas com esse método de autenticação em redes confiáveis.

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

(De https://academy.hackthebox.com/module/112/section/1068)

Versão Recursos
NFSv2 É mais antiga mas é suportada por muitos sistemas e inicialmente operava inteiramente sobre UDP.
NFSv3 Possui mais recursos, incluindo tamanho de arquivo variável e melhor relatório de erros, mas não é totalmente compatível com clientes NFSv2.
NFSv4 Inclui Kerberos, funciona através de firewalls e na Internet, não requer mais portmappers, suporta ACLs, aplica operações baseadas em estado e fornece melhorias de desempenho e alta segurança. É também a primeira versão a ter um protocolo stateful.

Enumeração

Scripts úteis do nmap

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

NFS

  • auxiliary/scanner/nfs/nfsmount: Este módulo permite verificar se um compartilhamento NFS está acessível e montá-lo localmente.
  • auxiliary/scanner/nfs/nfs_showmount: Este módulo permite verificar se um compartilhamento NFS está acessível e listar os diretórios compartilhados.
  • exploit/linux/nfs/nfs_trunc: Este módulo explora uma vulnerabilidade de truncamento de arquivos no serviço NFS em sistemas Linux.
  • exploit/solaris/nfs/nfs_ilist: Este módulo explora uma vulnerabilidade de estouro de buffer no serviço NFS em sistemas Solaris.
  • exploit/solaris/nfs/nfs_sharectl: Este módulo explora uma vulnerabilidade de escape de shell no serviço NFS em sistemas Solaris.

RPC

  • auxiliary/scanner/portmap/rpcinfo: Este módulo permite verificar se um serviço RPC está acessível e listar os programas e versões disponíveis.
  • auxiliary/scanner/portmap/portmap_dump: Este módulo permite verificar se um serviço RPC está acessível e listar as informações do mapa de porta.
  • auxiliary/scanner/portmap/portmap_version: Este módulo permite verificar se um serviço RPC está acessível e obter a versão do serviço.
  • exploit/freebsd/nfsd/nfsd_setresuid: Este módulo explora uma vulnerabilidade de escalonamento de privilégios no serviço rpc.nfsd em sistemas FreeBSD.
  • exploit/linux/misc/nfs_rpcidmapd: Este módulo explora uma vulnerabilidade de escalonamento de privilégios no serviço rpc.idmapd em sistemas Linux.
  • exploit/solaris/rpc/cachefsd: Este módulo explora uma vulnerabilidade de escalonamento de privilégios no serviço cachefsd em sistemas Solaris.

Samba

  • auxiliary/scanner/smb/smb_enumshares: Este módulo permite listar os compartilhamentos disponíveis em um servidor Samba.
  • auxiliary/scanner/smb/smb_enumusers: Este módulo permite listar os usuários disponíveis em um servidor Samba.
  • auxiliary/scanner/smb/smb_login: Este módulo permite tentar fazer login em um servidor Samba com credenciais conhecidas.
  • exploit/linux/samba/is_known_pipename: Este módulo explora uma vulnerabilidade de escalonamento de privilégios no serviço Samba em sistemas Linux.
  • exploit/multi/samba/usermap_script: Este módulo explora uma vulnerabilidade de escalonamento de privilégios no serviço Samba em sistemas Unix-like.
  • exploit/windows/smb/ms08_067_netapi: Este módulo explora uma vulnerabilidade de execução remota de código no serviço Server Message Block (SMB) em sistemas Windows.
scanner/nfs/nfsmount #Scan NFS mounts and list permissions

Montagem

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

showmount -e <IP>

Em seguida, monte-o usando:

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

Você deve especificar o uso da 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 UID e GID para ter acesso a arquivos com facilidade, você pode usar o nfsshell.

Tutorial legal do NFSShell.

Arquivos de configuração

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

Configurações perigosas

(De https://academy.hackthebox.com/module/112/section/1068)

Opção Descrição
rw Permissões de leitura e escrita.
insecure Portas acima de 1024 serão usadas.
nohide Se outro sistema de arquivos foi montado abaixo de um diretório exportado, esse diretório é exportado por sua própria entrada de exportação.
no_root_squash Todos os arquivos criados pelo root são mantidos com o UID/GID 0.
no_all_squash

Escalação de privilégios usando má configuração do NFS

Escalação de privilégios 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: |
    It is a client/server system that allows users to access files across a network and treat them as if they resided in a local file 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}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥