hacktricks/network-services-pentesting/nfs-service-pentesting.md
2024-02-10 21:30:13 +00:00

144 lines
10 KiB
Markdown

# 2049 - NFS 서비스의 Pentesting
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
</details>
## **기본 정보**
**NFS**는 **클라이언트/서버**를 위해 설계된 시스템으로, 사용자가 네트워크를 통해 로컬 디렉토리 내에 있는 것처럼 파일에 신속하게 액세스할 수 있게 해줍니다.
이 프로토콜의 주목할만한 측면은 내장된 **인증** 또는 **권한 부여 메커니즘**이 없다는 것입니다. 대신, 권한은 **파일 시스템 정보**에 의존하며, 서버는 **클라이언트가 제공한 사용자 정보**를 파일 시스템이 요구하는 **권한 형식**으로 정확하게 변환하는 역할을 맡습니다. 이는 주로 **UNIX 구문**을 따릅니다.
인증은 일반적으로 **UNIX `UID`/`GID` 식별자와 그룹 멤버십**에 의존합니다. 그러나 클라이언트와 서버 간의 **`UID`/`GID` 매핑 불일치**로 인한 도전이 발생하며, 서버에 의한 추가 검증의 여지가 없습니다. 따라서 이 프로토콜은 이러한 인증 방법에 의존하기 때문에 **신뢰할 수 있는 네트워크** 내에서 사용하기 가장 적합합니다.
**기본 포트**: 2049/TCP/UDP (버전 4를 제외하고는 TCP 또는 UDP만 필요합니다).&#x20;
```
2049/tcp open nfs 2-3 (RPC #100003
```
### 버전
- **NFSv2**: 이 버전은 다양한 시스템과의 넓은 호환성으로 알려져 있으며, 초기 작업은 주로 UDP를 통해 이루어졌습니다. 이 시리즈에서 가장 오래된 버전으로, 향후 개발을 위한 기반을 마련했습니다.
- **NFSv3**: 다양한 개선 사항을 도입한 NFSv3는 이전 버전을 확장하여 가변 파일 크기를 지원하고 개선된 오류 보고 메커니즘을 제공했습니다. 그러나 NFSv2 클라이언트와의 완전한 하위 호환성에 제한이 있었습니다.
- **NFSv4**: NFS 시리즈에서의 획기적인 버전인 NFSv4는 네트워크 상에서 파일 공유를 현대화하기 위한 다양한 기능을 제공했습니다. 주목할만한 개선 사항으로는 **높은 보안**을 위한 Kerberos 통합, 포트매퍼 없이 방화벽을 통과하고 인터넷 상에서 작동할 수 있는 기능, 액세스 제어 목록 (ACL) 지원, 상태 기반 작업의 도입 등이 있습니다. 성능 향상과 상태 기반 프로토콜의 채택으로 인해 NFSv4는 네트워크 파일 공유 기술의 중요한 발전으로 간주됩니다.
각 NFS 버전은 네트워크 환경의 변화하는 요구 사항을 해결하기 위해 개발되었으며, 보안, 호환성 및 성능을 점진적으로 향상시키기 위한 의도로 개발되었습니다.
## 열거
### 유용한 nmap 스크립트
```bash
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을 사용하여 네트워크 서비스를 테스트하고 취약점을 찾을 수 있습니다.
```bash
scanner/nfs/nfsmount #Scan NFS mounts and list permissions
```
### 마운트
서버에서 마운트할 수 있는 **어떤 폴더**가 **사용 가능한지** 알기 위해 다음을 사용하여 서버에 요청할 수 있습니다:
```bash
showmount -e <IP>
```
그런 다음 다음과 같이 마운트하십시오:
```bash
mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock
```
다음 예제에서는 **인증** 또는 **권한 부여**가 없기 때문에 **버전 2를 사용**하도록 명시해야 합니다.
**예시:**
```bash
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](https://github.com/NetDirect/nfsshell)을 사용할 수 있습니다.
[NFSShell 튜토리얼](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)을 참고하세요.
## 구성 파일
```
/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 권한 상승](../linux-hardening/privilege-escalation/nfs-no\_root\_squash-misconfiguration-pe.md)
## 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}
```
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **해킹 트릭을 공유하려면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하세요.
</details>