2049 - Pentesting NFS Service

HackTricks 지원하기

기본 정보

NFS는 사용자가 네트워크를 통해 파일에 원활하게 접근할 수 있도록 설계된 클라이언트/서버 시스템입니다. 마치 이러한 파일이 로컬 디렉토리에 있는 것처럼 접근할 수 있습니다.

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

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

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

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

Versions

  • NFSv2: 이 버전은 다양한 시스템과의 폭넓은 호환성으로 인식되며, 주로 UDP를 통한 초기 작업으로 그 중요성을 나타냅니다. 가장 오래된 버전으로, 향후 개발의 기초를 마련했습니다.

  • NFSv3: 다양한 개선 사항과 함께 도입된 NFSv3는 이전 버전을 기반으로 하여 가변 파일 크기를 지원하고 개선된 오류 보고 메커니즘을 제공합니다. 발전에도 불구하고 NFSv2 클라이언트와의 완전한 하위 호환성에는 한계가 있었습니다.

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

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

Enumeration

Useful nmap scripts

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

유용한 메타스플로잇 모듈

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

Mounting

서버가 마운트할 수 있는 어떤 폴더가 있는지 알기 위해 다음과 같이 요청할 수 있습니다:

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

Permissions

폴더를 마운트하면 일부 사용자만 접근할 수 있는 파일 또는 폴더가 포함되어 있습니다(UID에 의해). 해당 UID를 가진 사용자를 로컬에서 생성하면, 그 사용자를 사용하여 파일/폴더에 접근할 수 있습니다.

NSFShell

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

멋진 NFSShell 튜토리얼.

Config files

/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}
HackTricks 지원하기

Last updated