2049 - Pentesting NFS Service

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

기본 정보

NFS클라이언트/서버를 위해 설계된 시스템으로, 사용자가 네트워크를 통해 로컬 디렉토리 내에 있는 것처럼 파일에 신속하게 액세스할 수 있게 해줍니다.

이 프로토콜의 주목할만한 측면은 내장된 인증 또는 권한 부여 메커니즘이 없다는 것입니다. 대신, 권한은 파일 시스템 정보에 의존하며, 서버는 클라이언트가 제공한 사용자 정보를 파일 시스템이 요구하는 권한 형식으로 정확하게 변환하는 역할을 맡습니다. 이는 주로 UNIX 구문을 따릅니다.

인증은 일반적으로 UNIX UID/GID 식별자와 그룹 멤버십에 의존합니다. 그러나 클라이언트와 서버 간의 UID/GID 매핑 불일치로 인한 도전이 발생하며, 서버에 의한 추가 검증의 여지가 없습니다. 따라서 이 프로토콜은 이러한 인증 방법에 의존하기 때문에 신뢰할 수 있는 네트워크 내에서 사용하기 가장 적합합니다.

기본 포트: 2049/TCP/UDP (버전 4를 제외하고는 TCP 또는 UDP만 필요합니다).

2049/tcp open  nfs     2-3 (RPC #100003

버전

  • NFSv2: 이 버전은 다양한 시스템과의 넓은 호환성으로 알려져 있으며, 초기 작업은 주로 UDP를 통해 이루어졌습니다. 이 시리즈에서 가장 오래된 버전으로, 향후 개발을 위한 기반을 마련했습니다.

  • NFSv3: 다양한 개선 사항을 도입한 NFSv3는 이전 버전을 확장하여 가변 파일 크기를 지원하고 개선된 오류 보고 메커니즘을 제공했습니다. 그러나 NFSv2 클라이언트와의 완전한 하위 호환성에 제한이 있었습니다.

  • NFSv4: NFS 시리즈에서의 획기적인 버전인 NFSv4는 네트워크 상에서 파일 공유를 현대화하기 위한 다양한 기능을 제공했습니다. 주목할만한 개선 사항으로는 높은 보안을 위한 Kerberos 통합, 포트매퍼 없이 방화벽을 통과하고 인터넷 상에서 작동할 수 있는 기능, 액세스 제어 목록 (ACL) 지원, 상태 기반 작업의 도입 등이 있습니다. 성능 향상과 상태 기반 프로토콜의 채택으로 인해 NFSv4는 네트워크 파일 공유 기술의 중요한 발전으로 간주됩니다.

각 NFS 버전은 네트워크 환경의 변화하는 요구 사항을 해결하기 위해 개발되었으며, 보안, 호환성 및 성능을 점진적으로 향상시키기 위한 의도로 개발되었습니다.

열거

유용한 nmap 스크립트

nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share

유용한 메타스플로잇 모듈

Metasploit은 다양한 네트워크 서비스에 대한 공격을 자동화하기 위한 강력한 도구입니다. 다음은 일부 유용한 메타스플로잇 모듈입니다.

  • auxiliary/scanner/nfs/nfsmount: 이 모듈은 NFS 공유를 스캔하고 마운트된 디렉토리를 확인하는 데 사용됩니다.

  • auxiliary/scanner/nfs/nfsenum: 이 모듈은 NFS 공유에서 파일 및 디렉토리를 열거하는 데 사용됩니다.

  • exploit/linux/nfs/nfsd: 이 모듈은 취약한 NFS 서버에 대한 공격을 수행하는 데 사용됩니다.

  • exploit/solaris/nfs/nfsd: 이 모듈은 취약한 Solaris NFS 서버에 대한 공격을 수행하는 데 사용됩니다.

  • exploit/windows/nfs/nfsd: 이 모듈은 취약한 Windows NFS 서버에 대한 공격을 수행하는 데 사용됩니다.

이러한 모듈은 NFS 서비스에 대한 다양한 공격 시나리오를 자동화하는 데 도움이 됩니다. Metasploit을 사용하여 네트워크 서비스를 테스트하고 취약점을 찾을 수 있습니다.

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

마운트

서버에서 마운트할 수 있는 어떤 폴더사용 가능한지 알기 위해 다음을 사용하여 서버에 요청할 수 있습니다:

showmount -e <IP>

그런 다음 다음과 같이 마운트하십시오:

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

다음 예제에서는 인증 또는 권한 부여가 없기 때문에 버전 2를 사용하도록 명시해야 합니다.

예시:

mkdir /mnt/new_back
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock

권한

만약 특정 사용자에게만 접근 가능한 파일 또는 폴더 (UID로 지정)가 있는 폴더를 마운트한다면, 해당 UID를 가진 사용자를 로컬로 생성하여 해당 사용자를 사용하여 파일/폴더에 접근할 수 있습니다.

NSFShell

파일을 쉽게 나열하고 마운트하며 UID와 GID를 변경하여 파일에 접근할 수 있도록 하려면 nfsshell을 사용할 수 있습니다.

NFSShell 튜토리얼을 참고하세요.

구성 파일

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

위험한 설정

  • 읽기 및 쓰기 권한 (rw): 이 설정은 파일 시스템에서 읽기와 쓰기를 모두 허용합니다. 이러한 넓은 접근 권한을 부여하는 것의 영향을 고려하는 것이 중요합니다.

  • 보안이 취약한 포트 사용 (insecure): 이 설정이 활성화되면 시스템은 1024 이상의 포트를 사용할 수 있습니다. 이 범위 이상의 포트의 보안은 덜 엄격할 수 있으며, 이는 위험을 증가시킬 수 있습니다.

  • 중첩된 파일 시스템의 가시성 (nohide): 이 구성은 내보낸 디렉토리 아래에 다른 파일 시스템이 마운트되어 있더라도 디렉토리를 가시적으로 만듭니다. 각 디렉토리는 적절한 관리를 위해 자체 내보내기 항목이 필요합니다.

  • 루트 파일 소유권 (no_root_squash): 이 설정을 사용하면 루트 사용자가 생성한 파일은 원래의 UID/GID 0을 유지하며, 최소 권한 원칙을 무시하고 과도한 권한을 부여할 수 있습니다.

  • 모든 사용자의 스쿼싱 비활성화 (no_all_squash): 이 옵션은 사용자 식별 정보가 시스템 전체에서 보존되도록 보장합니다. 이를 올바르게 처리하지 않으면 권한 및 액세스 제어 문제가 발생할 수 있습니다.

NFS 구성 오류를 이용한 권한 상승

NFS no_root_squash 및 no_all_squash 권한 상승

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}
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

Last updated