IT-Security 33 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 Внимание всем пользователям модуля VIP-Serials! Присутствует уязвимость высокого уровня опасности! Класс: SQL-Injection Удалённый пользователь может совершать запросы к базе данных Уязвимый файл: engine/modules/vip.php Исправление: Найти: $serial = stripslashes($serial); Заменить на: $serial = $db->safesql($serial); Версия в которой нашёл - 2.6 Подозреваю, что автор не имеет никакого понятия о безопасности веб-приложений и уязвимы все версии. Уязвимы все сайты, на которых стоит этот модуль. Цитата Ссылка на сообщение Поделиться на других сайтах
gosu 1 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 bought vip 2.6 but the author does not support his script Цитата Ссылка на сообщение Поделиться на других сайтах
Niks 0 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 спасибо. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 IT-Security, немного не в тему, но уязвимы подавляющее большинство выпускаемых модулей. Кстати хвалёные новые Фотоальбомы тоже (Кстати можешь подтвердить, а то я тут недавно сказал, мне не поверили, т.к. думали я свой модуль пиарю ) Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 Автор Собственно говоря готов предоставить на коммерческой основе полный аудит по безопасности установленных модулей для желающих. Цитата Ссылка на сообщение Поделиться на других сайтах
www.zeos.com.ua 6 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 Собственно говоря готов предоставить на коммерческой основе полный аудит по безопасности установленных модулей для желающих. 2. На данном форуме строго запрещено предлагать или навязывать свои платные услуги. За любое сообщение типа "Помогу дешево, ICQ ..." участник блокируется на форуме без предупреждения. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 Автор Я думаю я без Вас как-нибудь разберусь. Смысл поста в том, что если любишь ставить сторонние бесплатные (И не очень) модули, то будь готов к тому, что сайт поимеют. Если люди не в состоянии сами себя защитить или правильно писать модули - то пусть обращаются. Как видите бесплатно я дырки тоже под настроение нахожу. Хотел бы сделать гадость - поимел бы сотню-другую сайтов, где этот модуль стоит. Цитата Ссылка на сообщение Поделиться на других сайтах
Tibet 0 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 Зря вы так неазжаете на IT-Security. Он именно по моему запросу этот модуль тестировал. Тем более что это действительно очень хороший модуль, он даже представлен (правда очень древней неуклюжей версией) на официальном сайте dle-news.ru в разделе МОДУЛИ. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 19 января 2009 Рассказать Опубликовано: 19 января 2009 (изменено) Автор Сча поглядим фото-альбомы... Начнём с того, что с выключенными 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 Не модуль, а решето. Заходите кто хотите, берите что хотите.... И то, что проверяются привелегии не должно быть отмазкой. Дырка есть?Есть! Изменено 19 января 2009 пользователем IT-Security Цитата Ссылка на сообщение Поделиться на других сайтах
kaliostro_den 2 Опубликовано: 20 января 2009 Рассказать Опубликовано: 20 января 2009 (изменено) '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); Как я понял из переменной тут еще сортировка впихнута, спрашивается зачем? от сортировки кол. измениться? Изменено 20 января 2009 пользователем kaliostro Цитата Ссылка на сообщение Поделиться на других сайтах
ShVad 2 Опубликовано: 20 января 2009 Рассказать Опубликовано: 20 января 2009 Еще в этом модуле ворованный класс от форума (+ удалены копирайты). Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 20 января 2009 Рассказать Опубликовано: 20 января 2009 Автор Фишка в том, что большинство инъекций можно применить только будучи админом галереи. Но это не оправдание, чтобы оставлять дырку. Ибо любой, кто стырит куки админа поимеет весь сайт. Да и о типах данных автор тоже не имеет понятия. В PHP типы конечно прозрачны, но делать так: $show_albom=='0' - маразм. Это INT преобразовывается в STRING и сравнивается... Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.