Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Yii поиск уязвимости


Автор: Sanchezzz 26.9.2012, 17:57
Добрый вечер, прихожу сегодня на работу и на стол летит пачка листов узеров хеш паролями на страниц 40+ и задача найти: устранить уязвимость, воссоздать и самое мерзкое написать отчет для бумагалюбов smile 
Проект написан на Yii + файлов куча это переработка c 2006 года.
С чего начать помимо проверки запросов на уязвимость, форм загрузок + багов самого Yii


Автор: ksnk 26.9.2012, 18:42
Sanchezzz, Хеши паролей касаются только проекта? Может сам сервер ломанули? Бякап базы слили?

Автор: Sanchezzz 26.9.2012, 18:56
ksnk, хеши паролей узеров даны как демонстрация "что я вытащил пароли ой какой я молодец" и помимо него есть еще список таблиц. Лучше бы указал где и как я это сделал на какой странице. Ищи теперь эту иголку в стогу сена. Взлом сервера тоже возможен подобрали пароль и нужный порт от SSH и пошло поехало.

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

Автор: Sentox 26.9.2012, 19:05
Ищи SQL запросы, которые были сформированы в обход конструктора запросов или CActiveRecord, строка запроса чистым текстом передавалась в методы актив рекорда. Насколько я помню они там не обрабатывают параметры.
Так же по всем правилам прошерстить параметры под атрибутом "safe" как в CActiveRecord так и CFormModel.

Автор: ksnk 26.9.2012, 19:24
Sanchezzz, Первым делом стоит проверить, что нет возможности для юзера загрузить исполняемый файл на сервер. То есть в каталогах для `upload` не исполняются php или еще какие скриптовые файлы (pl, asp, ...) - лечится htaccess'ом. На таком скрипте несложно организовать файловый менеджер и скачать конфигурацию с настройками базы и слить ее. Возможно, остались следы - файл взломщика.
Нужно проверить, что в web-пространство невозможно подгрузить файл со стороны, иначе чем в upload.

Можно проанализировать лог доступа за последние дни (неделю?). Странная активность по адресам в админке с непонятными параметрами может оказаться следом. 

Ну и , конечно, сменить пароли админки, базы и сервера. Делать это максимально часто, пока не обнаружился баг.

Автор: Sentox 26.9.2012, 19:37
Цитата

ksnk, хеши паролей узеров даны как демонстрация "что я вытащил пароли ой какой я молодец" и помимо него есть еще список таблиц.


Так проверь логи доступа и посмотри этот запрос, который сделал тот кто "молодец".
Проанализируй логи "молодца" smile

Автор: Sanchezzz 26.9.2012, 19:40
ksnkSentox , Спасибо за советы/

Автор: SamDark 27.9.2012, 00:31
Ещё стоит посмотреть на index.php. Проверить, нет ли там define('YII_DEBUG', true). Если есть, удалить. Это режим отладки, может светить SQL.

Автор: Sanchezzz 27.9.2012, 07:24
YII_DEBUG точно отрублен это первое что было проверенно)

Автор: MoLeX 27.9.2012, 08:24
может есть дружественные проекты на сервере, стоит и их проверить.
по логам что?

Автор: Sentox 27.9.2012, 10:39
Само ядро фрейма в защищённом каталоге? В идеале его положить выше корня сайта.

Автор: SamDark 27.9.2012, 11:33
О, ещё если деплой идёт из svn или другой системы контроля версий, может быть засада http://rmcreative.ru/blog/post/byli-polucheny-iskhodniki-3300-globalnykh-internet-proektov

Автор: Sanchezzz 27.9.2012, 12:20
там две машина один сайт, фреймворк в отдельной папке как есть в корне директории. Реально используется только одна машина 
MoLeX,  по логам смотреть уже поздно дня 3 прошло.  И я сомневаюсь что что ведется.

Будем долго искать раз не передали через что поломали и не указали на дырку в сайте) видимо это платная услуга на которую хозяева пойти не могут и пытаются обойтись дешевым вариантом: напрячь разработчиков что бы искати и устраняли. 

Если это какой то баг фреймворка обязательно поделюсь в этой теме.


Автор: MoLeX 27.9.2012, 12:26
хм, речь идет об СУБД, но нет слово про файлы/архитектуру проекта. Можно подумать, что на сервере есть бажная версия phpMyAdmin'a

Автор: Sanchezzz 27.9.2012, 12:32
MoLeX, в отчете который нам передали был еще исходный код index.php все остальные листы были забиты распечаткой БД.
phpMyAdmin на сервере есть, кажется обновлен до последней версии там все редактируется через еще ajax..  Насчет баженый он или нет этого я не знаю.


Автор: SamDark 27.9.2012, 12:34
Очень похоже. Вариантов достать структуру базы (без доступа к файловой системе) не много. Так как YII_DEBUG отключен, их остаётся все-ничего:

1. phpmyadmin или аналог с дырой.
2. Очень кривой код приложения. Параметры подставляются прям в строку аля Yii::app()->db->createCommand("select * from table wher x = ".$id). При этом id не фильтруется.

Так как вариант №2 ещё надо хорошо поискать (то есть относительно нерентабельно), вероятнее всего это №1.

Добавлено через 1 минуту и 47 секунд
Если отдали index.php, всё серьёзней (хотя для Yii он стандартный).

Доступ к серверу по FTP? Уже посканили все машины с доступом к FTP антивирусом?

Логи я бы всё-таки посмотрел. Туда много всего пишется.

Автор: Sanchezzz 27.9.2012, 13:03
2 вариант с дыркой мне кажется более правдоподобный учитывая историю проекта которую я знаю я за 1,5 года  услышал в кратце:  первый разработчик  был фрелансером который обосрался и загулял  и пришлось в быстрые сроки писать это за него без знаний самого Yii  весь код был написан,  где в модели, где во вьюхи закинута логика. Знаний с фремворком было тогда полный 0. Но проект за 1-2 недели был дописан и сдан полусырым и был запущен  и набирал популярность.


Был редизайн и рефакторинг кода с оптимизацией  естественно знаний появилось гораздо больше больше  новые фишки появились в проекте  ###код который тормозил YII был переписан полностью как надо на идеологию Yii.
Да видимо не все переписали, что я и думаю первое что будем смотреть это на написанный код и прямые запросы.


через Sql иньекции можно спокойно подгрузить и выдернуть пароли от сервака а дальше заходи как родной.




Автор: Sentox 27.9.2012, 13:52
Цитата

Да видимо не все переписали, что я и думаю первое что будем смотреть это на написанный код и прямые запросы.

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

Автор: Sanchezzz 28.9.2012, 19:51
Нашлась гадость, это оказалось обычная sql инекция через адрс. строку путем созданием временной таблицы и вытаскивание доступов от сервера через БД и выводом на страницу.
Виновный в халатности уже наказан: временным запрета к печенькам пока все не устранит).

Автор: SamDark 28.9.2012, 20:42
SQL формировал строкой?

Автор: Sentox 28.9.2012, 21:23
Да, действительно, как сформировалась "дырка". Это действительно важно.

Автор: Sanchezzz 29.9.2012, 07:29
Цитата

SQL формировал строкой? 
 
Да, обычная строка запроса, вот почему я всегда талдычу использовать "Подготовленные выражения (prepared statements)" со всеми людьми которыми я работаю и работал).




Автор: ksnk 29.9.2012, 11:58
Sanchezzz, А как с помощью SQL инъекции можно получить содержимое файла index.php? 

Автор: Sanchezzz 29.9.2012, 14:13
Цитата(ksnk @ 29.9.2012,  11:58)
Sanchezzz, А как с помощью SQL инъекции можно получить содержимое файла index.php?

Путем завладения полного доступа от сервера)...
Если мускул работает оттого же пользователя что и вся система то в инекции можно подгрузить доступы через load_file вывести на экран и заходи как родной.



Автор: ksnk 29.9.2012, 19:26
Цитата

... and you must have the FILE privilege

Вот еще одна уязвимость ;) Операции работы с файлами в mysql действительно нужны?

Автор: Sanchezzz 29.9.2012, 19:58
ksnk, скорее всего нет. Спасибо что напомнили нужно админа наказать, введи лишения кофе утром).

Автор: ksnk 29.9.2012, 20:25
Цитата(Sanchezzz @  29.9.2012,  19:58 Найти цитируемый пост)
введи лишения кофе утром

Это слишком жестоко. А работать кто утром тогда будет?  smile 

Автор: Pumbaba 5.10.2012, 12:02
Цитата(Sanchezzz @ 26.9.2012,  17:57)
Добрый вечер, прихожу сегодня на работу и на стол летит пачка листов узеров хеш паролями на страниц 40+ и задача найти: устранить уязвимость, воссоздать и самое мерзкое написать отчет для бумагалюбов smile 
Проект написан на Yii + файлов куча это переработка c 2006 года.
С чего начать помимо проверки запросов на уязвимость, форм загрузок + багов самого Yii

Вообще очень хороший вопрос.  smile  Вот зря ты «бумаголюбов» не любишь. Понимаю — вроде скучно — но очень помогает в таких ситуациях. 

Способ понятно что уже запоздавший - но если нет автодокументрирования - т.н. "Бортовой журнал". 

Кто-то может сказать что это скучно, не нужно и кто этим пользуется, но по факту - помогает очень сильно. Было пару раз "приятных ситуаций" подобного рода, и ребята в команде хорошо что подобные записки вели. За пару дней смогли поднять все нюансы 3хлетнего проекта и мы смогли определится откуда ноги растут и на каком этапе могли допустить ошибки. 

Вообще советую поискать инструменты автоматизации самой начальной стадии проекта (только разобрать изначально по винтику!), т. к. уже столько глупых ошибок перевидал там где его не должно быть — потом когда в голову летит как ты пишешь пачка листов - за голову хватаешься и ищешь где и  откуда ветер дует. С недавних пор взяли на вооружение два дополнения под  Yii -  Boilerplate и backvendor. Довольно похожие штуки но, как по мне, второй — будет по интересней. Клипают админку и вэбсервис с нуля минут за 5. Потом только проверяешь сидишь и заносишь в «бортовой журнал» что, когда и где менялось.  

Автор: Sanchezzz 5.10.2012, 18:44
Pumbaba,  У нас есть собственная электронно документированный оборот по проектам и поддержке, этого хватает, что бы обслуживать сотни клиентов и вести что мы делали по проекту  а что нет.
Проект изначально был начат не нами а фрелансером с Украины, который потом пропал и досталось в наследство его костыли и незаконченный проект и крайне малый срок.

Да и документирование всего кода, кроме меня некто не делает я покрываю его полностью когда пишу даже себе в убыток( было пару замечаний и споров с коллегами почему так много) ) 
Каждую функцию входные параметры, результат, каждый класс, каждый метод, сложные конструкции, циклы, начало вхождения условий это 20-45% покрытия кода.
[ушел пить кофе]
...
Я честно не перевариваю фремворки и уже не люблю Yii за его цепочки вызовов классов за длинный названия методов (не придерживались правилу названия методов в 4-6 символов, возможно и за ограниченного запаса словарного запаса).
Но я пишу на Yii  для того что бы легче было поддерживать проект дальше после меня.

Фремворк или движок cms, это единственный способ прийти хотя бы к какому подобию стандартизованной работы в команде, конторе(фирме)

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

На ошибках чужих своих учатся.

Спасибо за совет о Boilerplate и backvendor(http://habrahabr.ru/sandbox/48176/)  посмотрю как будет время.

Автор: Sentox 5.10.2012, 19:22
Sanchezzz
Цитата

за длинный названия методов (не придерживались правилу названия методов в 4-6 символов, возможно и за ограниченного запаса словарного запаса).

Охохо smile
А какие же короткие названия.
И да, правила чистого кода наоборот придерживаться более ёмких названий програмного кода не жели писанины в комментариях.
"Не комментируйте плохой код - перепишите его" (Брайан У.Керниган и П.Дж.Плауэр)

Комментарии в большинстве своём это "шум" повторяемый то что описывает код, при чём они (комментарии) так же начинают требовать поддержки, так как если код меняет свой алгоритм то непосредственно нужно менять и комментарий. Код должен быть читаем, как книга, а не догадываться по "4-6 символам" что хотел сказать этим разработчик. Лучший комментарий это имя переменной, метода или класса.
Если измениться алгоритм изменится и код.
В этом я с Р.Мартином и Макконнеллом согласен на 100%

Автор: Sanchezzz 5.10.2012, 19:50
Sentox, Я так привык делать
Я привык комментировать то считаю нужным кому не нравится пусть удалит.

Автор: Sentox 5.10.2012, 20:04
Не не, не подумай что я в укор.
Наоборот, стремление людей в основном к меньшим именам и т.д., но когда ещё и не документируют код это уже очень плохо.

Цитата

Да и документирование всего кода, кроме меня некто не делает я покрываю его полностью когда пишу даже себе в убыток( было пару замечаний и споров с коллегами почему так много) ) 
Каждую функцию входные параметры, результат, каждый класс, каждый метод, сложные конструкции, циклы, начало вхождения условий это 20-45% покрытия кода.

Вот это очень похвально, сам так делаю, окупится сторицею, да же самому легче прорабатывать код тем же псевдокодом, потом становится комментариями.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)