Альтернатива NULL-byte при LFI или новая уязвимость в PHP

Уязвимость в PHP, о которой пойдет речь в данной статье, была обнаружена в декабре 2008 пользователем форума sla.ckers.org под ником barbarianbob. В одном из своих ответов он предложил новый способ реализации локального инклуда, когда атакующий имеет возможность указывать произвольное имя файла, но не способен отбросить расширение при включенной директиве PHP magic_quotes_gpc в виду того факта, что широко используемый в таких целях NULL-byte (0x00) подвергается экранированию и, как следствие, становится неэффективным. Значение подобного способа невозможно переоценить, так как на данный момент почти все LFI-векторы основаны на использовании NULL-байта и, как правило, имеют данное ограничение. До настоящего времени информация оставалась незамеченной, но недавно итальянская команда USH опубликовала уникальный материал, расширяющий понимание новой уязвимости и дополняющий представление о ее причинах и других способах реализации. Continue reading “Альтернатива NULL-byte при LFI или новая уязвимость в PHP”

SQL-инъекции и PROCEDURE ANALYSE()

PROCEDURE ANALYSE() – это процедура MySQL, которая исследует запрос и предлагает оптимальные типы данных для каждой колонки, участвующей в запросе. Процедура работает во всех версиях MySQL, начиная с третьей.

Синтаксис:
SELECT … FROM … WHERE … PROCEDURE ANALYSE([max_elements,[max_memory]])

При вызове процедуры, весь результат запроса переписывается и возвращаются следующие данные:

mysql> SELECT user_login, user_pass FROM wp_users WHERE ID=1 PROCEDURE ANALYSE();
+------------------------+------------------------------------+------------------------------------+------------+------------+------------------+-------+-------------------------+------+-----------------------------------------------------+

| Field_name             | Min_value                          | Max_value                          | Min_length | Max_length | Empties_or_zeros | Nulls | Avg_value_or_avg_length | Std  | Optimal_fieldtype                                   |

+------------------------+------------------------------------+------------------------------------+------------+------------+------------------+-------+-------------------------+------+-----------------------------------------------------+

| wp.wp_users.user_login | admin                              | admin                              |          5 |          5 |                0 |     0 | 5.0000                  | NULL | ENUM('admin') NOT NULL                              |
| wp.wp_users.user_pass  | $P$BRxeOjv1sgBVgV82vO524AqG/5EdDD0 | $P$BRxeOjv1sgBVgV82vO524AqG/5EdDD0 |         34 |         34 |                0 |     0 | 34.0000                 | NULL | ENUM('$P$BRxeOjv1sgBVgV82vO524AqG/5EdDD0') NOT NULL |

+------------------------+------------------------------------+------------------------------------+------------+------------+------------------+-------+-------------------------+------+-----------------------------------------------------+

2 rows in set (0.00 sec)

Ни один из аргументов PROCEDURE ANALYSE() не позволяет использовать подзапросы внутри них, однако процедуру можно использовать в SQL-инъекциях для получения имен колонок, которые участвуют в выборке, таблицы и текущей базы данных. Особенно это актуально для MySQL версии 4, где нет системной базы данных information_schema, хранящей информацию о всех БД, таблицах и их колонках. Continue reading “SQL-инъекции и PROCEDURE ANALYSE()”

Активная XSS на FeedBurner

Feedburner.com – один из самых популярных среди блогеров сервисов для управления RSS-фидами. Доверие к feedburner вызывает тот факт, что этот сервис был приобретен Google и в настоящее время находится во владении интернет-гиганта. Тем не менее, у сервиса есть проблемы с безопасностью, в чем я недавно убедился. Просматривая статистику своего блога на feedburner.com, неожиданно получил javascript алерт с содержимым своих Cookie. Сначала я подумал, что это какие-то неаккуратные тесты разработчиков, однако, просмотрев исходный код страницы, обнаружил алерт в том месте, где выводилась информация о Referer пользователей, посетивших сайт. Видимо кто-то специально обратился к моему блогу с <script>alert(document.cookie)</script> в Referer, но не подозревая, что в статистике Feedburner этот HTTP-заголовок не фильтруется.
feedburnerxss
Уязвимость имеет место в статистике посещений сайта, однако для ведения этой статистики администратору необходимо установить специальный JS-код в исходник своего блога. Таким образом, XSS подвержены только те пользователи сервиса, у которых данная опция включена.
feedburner
Пока уязвимость не устранили, рекомендую блогерам снять на время галку с этого пункта. Учитывая, что это возможно неединственная уязвимость на фидбернере, также советую воспользоваться плагином NoScript для Firefox.

Опубликован Browser Security Handbook

Компания Google в лице известного эксперта по веб-безопасности Michal Zalewski опубликовала 60-страничный документ, описывающий все тонкости современных браузеров с точки зрения их безопасности. Вся информация очень удобно скомпанована в виде наглядных таблиц, в которых отражены характеристики браузеров по тому или иному критерию. Помимо специалистов по веб-безопасности работа также представляет интерес для веб-разработчиков, которым постоянно приходится подстраиваться под множество браузеров.
Книга на английском, ссылка ниже.
Browser Security Handbook.

P.S. обновил wordpress до 2.7, радуюсь новой фишке “Опубликовать это!”, реализованной в виде букмарклета. Очень удобно публиковать свеженайденный интересный контент, не покидая сайт.

CSRF у вас дома

Умные дома с интеллектуальными системами управления могут иметь веб-интерфейс. Более того, веб-контроль некоторых умных домов может быть уязвим к тем же атакам, которые проводят на обычные веб-приложения. В этом я сегодня убедился, прочитав любопытный пост вот на этом блоге. Автор рассказывает как его друг, который живет во Франции, однажды показал ему веб-интерфейс управления своим домом. Выяснилось, что веб-приложение, отвечающее за контроль освещения рождественской елки уязвимо к CSRF, с помощью которой атакующий мог включать/выключать елку =) Кроме того, веб-приложение также содержало активную XSS, что давало возможность управления всем домом.

Как ни странно, в выдаче гугла нашелся еще один умный дом с таким же веб-интерфейсом. Автор предположил, что каждый раз, когда гуглбот проходил по ссылке, в доме включался или выключался свет =)

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

С наступающим!

По поводу статьи в ][ “Неслучайные числа”

XA-119Недавно на сайте журнала “Хакер” увидел анонс нового выпуска. Одна из статей имела до боли знакомое название – “Неслучайные числа. Взлом генератора случайных чисел – ultimate-баг движка PHP“. Постоянные читатели моего блога, которые еще не видели эту статью, думаю, догадываются, о чем там ведется речь. Журнал я покупаю время от времени, в основном, чтобы почитать действительно стоящие статьи (обычно одна-две за полгода). В этот раз мой поход в близлежащий киоск был вызван интересом исключительно к данной статье – анонсы остальных публикаций меня не радовали, особенно “Юморим по-хакерски. Ломаем Радио Юмор FM“, автора и примерное содержание которой я мог предположить наперед (кто читал хотя бы пару выпусков журанала за последние 2 года меня сразу поймет =)). Автором статьи, к моему удивлению, оказался Маг, хотя сначала я думал, что это будет Элект, с которым мы обменивались опытом и информацией по поводу генераторов случайных чисел и усечению данных в MySQL. Тем не менее, статья мне понравилась, правда она мне показалась не очень доходчивой. Во всяком случае, мне пришлось бы не один раз перечитывать всю статью от начала до конца, чтобы вникнуть в суть дела, если бы не провел собственное исследование. Возможно формат журнала помешал Магу уместить все мысли в рамках одной статьи, а может просто сам характер материала, о котором всему миру поведал Стефан, довольно сложен для осмысления =). Еще одни момент, который я хотел бы отметить, – это недостаточная стилистическая обработка текста. Впрочем, для статей в рубрике “Взлом” это не так уж и важно, хотя для любителей рассказать историю одной скули – это один из основных компонентов, если автор рассчитывает получить одобрение на публикацию =). Среди фактических ошибок обнаружил лишь одну: в описании особенностей функции rand() не сказано про то, что они актуальны только для win32. Наверное, автор не заметил мой маленький апдейт статьи =). В целом, статья неплохая. Спасибо Магу за врезку в статье с кучей ссылок на мой блог =). Кстати, такая статья могла бы появиться намного раньше, ведь Стефан впервые описал подобного рода уязвимость в PunBB еще в феврале 2008 года. Что еще более удивительно, это эксплоит, появившийся вслед за advisory на следующий день и написанный совершенно другим человеком.

Эффективный и быстрый пентестинг веб-приложений с Burp Suite

Burp Suite – это набор относительно независимых кроссплатформенных приложений, написанных на Java, призванных решать повседневные задачи пентестера. Ядром программы является Burp Proxy, выполняющий функции локального прокси-сервера; остальные компоненты набора – это Spider, Intruder, Repeater, Sequencer, Decoder и Comparer. Все составляющие связаны между собой в единое целое таким образом, что данные могут быть отправлены в любую часть приложения, например из Proxy в Intruder для проведения различных проверок над веб-приложением, из Intruder в Repeater – для более тщательного ручного анализа HTTP-заголовков. Все компоненты заслуживают особого внимания, поэтому хотел бы рассказать о каждом из них.

Burp Suite

Continue reading “Эффективный и быстрый пентестинг веб-приложений с Burp Suite”

Защита от Clickjacking в Opera

Пользователи браузера FireFox имеют возможность получить высокую безопасность, работая в Сети, благодаря плагину NoScript, который способен защитить от множества атак, включая Clickjacking. К сожалению, кроме XSSFilter в IE8 для других браузеров аналогов NoScript не существует. Учитывая тот факт, что огромное число пользователей предпочитает браузер Opera, проблема защиты от Clickjacking в этом браузере является довольно актуальной. Opera предоставляет большие возможности по кофигурированию, поэтому даже без использования сторонних плагинов пользователь имеет возможность настроить свой браузер для эффективной защиты от Clickjacking.

Continue reading “Защита от Clickjacking в Opera”

Бэкдор в триггере

Нередко случается, что все руткиты/бэкдоры/веб-шеллы, полученные взломщиком с большими усилиями, однажды обнаруживаются администратором сервера и безвозвратно удалются. Чтобы закрепиться в системе как можно дольше, используется множество способов, большинство из которых сводится к хранению бэкдора непосредственно в файловой системе. У меня возникла идея хранить “черный ход” в систему в триггерах базы данных.

Триггер – это особая хранимая процедура, которая выполняется при наступлении определенного события на уровне таблицы базы данных. Этими событиями обычно являются использование операторов INSERT, UPDATE, DELETE. Главная особенность триггера заключается в том, что хранимая процедура, которую по сути он представляет собой, вызывается не пользователем, а самой базой данных и только при определенном условии.

При восстановлении утраченного доступа в систему может быть использован заранее внедренный триггер, создающий небольшой веб-шелл или выявляющий пароль администратора, который выполняется при наступлении специального события, известного только взломщику. Выгода такого решения очевидна: если в файловой системе администраторы еще как-то пытаются отслеживать посторонние объекты, то в базе данных обычно этого не делают.

Continue reading “Бэкдор в триггере”