Ders 6 - Command Injection (High Level)
Bu yazıda güvenlik düzeyi High seviyesine yükseltilmiş DVWA'ya karşı Command Injection saldırısı yapılabilir mi yapılamaz mı sorusunun cevabı irdelenecektir.

Dersin Hedefi

Command Injection'dan nasıl korunulurun cevabını keşfedin.

Command Injection'a Karşı Önlem

İlk Command Injection dersinde bir command injection saldırısında bulunmuştuk ve bir sayfa hack'lemiştik. İkinci Command Injection dersinde seviyesi arttırılmış güvenliği atlatmanın yolunu göstermiştik. Bu Command Injection dersinde ise seviyenin bir kademe daha yükseltildiği bir sayfanın güvenliğini nasıl temin ettiğine bakacağız. High Level'ın kaynak kodu şu şekildedir:

<?php 

if( isset( $_POST[ 'Submit' ]  ) ) { 
    // Get input 
    $target = trim($_REQUEST[ 'ip' ]); 

    // Set blacklist 
    $substitutions = array( 
        '&'  => '', 
        ';'  => '', 
        '| ' => '', 
        '-'  => '', 
        '$'  => '', 
        '('  => '', 
        ')'  => '', 
        '`'  => '', 
        '||' => '', 
    ); 

    // Remove any of the charactars in the array (blacklist). 
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command. 
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) { 
        // Windows 
        $cmd = shell_exec( 'ping  ' . $target ); 
    } 
    else { 
        // *nix 
        $cmd = shell_exec( 'ping  -c 4 ' . $target ); 
    } 

    // Feedback for the end user 
    echo "
{$cmd}
"; } ?>


Güvenlik Medium seviyesinde iken sadece && ve ; karakterleri metin kutusundan gelen veriden siliniyordu. Güvenlik High seviyesinde iken yukarıdaki $substitution dizisinden de görülebileceği gibi silinecek operatörlerin sayısı arttırılmıştır. Şimdi bir önceki derste kullandığımız sofistike yöntemin bu güvenlik seviyesini geçip geçemediğine bir bakalım. Geçen derste güvenliği atlatan kod şu şekilde idi:

1 &;& cat /etc/passwd

Bu numara bu sefer sökmeyecektir. Çünkü filtrelenecekler listesinde bu sefer && silinsin denilmemiş, & silinsin denilmiş. Dolayısıyla yukarıdaki kod str_replace() fonksiyonundan geçince şu hale dönüşecektir:

1 cat /etc/passwd

Yukarıdakini alan shell_exec() fonksiyonu bunu bir IP adresi diye alacaktır ve bu yorumlanamayacağı için de komut satırı hata verecektir ve bir çıktı döndürmeyecektir. Sonuç olarak ekrana enjekte edilmesini umduğumuz cat komutunun çıktısı yansımayacaktır.

Evet, sözün bittiği yerdeyiz. Elimiz kolumuz bağlı. Yapacak pek bi'şey yok. Fakat kimse şunu iddia edemez: Bundan ötesine geçilemez. Unutmayın, güvenlik Medium seviyesinde iken de böyle denebilirdi, fakat güvenlik geçildi. Hem de hiç umulmayacak bir yöntemle. Dolayısıyla bakış açımız hep olabilirlik üzerine kurulmalıdır. Diğer türlü hacker gibi düşünemeyiz ve koruduğumuz sistemlerden hack'lenmeyen kalmaz.

Sonuç

Güvenlik Medium seviyesinde iken kara liste diye tabir edilen güvenlik prosedürü uygulanmıştır. Yani kara listede olanları filtrele, gerisini salıver mantığı... Bu yazının konusu olan High seviyesinde ise yine kara liste yöntemi uygulanmıştır, fakat kara listenin kapsamı genişletilmiş ve daha hassas oluşturulmuştur. Güvenlik camiasında bir de beyaz liste ile güvenlik sağlama yöntemi vardır. Bu yönteme göre sözgelimi metin kutusundan gelecek veri içerisinden beyaz listede olanları çek, gerisini sil mantığı güdülür. Kara liste ise bunun tam tersidir: "Kara listede olanları sil, gerisini çek". Güvenlik uzmanları tarafından beyaz liste önerilmektedir. Çünkü en kaliteli ve sağlam güvenlik beyaz liste ile temin edilebilir. Kara liste güvenliği belli bir miktar sağlar, fakat gelecekte gelebilecek yeni tür ataklara karşı savunmasızdır.
Bu yazı 15.01.2016 tarihinde, saat 16:36:40'de yazılmıştır.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3536
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :