Перейти к публикации

Модуль VIP-Serials - SQL Inject! (Исправление)


Рекомендованные сообщения

Внимание всем пользователям модуля VIP-Serials!

Присутствует уязвимость высокого уровня опасности!

Класс: SQL-Injection

Удалённый пользователь может совершать запросы к базе данных

Уязвимый файл:

engine/modules/vip.php

Исправление:

		Найти:

			$serial = stripslashes($serial);

		Заменить на:

			$serial = $db->safesql($serial);

Версия в которой нашёл - 2.6

Подозреваю, что автор не имеет никакого понятия о безопасности веб-приложений и уязвимы все версии.

Уязвимы все сайты, на которых стоит этот модуль.

Ссылка на сообщение
Поделиться на других сайтах

IT-Security,

немного не в тему, но уязвимы подавляющее большинство выпускаемых модулей. Кстати хвалёные новые Фотоальбомы тоже (Кстати можешь подтвердить, а то я тут недавно сказал, мне не поверили, т.к. думали я свой модуль пиарю :lol: )

Ссылка на сообщение
Поделиться на других сайтах

Собственно говоря готов предоставить на коммерческой основе полный аудит по безопасности установленных модулей для желающих.

Ссылка на сообщение
Поделиться на других сайтах

Собственно говоря готов предоставить на коммерческой основе полный аудит по безопасности установленных модулей для желающих.

2. На данном форуме строго запрещено предлагать или навязывать свои платные услуги. За любое сообщение типа "Помогу дешево, ICQ ..." участник блокируется на форуме без предупреждения.

Ссылка на сообщение
Поделиться на других сайтах

Я думаю я без Вас как-нибудь разберусь. Смысл поста в том, что если любишь ставить сторонние бесплатные (И не очень) модули, то будь готов к тому, что сайт поимеют.

Если люди не в состоянии сами себя защитить или правильно писать модули - то пусть обращаются.

Как видите бесплатно я дырки тоже под настроение нахожу. Хотел бы сделать гадость - поимел бы сотню-другую сайтов, где этот модуль стоит.

Ссылка на сообщение
Поделиться на других сайтах

Зря вы так неазжаете на IT-Security. Он именно по моему запросу этот модуль тестировал. Тем более что это действительно очень хороший модуль, он даже представлен (правда очень древней неуклюжей версией) на официальном сайте dle-news.ru в разделе МОДУЛИ.

Ссылка на сообщение
Поделиться на других сайтах

Сча поглядим фото-альбомы...

Начнём с того, что с выключенными short_open_tag работать не будет...

Едем дальше...

photo.php

	$v = "0.04 бета";



function lay($t){

	global $v;
Интересная идея глобалить никому нафиг ненужную переменную. Если так нужна - передайте параметром чтоли.
if(!isset($_POST['InTextAddAlUrl']))$_POST['InTextAddAlUrl']='0';
Ну что такое...Неужели трудно красиво писать?Красивее и функциональнее.
$somevar = isset($_POST['InTextAddAlUrl']) ? $_POST['InTextAddAlUrl'] : 0;
Далее:
			if($show_albom or $show_albom=='0'){$count_post = "SELECT COUNT(*) as count FROM " . PREFIX . "_photo_post where albom = '$show_albom' {$sort_row}";

					}else{$count_post = "SELECT COUNT(*) as count FROM " . PREFIX . "_photo_post {$sort_row}";}

			$row_post = $db->super_query($count_post);
С точки зрения быстродействия ни в коем случае нельзя делать Count(*)! Count нужно делать по проиндексированному полю. Крайне желательно по Primary Key Далее: Видел пару раз count() несколько раз. Лучше получить в переменную 1 раз и проверять переменную. Ибо:
if($en>count($ar)){  $en=count($ar);}

										  if($i==0){

											  while(($i+$en)<4){$en++;}

											  $fifi=$i;}

										   $startofit = $i;

										   $endofit = $en;

										  if($en==count($ar) or $en==count($ar)-1){

											  if($en!=count($ar)-1){
5 раз вызывается функция. Когда можно вызвать один раз.
for($x = 1;$x<count($listik);$x++)
Опять же вопрос производительности. count() будет вызываться при каждой итерации цикла. show.php вообще супер :)
IF ($_REQUEST['small']){

$id =	$_REQUEST['small'];



			$dir = "./uploads/photos/";

			$file =$dir.$id;
basename() юзайте, товарищи!
$HTTP_SESSION_VARS - старо и не является супер-глобальный массивом...Нужно использовать $_SESSION.

$sort = "where albom = '{$HTTP_SESSION_VARS['aid']

SQL Inject. Заголовки сессии можно запросто подделывать.
Кстати об ajax:
$new = stripslashes($new);
Зачем сбрасывать добавляемые для безопасности слэши??? SQL-Inject по идее.
$idy = $_POST['idy'];

$zoo = "SELECT * FROM `" . PREFIX . "_photo_post` where id = {$idy}";
SQL Inject
	$idal	=	$_POST['delit'];

	$zapros = "DELETE FROM " . PREFIX . "_photo_alboms WHERE id = '{$idal}'";
SQL Inject 'delete from dle_photo_alboms where 1=1'
	$take = "SELECT * FROM `" . PREFIX . "_photo_post` where albom = {$idal}";

	$zoo = "DELETE FROM `" . PREFIX . "_photo_post` where albom = {$idal}";
SQL Inject
	$id	=	$_POST['edit'];

	$zapros = "SELECT * FROM " . PREFIX . "_photo_alboms WHERE id = '{$id}'";
SQL Inject
	$id			=	convert_unicode_photo($_POST['edit']);

	$sname		=	trim(convert_unicode_photo($_POST['sname']));

	$sdes		=	trim(convert_unicode_photo($_POST['sdes']));

	$sphotos	=	trim($_POST['sphotos']);

...

...

$up  = "UPDATE `" . PREFIX . "_photo_alboms` SET name='{$sname}',des='{$sdes}',photos ='{$sphotos}' WHERE  id  = '{$id}'";

$zapros = "SELECT * FROM " . PREFIX . "_photo_alboms WHERE id = '{$id}'";
SQL Inject
$id	=	$_POST['idy'];

$take = "SELECT * FROM `" . PREFIX . "_photo_post` where id = {$id}";
SQL Inject
  $p = convert_unicode_photo($_POST['p'])-1;

  $pid = convert_unicode_photo($_POST['pid']);

...

...

$comms = "SELECT * FROM " . PREFIX . "_photo_comm where pid = '{$pid}' ORDER BY `date` DESC LIMIT $start , $finish";

...

$test = "SELECT COUNT(*) as count FROM " . PREFIX . "_photo_comm where pid = '{$pid}'";

SQL Inject

Не модуль, а решето. Заходите кто хотите, берите что хотите.... И то, что проверяются привелегии не должно быть отмазкой. Дырка есть?Есть!

Изменено пользователем IT-Security
Ссылка на сообщение
Поделиться на других сайтах

'delete from dle_photo_alboms where 1=1'

Немного не так.

Статейка хороша только может не нуна было указывать способ применения, сейчас каждый захочет потренироваться :)

 if($show_albom or $show_albom=='0'){$count_post = "SELECT COUNT(*) as count FROM " . PREFIX . "_photo_post where albom = '$show_albom' {$sort_row}";

					}else{$count_post = "SELECT COUNT(*) as count FROM " . PREFIX . "_photo_post {$sort_row}";}

			$row_post = $db->super_query($count_post);

Как я понял из переменной тут еще сортировка впихнута, спрашивается зачем? от сортировки кол. измениться?

Изменено пользователем kaliostro
Ссылка на сообщение
Поделиться на других сайтах

Фишка в том, что большинство инъекций можно применить только будучи админом галереи. Но это не оправдание, чтобы оставлять дырку.

Ибо любой, кто стырит куки админа поимеет весь сайт.

Да и о типах данных автор тоже не имеет понятия.

В PHP типы конечно прозрачны, но делать так:

$show_albom=='0' - маразм.

Это INT преобразовывается в STRING и сравнивается...

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...