Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2012-08-27 16:34:11

wget
Участник
Зарегистрирован: 2012-08-27
Сообщений: 16
Рейтинг :   12 

Уязвимости и замечания по админке

На днях увидел 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)

Не в сети

#2 2012-08-27 17:49:26

Vaha
Участник
Зарегистрирован: 2011-02-19
Сообщений: 115
Рейтинг :   

Re: Уязвимости и замечания по админке

wget, по второму пункту. Зашёл под админом по этой ссылке - да, есть возможность редактирования. Но когда зашёл под юзером "Журналист", то увы - доступ закрыт.

Изменено Vaha (2012-08-27 17:49:44)

Не в сети

#3 2012-08-27 20:22:11

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Уязвимости и замечания по админке

wget пишет:

Первое.
Скуля в админке - это фейл. Хотя из админки есть возможность бэкапить БД и таким образом иметь полный доступ к ней, она может нехило помочь в заливке шелла (особенно, если 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))) {

Не в сети

#4 2012-08-27 20:35:14

wget
Участник
Зарегистрирован: 2012-08-27
Сообщений: 16
Рейтинг :   12 

Re: Уязвимости и замечания по админке

ROZARD пишет:

Проверил, всё там фильтруется.

if (!is_array($row = $mysql->record("select * from ".prefix."_news where id = ".db_squote($id),1))) {

Скуля в запросе выбора комментов, смотри сообщение об ошибке.
ynJ0.png
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)

Не в сети

#5 2012-08-27 20:55:20

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Уязвимости и замечания по админке

wget, Ты это к тому что не фильтруется?

Не в сети

#6 2012-08-27 21:01:39

wget
Участник
Зарегистрирован: 2012-08-27
Сообщений: 16
Рейтинг :   12 

Re: Уязвимости и замечания по админке

ROZARD пишет:

wget, Ты это к тому что не фильтруется?

К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос. Или что-то пояснить надо?

Не в сети

#7 2012-08-27 21:09:35

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Уязвимости и замечания по админке

wget пишет:
ROZARD пишет:

wget, Ты это к тому что не фильтруется?

К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.

Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.

Не в сети

#8 2012-08-27 21:16:01

wget
Участник
Зарегистрирован: 2012-08-27
Сообщений: 16
Рейтинг :   12 

Re: Уязвимости и замечания по админке

ROZARD пишет:
wget пишет:
ROZARD пишет:

wget, Ты это к тому что не фильтруется?

К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.

Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.

SQL-иньекция это всегда критично. А так, в целом, движок отличный.

Не в сети

#9 2012-08-27 21:19:06

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Уязвимости и замечания по админке

wget пишет:
ROZARD пишет:
wget пишет:

К тому, что да. Я же вроде бы достаточно расписал, даже привел конкретный запрос.

Хотел написать, что не критично, но нет чуть критично. Одно тянет другое.
Спасибо.

SQL-иньекция это всегда критично. А так, в целом, движок отличный.

Если можешь глянь мой форум. Может что найдешь.
http://ngcms.ru/forum/viewtopic.php?id=592

Не в сети

#10 2012-08-28 01:01:02

FNS
Участник
Зарегистрирован: 2012-08-23
Сообщений: 68
Рейтинг :   

Re: Уязвимости и замечания по админке

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

Не в сети

#11 2012-08-28 01:44:03

FNS
Участник
Зарегистрирован: 2012-08-23
Сообщений: 68
Рейтинг :   

Re: Уязвимости и замечания по админке

В общем первый реплейс кода, избавляемся от первой скули..
Открываем \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) {

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

Не в сети

#12 2012-09-03 15:13:35

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Уязвимости и замечания по админке

wget, спасибо.
В SVN выложил патчи, решающие проблему SQL injection и редактирования шаблонов.

Не в сети

Подвал раздела

Работает на FluxBB