Вы не зашли.
На днях увидел ngCms (последний night build) (за что отдельное спасибо beliy) - хотелось бы отписать о замечаниях.
Первое.
Скуля в админке - это фейл. Хотя из админки есть возможность бэкапить БД и таким образом иметь полный доступ к ней, она может нехило помочь в заливке шелла (особенно, если ngcms работает от юзера root или любого другого mysql юзера с правами на запись файлов). Например, таким запросом заливается скрипт, выполняющий phpinfo:
/ngcms/engine/admin.php?mod=news&action=edit&id=1' UNION SELECT 1,2,3,4,5,6,7,8,9,'<?php phpinfo(); ?>',11 INTO OUTFILE '/var/www/ngcms/uploads/files/222.php' -- '
Сразу успокою, что использовать ее можно только с правами админа (для заливки шелла - только с определенными правами юзера бд), но если у вас утащат базу, то все плохо.
Как решение (для пользователей) - хотя бы с помощью .htaccess запретить выполнение скриптов в директории uploads, с правами на остальные директории быть внимательнее.
Второе.
Редактирование шаблонов. Ну это вообще просто о***ть. Переходим по адресу:
/ngcms/engine/admin.php?mod=templates&action=edit&filename=index.php&where=site&theme=../&skin=
И... редактируем index.php. Тот самый, что в корне /ngcms/. Разработчики, прикрутите фильтрацию слэшей и лишних точек, а так же прослеживайте, чтобы расширение имени шаблона было строго ".tpl".
Третье. Не столь значительное.
Пароли хранятся в базе в md5(md5($password)). Не кажется, что слабовато? Особенно после недавних скандалов с утечек паролей с last.fm и linkedin. Сейчас рекомендуют использовать bcrypt. Ну и хотя бы использовать соль.
Ну и еще, в некоторых местах в админке, если GET параметр, например, id=1, изменить на id[]=1, выскочит ошибка БД.
Пока что все. Буду дополнять по мере нахождения уязвимостей.
p.s. извините, возможно написал немного агрессивно.
Изменено wget (2012-08-27 16:42:05)
Не в сети
wget, по второму пункту. Зашёл под админом по этой ссылке - да, есть возможность редактирования. Но когда зашёл под юзером "Журналист", то увы - доступ закрыт.
Изменено Vaha (2012-08-27 17:49:44)
Не в сети
Первое.
Скуля в админке - это фейл. Хотя из админки есть возможность бэкапить БД и таким образом иметь полный доступ к ней, она может нехило помочь в заливке шелла (особенно, если ngcms работает от юзера root или любого другого mysql юзера с правами на запись файлов). Например, таким запросом заливается скрипт, выполняющий phpinfo:/ngcms/engine/admin.php?mod=news&action=edit&id=1' UNION SELECT 1,2,3,4,5,6,7,8,9,'<?php phpinfo(); ?>',11 INTO OUTFILE '/var/www/ngcms/uploads/files/222.php' -- '
Сразу успокою, что использовать ее можно только с правами админа (для заливки шелла - только с определенными правами юзера бд), но если у вас утащат базу, то все плохо.
Как решение (для пользователей) - хотя бы с помощью .htaccess запретить выполнение скриптов в директории uploads, с правами на остальные директории быть внимательнее.
Проверил, всё там фильтруется.
if (!is_array($row = $mysql->record("select * from ".prefix."_news where id = ".db_squote($id),1))) {
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Проверил, всё там фильтруется.
if (!is_array($row = $mysql->record("select * from ".prefix."_news where id = ".db_squote($id),1))) {
Скуля в запросе выбора комментов, смотри сообщение об ошибке.
p.s. (хотя я не уверен, что это именно тот кусок кода)
/engine/includes/inc/lib_admin.php:264
foreach ($mysql->select("select * from ".prefix."_comments where post=".$nrow['id']) as $crow) {
..=>понял, что не тот.
/engine/plugins/comments/comments.php:32
foreach ($mysql->select("select * from ".prefix."_comments where post='".$newsID."' order by id") as $crow) {
Изменено wget (2012-08-27 20:52:33)
Не в сети
wget, Ты это к тому что не фильтруется?
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
ROZARD пишет:wget, Ты это к тому что не фильтруется?
К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.
Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
wget пишет:ROZARD пишет:wget, Ты это к тому что не фильтруется?
К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.
Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.
SQL-иньекция это всегда критично. А так, в целом, движок отличный.
Не в сети
ROZARD пишет:wget пишет:К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.
Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.SQL-иньекция это всегда критично. А так, в целом, движок отличный.
Если можешь глянь мой форум. Может что найдешь.
http://ngcms.ru/forum/viewtopic.php?id=592
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
В общем первый реплейс кода, избавляемся от первой скули..
Открываем \engine\plugins\comments\comments.php
После 30-й строки добавляем
settype($newsID,"integer");
Должно получиться так:
$tpl -> template('comments', tpl_actions.'news');
settype($newsID,"integer");
foreach ($mysql->select("select * from ".prefix."_comments where post='".$newsID."' order by id") as $crow) {
Объяснять что он делает не вижу смысла, кто разбирается тот поймет, кто нет - просто отредактируйте.
Не в сети