WHMCS <= 5.2.8 SQL Injection Zafiyeti Analizi

Merhaba

WHMCS, web sunucuları için yönetimsel arayüz hizmete veren ve PHP ile yazılmış bir yazılımdır. Bir çok web sunucusunda kurulu olan bu uygulamanın 5.2.8 versiyonu ve öncesini etkileyen SQL Injection zafiyeti bulunmaktadır. Bu yazıda WHMCS 5.2.8 SQL Injection zafiyetinin nasıl oluştuğu analiz edilecektir.

Read more

SkiddieTrapper ile Web Saldırılarını Uygulama Katmanında Tespit Etmek

Merhaba

Web uygulamalarına gelen saldırılar HTTP form’larında bulunan alanlarda ki değerlerin değiştirilmesi ile gerçekleştirilmektedir. Bu noktada saldırganlar güvenlik açığı bulmak için Burp yada Tamper Data gibi araçlar ile http taleplerini yakalayıp içeriklerini saldırı payload’ları değiştirerek uyglamanın davranışını analiz ederler.

Acunetix veya Netsparker gibi bu işi otomatize şekilde yapan uygulamalar ise öncelikle hedef web sitesinin link ağacını çıkartırlar. Her link üzerindeki html form’larını tespit edip, bu formlardaki input alanlarına saldırı girdileri yerleştirerek uygulamaya talep gönderirler. Bu şekilde uygulamanın döndüğü cevaplara göre güvenlik açığı tespiti yapmaya çalışırlar.

Skiddie (Script Kiddie) Trapper Nedir ?

Skiddie benim tarafımdan geliştirilmekte olan jquery’i kullanan bir güvenlik kütüphanesidir. Çalışma mantığı ise, güvenlik açığı arayan otomatize araçları veya hacker’ları tespit etmektir. Özgür yazılım olup yeni fikirlere / pull requestlere açık olan bu kütüphaneye https://github.com/mmetince/skiddie_trapper adresinden ulaşılabilir.

Çalışma Mantığı

Jquery’i kullanarak class’ında skiddie yazan tüm html form’larını toplamaktadır. Ardında bu html form’ların içerisine, yapısında bulundurduğu isim ve değerde input alanı eklemektedir. Yapısında barındırdığı input alanı ismi ve değer listesi aşağıdadır.

var variable_list = new Array();
variable_list.push({name : 'current_client_id', val : 17});
variable_list.push({name : 'member_unique_id', val : 284});
variable_list.push({name : 'session_identity', val : 4547});
variable_list.push({name : 'user_level_for_log', val : 'user'});
variable_list.push({name : 'log_identity', val : 472});
variable_list.push({name : 'ipv4_load_balancer', val : '10.0.0.17'});
variable_list.push({name : 'privileges_level_id', val : 3});

Input alanı isimlerinin karar verilmesinde ki en önemli etmen, manuel test gerçekleştiren saldırganların ilgisini çekmek amacıdır. HTTP talebi içerisinde privileges_level_id parametresini gören saldırgan, bu parametre üzerinden Insecure Direct Object Reference yada SQL Injection saldırıları gerçekleştirmeyi deneyecektir. Bu kurulan tuzağa düşen saldırgan, uygulama tarafında tespit edilecektir.

Uygulama tarafındaysa aşağıdakine benzer PHP implementasyonları ile saldırganlar tespit edilmektedir.

class ScriptKiddie{

    var $arr = array(
        'current_client_id'     =>  17,
        'member_unique_id'      =>  284,
        'session_identity'      =>  4547,
        'user_level_for_log'    =>  'user',
        'log_identity'          =>  472,
        'ipv4_load_balancer'    => '10.0.0.17',
        'privileges_level_id'   =>  3
    );
    var $client_ip = '';

    /**
     * Detection of script kiddie/automated vulnerability scan tool.
     * @return bool
     */
    function detect_kiddie(){
        if(!$_POST)
            return false;
        while (list($key, $value) = each($_POST)){
            if(array_key_exists($key, $this->arr)){
                if($this->arr[$key] != $value){ // Yeah request is coming from script kiddie/automated tool.
                    $this->client_ip = $this->_get_client_ip();
                    $this->_action_for_hacker($this->client_ip);
                    return False;
                }
            }
        }
        return TRUE;
    }
    /**
     * Get ip address of client who want to find vulnerability
     * @return string
     */
    private function _get_client_ip(){
        return $_SERVER['REMOTE_ADDR'];
    }

    /**
     * It's an action for what you want to do with suspicious client
     * @param $ip
     */
    private function _action_for_hacker($ip){
        /*
         * Do what ever you want with suspicious client
         */
        echo "You kiddo!";
    }
}

Eğer POST talebi ile gelen parametreler arasında skiddie_trapper tarafından yerleştirilmiş bir alan varsa. Bu alanın değerinin sabit kalıp kalmadığı kontrol edilmektedir. Eğer başlangıç değerinden farklı ise, saldırgan uygulamada ki javascript kodlarını okumadan testler gerçekleştirmektedir -ki %99 testler böyle gerçekleştirilir- .

Bu tuzağa düşen kullanıcılar sistemden uzaklaştırılabilir veya uygulamanın özeline göre sistem yöneticisine bildiri yapılabilir.

Teşekkürler : Kütüphaneyi geliştirme noktasında fikirleri ve desteğiyle katkıda bulunan Halo, Osman Tuna, Ömer Hakan Bilici’ye teşekkürler.