Новые способы обхода WAF и PHP эксплоиты

Стефан Эссер снова порадовал очередной порцией свежей информации о новых уязвимостях в своих выступлениях сразу на двух мероприятиях (RSS09 и Powerofcommunity). В частности, он поделился интересными способами обхода таких WAF как mod_security и F5 BIGIP ASM, информацией о возможных уязвимостях в продуктах, работающих на Zend Framework, а также о том, как можно использовать уязвимость, связанной с прерываниями внутренних функций в PHP, несмотря на выпущенные фиксы. Итак, обо всем по порядку.

Read more »

PHP и зашифрованный код

Обфускация и шифрование кода в веб-приложениях обычно применяется с целью затруднения поиска уязвимостей, скрытия участков кода, осуществляющих проверку лицензионного ключа, невозможности редактирования, а также для защиты важных данных, например для подключения к базе данных. Методы шифрования могут быть самыми разными. В первую очередь проигрывают реализации обфускации на самом PHP – расшифровать такой код задача довольно тривиальная, так как в большинстве случаев ограничивается перехватом пары eval()’ов. Существуют даже универсальные инструменты для расшифровки, например вот этот скрипт на PHP. Что касается более продвинутых средств, таких как Zend Guard и ionCube, то дела здесь обстоят ничуть не лучше. Программа для расшифровки скриптов, закодированных Zend’ом, уже давно появилась в публичном доступе, а расшифровка ionCube также возможна, но пока только платно.

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

Read more »

SVN позволяет получить доступ к исходному коду

SVNСегодня на habrahabr.ru был опубликован весьма интересный пост, рассказывающий о том, как были получены исходные коды нескольких тысяч русских веб-проектов, включая yandex.ru, rambler.ru, mail.ru, rbk.ru, а также самого habrahabr.ru. Последствия находки, на первый взгляд, действительно потрясающие. Все строится на вполне очевидном факте – повсеместном использовании систем для контроля версий aka SVN. Дело в том, что на сайтах, где используется SVN остаются метафайлы, в которых хранится вся структура проекта. В дополнение к этому, все файлы получают расширение .svn-base, что делает доступным их исходный код при прямом обращении. Разумеется, все самые популярные интернет-проекты на момент выхода поста уже исправили уязвимость, однако зарубежные сайты остаются подверженными раскрытию исходного кода. Стоит сказать, что, несмотря на огромную популярность SVN, по тем или иным причинам уязвимы далеко не все сайты. Согласно статистике, которую любезно предоставили авторы, только 0,14% просканированных сайтов были уязвимы. Тем не менее, недооценивать значение бага нельзя, посмотрим, к чему это приведет в масштабах всего интернета.
http://habrahabr.ru/blogs/infosecurity/70330/

Сканнер уязвимостей CMS Drupal

drupalscan

Не секрет, что идеальных сканнеров уязвимостей не существует, особенно если такой сканнер стремится быть универсальным. Как правило, чем выше поле действия сканнера, тем ниже скорость работы, а также процент его эффективности. Эту идею подтверждает проект OWASP Joomla Vulnerability Scanner, который нацелен на самую популярную CMS. Испытав сканнер, я остался очень доволен результатами и решил написать нечто подобное для другого не менее известного продукта – CMS Drupal.

Drupal заслуженно является одной из самых безопасных CMS. Поддержка безопасности CMS в отличие от, к примеру, Wordpress находится на более высоком уровне благодаря активному тестированию CMS специальной группой Drupal Security Team и своевременному выпуску патчей и апдейтов, что подтверждается доверием пользователей. Тем не менее, как и у любого популярного веб-приложения, у Drupal есть свои уязвимости, что и послужило основнанием для создания простого сканнера.

Read more »

Презентация способов обхода XSS фильтров на BlackHat

BlackHatЕжегодно проводимая конференция BlackHat является одним из самых значимых событий в сфере информационной безопасности. В этом году эксперты из множества стран собрались в Лас Вегасе, чтобы показать и обсудить результаты своих исследований. Разумеется, не обошли стороной веб-безопасность – наиболее интересное выступление дали Эдуардо Вела (Eduardo Vela) и Дэвид Линдсэй (David Lindsay) на тему реализации XSS-атак в условиях WAF. Были затронуты практически все самые известные программные продукты, связанные с защитой от XSS как на стороне сервера, так и клиента: PHP-IDS, Mod_Security, XSSFilter в IE8, NoScript. Наиболее слабым оказался Mod_Security, поэтому авторы доклада рекомендуют использовать PHP-IDS вместо него. XSSFilter, изначально неспособный защитить от всех типов XSS (по словам разработчиков из MS в силу производительности браузера), также был повержен несколькими новыми XSS-векторами. На уровне клиента докладчики посоветовали использовать Firefox+NoScript, хотя и для последнего были найдены способы обхода. Ознакомиться с материалами выступления можно на сайте одного из авторов. Презентация получилась немалой – более 100 страниц. Много внимания уделено новым XSS-векторам, некоторые из которых просто поражают воображение. Только взгляните:

(É=[Å=[],µ=!Å+Å][µ[È=-~-~++Å]+({}+Å) [Ç=!!Å+µ,ª=Ç[Å]+Ç[+!Å],Å]+ª])() [µ[Å]+µ[Å+Å]+Ç[È]+ª](Å)

($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''
+$)[_/_]+$_[+$])])()[__[_/_]+__[_+~$]+$_[_]+$$](_/_)

За этим, казалось бы, беспорядочным набором символов кроется всем известный javascript:alert(1);. Кроме того, показаны примеры XSS, которые могут возникнуть в будущем с внедрением HTML5, а также уязвимость в PHP-функции utf8_decode(), позволяющая эксплуатировать неправильную обработку UTF-8. В целом, доклад, если не инновационный с точки зрения способов обхода, то уж точно приносящий много пищи для размышления, как разработчикам, так и взломщикам.

Новая техника быстрого извлечения данных при SQL-инъекциях в MSSQL

Прежде всего хочу поделиться ценной ссылкой – http://www.indianz.ch/. Данный ресурс имеет огромный и постоянно обновляемый каталог утилит и программ, имеющих отношение к информационной безопасности и взлому – от полезных скриптов в несколько десятков строк до таких монстров как metasploit. Именно здесь я нашел PoC, реализующий способ, который позволяет извлекать таблицы целиком за один запрос при SQL-инъекциях в MSSQL.

Новая техника называется SFX-SQLi – Select For Xml SQL Injection. В ее основе лежит применение оператора FOR XML для SELECT, который впервые появился в MSSQL 2000 и служит для преобразования результата выборки в формат данных XML, при чем на выходе всегда будет одна строка. Пример:

	SELECT *
	FROM [test].[dbo].[articles]
	FOR XML RAW

sfxsqli1

Несмотря на то, что оператор FOR XML известен еще со времен SQL Server 2000, техника SFX-SQLi получила освещение лишь в феврале этого года в работе Daniel Kachakil. Тем не менее, некоторые специалисты указывают на упоминание применения FOR XML в SQL-инъекциях еще в 2007 году.

Read more »

MySQL бэкдор для Windows

В одном из своих постов однажды я уже упоминал возможность создания SQL-бэкдоров, в частности для MySQL. В отличие от MSSQL и Oracle, где имеются широкие возможности по созданию сложных хранимых процедур и функций, для MySQL проблема безопасности внутренней инфраструктуры баз данных является не столь освещенной и разработанной. Прежде всего это связано с отсутствием средств для создания различного рода malware на уровне БД, а именно встроенного скриптового языка – имеется лишь ограниченный набор конструкций для создания простейших циклов и условий. Но недавно случайно для себя обнаружил довольно любопытный пример MySQL-бэкдора, основанный на использовании UDFUser-Defined Functions (определяемые пользователем функции). Такое средство призвано расширить функционал MySQL с помощью специально оформленного и предварительно скомпилированного кода на C++, который реализует дополнительные возможности в контексте базы данных, при чем использование таких функций ни чем не отличается от любых других встроенных функций. Представленный выше бэкдор работает только под Windows XP, так как для создания UDF-функции необходимы права на запись в папку, содержащую системные библиотеки. В старых версиях MySQL этой директорией была С:/mysql/bin/, но в версиях > 5.1 поиск необходимой dll будет производиться в C:/windows/system32/. В любом случае, в Windows Vista трюк с UDF работать не будет, так как UAC не позволит записать ни в одну из этих папок. Read more »

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

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

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, хранящей информацию о всех БД, таблицах и их колонках. Read more »

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

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

Burp Suite

Read more »

Следующая страница »