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

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

rss

Вы не зашли.

Объявление

#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
Сообщений: 1523
Рейтинг :   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))) {

Скуля в запросе выбора комментов, смотри сообщение об ошибке.
http://pix.am/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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 2785
Рейтинг :   115 
Профиль

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

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

Неактивен

 

Board footer

Powered by FluxBB

[ Generated in 0.010 seconds, 18 queries executed ]