NFS

7 months ago 54
BOOK THIS SPACE FOR AD
ARTICLE AD

Miraç Küçük

Network File System (NFS) Sun Microsystems tarafından geliştirilen bir ağ dosya sistemidir ve SMB ile aynı amaca sahiptir. Amacı, dosya sistemlerine bir ağ üzerinden yerelmiş gibi erişmektir. Ancak, tamamen farklı bir protokol kullanır. NFS, Linux ve Unix sistemleri arasında kullanılır. Bu, NFS client’larının SMB sunucularıyla doğrudan iletişim kuramayacağı anlamına gelir. NFS, dağıtılmış bir dosya sistemindeki prosedürleri yöneten bir İnternet standardıdır. Uzun yıllardır kullanılmakta olan NFS protokolü sürüm 3.0 (NFSv3) client bilgisayarın kimlik doğrulamasını yaparken, NFSv4 ile bu durum değişmektedir. Burada, Windows SMB protokolünde olduğu gibi, kullanıcı kimlik doğrulaması yapmalıdır.

NFS sürüm 4.1 (RFC 8881), birden fazla sunucuya dağıtılmış dosyalara ölçeklenebilir paralel erişim sağlama yeteneği (pNFS uzantısı) dahil olmak üzere küme sunucu dağıtımlarından yararlanmak için protokol desteği sağlamayı amaçlamaktadır. Buna ek olarak, NFSv4.1, NFS çok yollu olarak da bilinen bir oturum kanal mekanizması içerir. NFSv4'ün öncekilere göre önemli bir avantajı, hizmeti çalıştırmak için yalnızca bir UDP veya TCP bağlantı noktası 2049 kullanılmasıdır; bu da protokolün güvenlik duvarları arasında kullanımını kolaylaştırır.

NFS, sistemden bağımsız veri alışverişi için External Data Representation (XDR) kullanan TCP ve UDP port 111'de açık olan Open Network Computing Remote Procedure Call (ONC-RPC/SUN-RPC) protokolünü temel alır. NFS protokolünün kimlik doğrulama veya yetkilendirme mekanizması yoktur. Bunun yerine, kimlik doğrulama tamamen RPC protokolünün seçeneklerine kaydırılmıştır. Yetkilendirme, mevcut dosya sistemi bilgilerinden türetilir. Bu süreçte sunucu, istemcinin kullanıcı bilgilerini dosya sisteminin formatına çevirmekten ve ilgili yetkilendirme ayrıntılarını mümkün olduğunca doğru bir şekilde gerekli UNIX sözdizimine dönüştürmekten sorumludur.

Varsayılan Yapılandırma

NFS’nin yapılandırılması zor değildir çünkü FTP ya da SMB kadar çok seçenek yoktur. etc/exports dosyası, istemciler tarafından erişilebilen bir NFS sunucusundaki fiziksel dosya sistemlerinin bir tablosunu içerir. NFS Exports Tablosu hangi seçenekleri kabul ettiğini gösterir ve böylece hangi seçeneklerin bizim için kullanılabilir olduğunu belirtir.

Exports File

M1R4CKCK@htb[/htb]$ cat /etc/exports

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)

Varsayılan exports dosyası, NFS paylaşımlarının yapılandırılmasına ilişkin bazı örnekler de içerir. İlk olarak, klasör belirtilir ve başkalarının kullanımına sunulur ve ardından bu NFS paylaşımında sahip olacakları haklar bir ana bilgisayara veya bir alt ağa bağlanır. Son olarak, ana bilgisayarlara veya alt ağlara ek seçenekler eklenebilir.

Test amacıyla böyle bir giriş oluşturalım ve ayarlarla oynayalım.

ExportFS

root@nfs:~# echo '/mnt/nfs 10.129.14.0/24(sync,no_subtree_check)' >> /etc/exports
root@nfs:~# systemctl restart nfs-kernel-server
root@nfs:~# exportfs

/mnt/nfs 10.129.14.0/24

Yukarıda gösterilen ayar ile /mnt/nfs klasörünü 10.129.14.0/24 alt ağına paylaştırdık. Bu, ağdaki tüm hostların bu NFS paylaşımını bağlayabileceği ve bu klasörün içeriğini inceleyebileceği anlamına gelir.

Tehlikeli Ayarlar

Ancak NFS’de bile bazı ayarlar şirket ve altyapısı için tehlikeli olabilir. İşte bunlardan bazıları listelenmiştir

Yerel bir VM oluşturmanız ve ayarları denemeniz şiddetle tavsiye edilir. NFS sunucusunun nasıl yapılandırıldığını bize gösterecek yöntemleri keşfedeceğiz. Bunun için birkaç klasör oluşturabilir ve her birine farklı seçenekler atayabiliriz. Daha sonra bunları inceleyebilir ve hangi ayarların NFS paylaşımı, izinleri ve numaralandırma işlemi üzerinde nasıl bir etkiye sahip olabileceğini görebiliriz.

Güvensiz(insecure) seçeneğine bir göz atabiliriz. Bu tehlikelidir çünkü kullanıcılar 1024'ün üzerindeki portları kullanabilir. İlk 1024 port sadece root tarafından kullanılabilir. Bu, hiçbir kullanıcının NFS servisi için 1024 portunun üzerindeki soketleri kullanmasını ve onunla etkileşime girmesini engeller.

Footprinting the Service

NFS’nin ayak izini alırken, 111 ve 2049 numaralı TCP portları çok önemlidir. Ayrıca aşağıda örnekte gösterildiği gibi RPC aracılığıyla NFS servisi ve host hakkında bilgi alabiliriz.

Nmap

M1R4CKCK@htb[/htb]$ sudo nmap 10.129.14.128 -p111,2049 -sV -sC

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-19 17:12 CEST
Nmap scan report for 10.129.14.128
Host is up (0.00018s latency).

PORT STATE SERVICE VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100003 3 2049/udp nfs
| 100003 3 2049/udp6 nfs
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100005 1,2,3 41982/udp6 mountd
| 100005 1,2,3 45837/tcp mountd
| 100005 1,2,3 47217/tcp6 mountd
| 100005 1,2,3 58830/udp mountd
| 100021 1,3,4 39542/udp nlockmgr
| 100021 1,3,4 44629/tcp nlockmgr
| 100021 1,3,4 45273/tcp6 nlockmgr
| 100021 1,3,4 47524/udp6 nlockmgr
| 100227 3 2049/tcp nfs_acl
| 100227 3 2049/tcp6 nfs_acl
| 100227 3 2049/udp nfs_acl
|_ 100227 3 2049/udp6 nfs_acl
2049/tcp open nfs_acl 3 (RPC #100227)
MAC Address: 00:00:00:00:00:00 (VMware)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.58 seconds

rpcinfo NSE betiği o anda çalışan tüm RPC hizmetlerinin, adlarının, açıklamalarının ve kullandıkları bağlantı noktalarının bir listesini alır. Bu, hedef paylaşımın gerekli tüm bağlantı noktalarında ağa bağlı olup olmadığını kontrol etmemizi sağlar. Ayrıca, NFS için Nmap, taramalar için kullanılabilecek bazı NSE komut dosyalarına sahiptir. Bunlar daha sonra bize örneğin paylaşımın içeriğini ve istatistiklerini gösterebilir.

M1R4CKCK@htb[/htb]$ sudo nmap --script nfs* 10.129.14.128 -sV -p111,2049

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-19 17:37 CEST
Nmap scan report for 10.129.14.128
Host is up (0.00021s latency).

PORT STATE SERVICE VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
| nfs-ls: Volume /mnt/nfs
| access: Read Lookup NoModify NoExtend NoDelete NoExecute
| PERMISSION UID GID SIZE TIME FILENAME
| rwxrwxrwx 65534 65534 4096 2021-09-19T15:28:17 .
| ?????????? ? ? ? ? ..
| rw-r--r-- 0 0 1872 2021-09-19T15:27:42 id_rsa
| rw-r--r-- 0 0 348 2021-09-19T15:28:17 id_rsa.pub
| rw-r--r-- 0 0 0 2021-09-19T15:22:30 nfs.share
|_
| nfs-showmount:
|_ /mnt/nfs 10.129.14.0/24
| nfs-statfs:
| Filesystem 1K-blocks Used Available Use% Maxfilesize Maxlink
|_ /mnt/nfs 30313412.0 8074868.0 20675664.0 29% 16.0T 32000
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100003 3 2049/udp nfs
| 100003 3 2049/udp6 nfs
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100005 1,2,3 41982/udp6 mountd
| 100005 1,2,3 45837/tcp mountd
| 100005 1,2,3 47217/tcp6 mountd
| 100005 1,2,3 58830/udp mountd
| 100021 1,3,4 39542/udp nlockmgr
| 100021 1,3,4 44629/tcp nlockmgr
| 100021 1,3,4 45273/tcp6 nlockmgr
| 100021 1,3,4 47524/udp6 nlockmgr
| 100227 3 2049/tcp nfs_acl
| 100227 3 2049/tcp6 nfs_acl
| 100227 3 2049/udp nfs_acl
|_ 100227 3 2049/udp6 nfs_acl
2049/tcp open nfs_acl 3 (RPC #100227)
MAC Address: 00:00:00:00:00:00 (VMware)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.45 seconds

Böyle bir NFS hizmetini keşfettikten sonra, bunu yerel makinemize bağlayabiliriz. Bunun için, NFS paylaşımının bağlanacağı yeni bir boş klasör oluşturabiliriz. Bağlandıktan sonra, tıpkı yerel sistemimizde olduğu gibi bu klasörde gezinebilir ve içeriğini görüntüleyebiliriz.

Kullanılabilir NFS Paylaşımlarını Göster

M1R4CKCK@htb[/htb]$ showmount -e 10.129.14.128

Export list for 10.129.14.128:
/mnt/nfs 10.129.14.0/24

NFS Paylaşımını Bağlama (Mounting)

M1R4CKCK@htb[/htb]$ mkdir target-NFS
M1R4CKCK@htb[/htb]$ sudo mount -t nfs 10.129.14.128:/ ./target-NFS/ -o nolock
M1R4CKCK@htb[/htb]$ cd target-NFS
M1R4CKCK@htb[/htb]$ tree .

.
└── mnt
└── nfs
├── id_rsa
├── id_rsa.pub
└── nfs.share

2 directories, 3 files

Burada, gösterilen ve görüntülenebilen dosyaların ait olduğu haklara ve kullanıcı adlarına ve gruplara erişme fırsatımız olacak. Çünkü kullanıcı adlarına, grup adlarına, UID’lere ve GUID’lere sahip olduğumuzda, bunları sistemimizde oluşturabilir ve dosyaları görüntülemek ve değiştirmek için NFS paylaşımına uyarlayabiliriz.

İçeriği Kullanıcı Adları ve Grup Adları ile Listele

M1R4CKCK@htb[/htb]$ ls -l mnt/nfs/

total 16
-rw-r--r-- 1 cry0l1t3 cry0l1t3 1872 Sep 25 00:55 cry0l1t3.priv
-rw-r--r-- 1 cry0l1t3 cry0l1t3 348 Sep 25 00:55 cry0l1t3.pub
-rw-r--r-- 1 root root 1872 Sep 19 17:27 id_rsa
-rw-r--r-- 1 root root 348 Sep 19 17:28 id_rsa.pub
-rw-r--r-- 1 root root 0 Sep 19 17:22 nfs.share

İçeriği UID’ler ve GUID’lerle Listele

M1R4CKCK@htb[/htb]$ ls -n mnt/nfs/

total 16
-rw-r--r-- 1 1000 1000 1872 Sep 25 00:55 cry0l1t3.priv
-rw-r--r-- 1 1000 1000 348 Sep 25 00:55 cry0l1t3.pub
-rw-r--r-- 1 0 1000 1221 Sep 19 18:21 backup.sh
-rw-r--r-- 1 0 0 1872 Sep 19 17:27 id_rsa
-rw-r--r-- 1 0 0 348 Sep 19 17:28 id_rsa.pub
-rw-r--r-- 1 0 0 0 Sep 19 17:22 nfs.share

root_squash seçeneği ayarlanmışsa, backup.sh dosyasını root olarak bile düzenleyemeyeceğimize dikkat etmek önemlidir.

Daha fazla yükseltme için NFS’yi de kullanabiliriz. Örneğin, sisteme SSH üzerinden erişimimiz varsa ve belirli bir kullanıcının okuyabileceği başka bir klasördeki dosyaları okumak istiyorsak, bu kullanıcının SUID’sine sahip NFS paylaşımına bir shell yüklememiz ve ardından SSH kullanıcısı aracılığıyla shell’i çalıştırmamız gerekir.

Gerekli tüm adımları uyguladıktan ve ihtiyacımız olan bilgileri elde ettikten sonra NFS paylaşımının bağlantısını kaldırabiliriz.

Unmounting

M1R4CKCK@htb[/htb]$ cd ..
M1R4CKCK@htb[/htb]$ sudo umount ./target-NFS

Makine Çözümü

Soru 1: NFS hizmetini numaralandırın ve “nfs” paylaşımındaki flag.txt içeriğini yanıt olarak gönderin.

Soru 2 : NFS hizmetini numaralandırın ve “nfsshare” paylaşımındaki flag.txt içeriğini yanıt olarak gönderin

Cevap :

1- Öncelikle nmapden bir sorgu atalım . Zaten nmap paylaşımları tespit ediyor . Okumak için kendimize ait bir klasör oluşturalım ve bu klasörü mount edelim yani bağlayalım .

sudo nmap --script nfs* 10.129.186.136 -sV -p111,2049
Starting Nmap 7.93 ( https://nmap.org ) at 2024-04-04 07:47 BST
Nmap scan report for 10.129.186.136
Host is up (0.0083s latency).

PORT STATE SERVICE VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
| nfs-statfs:
| Filesystem 1K-blocks Used Available Use% Maxfilesize Maxlink
| /var/nfs 4062912.0 3422524.0 414292.0 90% 16.0T 32000
|_ /mnt/nfsshare 4062912.0 3422524.0 414292.0 90% 16.0T 32000
| nfs-ls: Volume /var/nfs
| access: Read Lookup Modify Extend Delete NoExecute
| PERMISSION UID GID SIZE TIME FILENAME
| rwxr-xr-x 65534 65534 4096 2021-11-08T15:08:27 .
| ?????????? ? ? ? ? ..
| rw-r--r-- 65534 65534 39 2021-11-08T15:08:27 flag.txt
|
|
| Volume /mnt/nfsshare
| access: Read Lookup Modify Extend Delete NoExecute
| PERMISSION UID GID SIZE TIME FILENAME
| rwxr-xr-x 65534 65534 4096 2021-11-08T14:06:40 .
| ?????????? ? ? ? ? ..
| rw-r--r-- 65534 65534 59 2021-11-08T14:06:40 flag.txt
|_
| nfs-showmount:
| /var/nfs 10.0.0.0/8
|_ /mnt/nfsshare 10.0.0.0/8
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100003 3 2049/udp nfs
| 100003 3 2049/udp6 nfs
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100005 1,2,3 36777/tcp6 mountd
| 100005 1,2,3 37250/udp mountd
| 100005 1,2,3 37763/udp6 mountd
| 100005 1,2,3 59125/tcp mountd
| 100021 1,3,4 33507/udp6 nlockmgr
| 100021 1,3,4 37769/tcp nlockmgr
| 100021 1,3,4 44057/tcp6 nlockmgr
| 100021 1,3,4 51721/udp nlockmgr
| 100227 3 2049/tcp nfs_acl
| 100227 3 2049/tcp6 nfs_acl
| 100227 3 2049/udp nfs_acl
|_ 100227 3 2049/udp6 nfs_acl
2049/tcp open nfs_acl 3 (RPC #100227)

2- Showmount ile bağlanabilecek dizinleri tespit edelim .

3- target-NFS adlı klasör oluşturduk ve hedef sisteme bağladık . Ağaç yapısını aşağıdaki gibi görebiliriz geri kalan tek şey okumak .

Read Entire Article