Обзор эксплойтовВ текущем месяце багокопатели не хотят нас баловать новыми громкими эксплойтами в популярных приложениях. Конечно, опубликовано множество advisory в продуктах известных фирм, но очень малое их количество содержит удобоваримые PoC-коды. В нашем обзоре я постарался собрать самые значимые и полные уязвимости из описанных в последнее время, так что устраивайся поудобнее и наслаждайся чтением. Уязвимость PHP при обработке HTTP Head-запросовBrief3 марта некий Адам Иванюк обнаружил интересную особенность в интерпретаторе PHP, который не совсем корректно обрабатывает HEAD-запросы. Данную уязвимость исследователь назвал «HTTP HEAD method trick in php scripts». Многие кодеры разрабатывают свои PHP-скрипты, надеясь, что все записанные в них инструкции успешно выполнятся, не прервавшись где-нибудь посередине (особенно в коротких скриптах). Так и происходит, если скрипт запрашивается конечным пользователем с помощью методов GET, POST, PUT. Но тебе должно быть известно, что существуют и другие HTTP-методы — например, HEAD. Как раз-таки при обработке этого метода в PHP и может возникнуть дыра в безопасности. Смотрим один из исходников интерпретатора: ./main/SAPI.c, линия 315:
Когда поступают какие-либо данные, выполняется функция php_ub_body_write. Дальше смотрим main/output.c, линия 699:
Здесь видно, что при первом выводе на экран и при использовании метода HEAD функция zend_bailout прерывает работу скрипта. ExploitАвтор приводит несколько примеров эксплуатации этого бага. В первом примере у нас есть простая гостевая книга, похожая на множество скриптов, которые были когда-то разработаны и выложены в Сеть:
Теперь давай обратимся к этому скрипту с помощью метода HEAD:
Как и следовало ожидать, наша гостевая книга остановит свое выполнение на строчке «echo $data;», таким образом файл book.txt просто-напросто обнулится.
В этом скрипте при заходе обычными методами устанавливается административная переменная в сессии. Затем, если пользователь ввел неправильный пароль, эта переменная обнуляется и пользователь не становится админом. Если мы обратимся к админке через HEAD, ее выполнение прервется на куске кода с «echo», таким образом административная переменная не обнулится, и мы сможем спокойно бродить по закрытой части приложения. Здесь надо учесть, что в большинстве веб-серверов значение буферизации вывода установлено равным 4096 байт, так что в рабочем примере нам может понадобиться строка 'A long string contains about 4090 characters'. Exploit
SolutionНа момент публикации обзора последней версией PHP являлась версия 5.3.5. В ней нет никаких исправлений, касающихся данного бага, так что могу лишь посоветовать внимательно просмотреть исходники своих скриптов на предмет непредвиденных ситуаций при использовании метода HEAD. Выполнение произвольного кода в CakePHPBriefCakePHP — это известнейший (более 7 000 000 упоминаний в Гугле) программный каркас для создания веб-приложений, написанный на языке PHP и построенный на принципах открытого ПО. CakePHP реализует паттерн «Модель-Вид-Контроллер» (MVC). Изначально данный фреймворк создавался в качестве клона популярного Ruby on Rails, многие идеи были заимствованы именно оттуда:
Неудивительно, что на столь примечательный программный продукт обращено пристальное внимание многих пентестеров. Не так давно человек под ником felix нашел в данном фреймворке интересный баг, связанный с волшебными методами и использованием функции unserialize (подробнее о данном классе уязвимостей читай в прошлогодних номерах журнала). Для начала открываем компонент ./libs/controller/components/security.php и ищем следующий код, отвечающий за защиту от XSRFатак с помощью POST-запросов:
Здесь массив $check содержит наши POST-данные, а переменная $locked — это обфусцированная с помощью функции str_rot13() сериализованная строка, которая полностью находится под нашим контролем. На этом месте стоит сделать небольшое отступление для тех, кто не читал соответствующие статьи в ][, и кратко рассказать о баге, проявляющемся в волшебных методах PHP. Итак, в PHP версии 5 появилась базовая концепция ООПпрограммирования: конструктор и деструктор. Конструктор реализуется с помощью метода «__construct», а деструктор — с помощью метода «__destruct». По окончании своей работы и при вызове через функцию unserialize() каждый объект выполняет свой собственный __ destruct-метод, если он прописан в коде. А мы тем временем можем использовать эту особенность PHP, если отсутствуют какие-либо проверки пользовательского ввода в функции unserialize (оригинальное advisory Стефана Эссера читай по ссылке suspekt.org/downloads/POC2009-ShockingNewsInPHPExploitation.pdf). Теперь вернемся к нашему фреймворку и посмотрим на деструктор App-класса из файла ./libs/configure.php: Из приведенного кода можно понять, что данный метод может быть скомпрометирован путем записи произвольных значений в объект Cache. Наиболее интересный ключ для взлома — это ‘file_map’. Он управляет связями между классами и соответствующими PHP-файлами, а также используется для подгрузки дополнительных классов во время выполнения скрипта. Реальный код для загрузки классов выглядит немного сложнее, но все это сводится к следующему коду из метода __load внутри класса App:
Бинго! Путем подмены переменной $file мы сможем проинклудить свой собственный PHP-код! Причем это будет самый настоящий Remote File Inclusion баг — таким образом, нам не понадобятся никакие дополнительные ухищрения с загрузкой локальных файлов на сервер. Однако автор найденной уязвимости предлагает LFI-вариант эксплуатации этой дырки, потому что CakePHP использует базирующийся на файлах локальный кэш, который находится в сериализированной форме в известной взломщику директории. ExploitВ качестве небольшого PoC для генерации ядовитой сериализованной строки felix предлагает следующий код:
Конечно, предварительно ты должен проинклудить необходимые классы из CakePHP. Существует также и полнофункциональный эксплойт на Питоне, найти который ты сможешь по адресу malloc.im/burnedcake.py. Данный сплойт должен работать в каждом приложении, построенном на CakePHP, использующем POST-формы с security-токенами, и в котором не изменено стандартное расположение файлов кэша. По дефолту эксплойт выводит на экран конфиг базы данных, другие полезности легко добавляются путем измененения встроенного PHP-пэйлоада. Targets
SolutionДля исправления описанной уязвимости необходимо всего лишь скачать последнюю версию используемой тобой ветки CakePHP с сайта производителя cakephp.org. Раскрытие путей и потенциальные SQL-инъекции в Joomla!BriefДжумла — это система управления содержимым, написанная на языках PHP и JavaScript и использующая в качестве хранилища базу данных MySQL. Является свободным программным обеспечением, распространяемым под лицензией GNU GPL. Если ты не сталкивался в своей хеккерской деятельности с Joomla!, то ты просто-напросто живешь на другой планете :). В этом обзоре я хочу рассказать сразу о двух потенциальных SQL-инъекциях в различных ветках Джумлы, которые остались незамеченными и нераскрученными. Итак, первая инъекция была обнаружена ребятами из YGN Ethical Hacker Group (yehg.net/lab) в движке версии 1.5.21. Как пишут сами ресерчеры, потенциальные SQL-инъекции были обнаружены ими в Joomla! 1.5.20 в рамках исследования на XSS. Об этих багах немедленно было сообщено команде разработчиков движка, которые вскоре выпустили «пропатченную» версию 1.5.21. Слово «пропатченную» находится в кавычках, поскольку девелоперы закрыли глаза на большую часть адвисори команды YEHG и понадеялись на то, что эти уязвимости не полностью эксплуатабельны, так как Joomla! имеет встроенные строковые фильтры безопасности. В результате багокопатели раскрыли подробности эксплуатации обнаруженных потенциальных SQL-инъекций широкой публике, чем мы, конечно же, воспользуемся.
Здесь видно, что переменные $filter_order и $filter_order_dir не проходят проверку на строгое соответствие операторам SQL, проверка идет лишь путем использования стандартного метода clean из класса JFilterInput:
Таким образом, по дефолту мы получаем раскрытие путей. Аналогичный баг в тех же самых переменных совсем недавно был обнаружен и в первой версии движка из новой ветки 1.6. ExploitПо дефолту мы можем воспользоваться лишь раскрытием путей в Joomla! <= 1.5.21:
и в Joomla! 1.6.0:
Однако багокопатели предлагают воспользоваться данными багами в уже похеканных инсталляциях Джумлы в контексте протроянивания движка: тебе необходимо всего лишь удалить фильтры JFilterInput::clean у переменных filter_order_Dir и filter_order, после чего можно неограниченно пользоваться модифицированной уязвимостью. Также существует информация, что некие находчивые люди все-таки смогли обойти эти пресловутые фильтры, но эксплойт находится в глубоком привате. Targets
SolutionКак и всегда, не забываем обновляться с официального сайта разработчика joomla.org. На момент написания обзора последними версиями данной CMS были 1.5.22 и 1.6.0 соответственно. Подмена адресной строки в Microsoft Internet ExplorerBriefНапоследок хочу рассказать о небольшом и крайне забавном баге в ослике IE, который обнаружил хакер под ником cyber flash. Данный баг позволяет удаленному пользователю произвести простейшую спуфинг-атаку. Уязвимость существует из-за ошибки во время обновления панели адресной строки всплывающего окна. Удаленный пользователь может с помощью специально сформированной веб-страницы заставить браузер отображать только определенную часть адреса в адресной строке. ExploitВ качестве примера с подменой адресной строки сам автор предлагает следующий PoC HTML-код:
Также cyber flash предоставляет нам для тестов уже готовую страницу с PoC-кодом на keyloggeronline.com/misc/temp/about.htm. Зайдя на эту страницу, мы увидим надпись со ссылкой, которая приглашает нас перейти на сайт bing.com. Нажав на ссылку, мы увидим всплывающее окно, в адресной строке которого будет значиться тот самый Бинг. Ниже будет находиться еще одна ссылка, призывающая скачать новый Internet Explorer (причем, наведя курсор на «Download», мы не увидим ничего подозрительного, хотя там находится не новая версия браузера, а программа-псевдотроян от Сайбер Флеша). Targets
SolutionВ настоящий момент мелкомягкие все еще не исправили описанную уязвимость, так что, если ты используешь IE, в качестве временной меры советую быть внимательнее с незнакомыми всплывающими окнами. Содержание |