Hack-Faq #123Евгений «Corwin» Ермаков (corwin88@mail.ru) Q: Есть ли в СУБД Sybase таблицы аналогичные INFORMATION.SCHEMA.Tables(columns)?A: Аналогичную функцию в Sybase выполняет таблица sysobjects. Выборка ведется с указанием нужной базы данных. Итоговый запрос будем примерно таким (как правило, возникают проблемы несовпадения типов, но это уже другой вопрос) - select name from bd..sysobjects where type=U. Здесь «bd» - это БД, в которой мы смотрим имена таблиц. U - это тип, обозначающий пользовательские таблицы, которые нам и нужны. Если появляется ошибка, то берется hex-значение U - 0x55. Тогда (...) where type=0x55. Q: А как узнать сами базы данных?A: Используем запрос вроде: select dbname from master..syslogins. Смотрим следующую базу – select dbname from master..syslogins where dbname not in (берем_hex_значение_базы полученной_запросом_выше). Чтобы увидеть имена следующих баз, добавляем в скобки имена предыдущих баз взятых в hex. То есть: select dbname from master..syslogins where dbname not in (db1_взятое_в_hex,db2_взятое_в_hex,...). Получится примерно такое: select dbname from master..syslogins where dbname not in (0x646231,0x64626e616d6532,...). Q: В Сети полно бесплатных сервисов по взлому MD5-хэшей. Существуют ли платные сервисы?A: Да, такие сервисы есть, но их совсем немного. Один из них - http://hashchecker.com. Доступные цены: базовый аккаунт (50 хэшей) - $15, премиум аккаунт (100 хэшей) - $25. Там же есть возможность приобрести Rainbow-таблицы (к примеру, 196 таблиц на 16 DVD стоят там $500). Q: В руки попало несколько серверов. Есть ли софт для распределения брута хэшей на несколько машин?A: Можно посоветовать специальную версию утилиты John The Ripper - Distributed John (http://freshmeat.net/projects/djohn). Q: Реально ли сейчас взломать WEP под Windows Mobile?A: В системе WMobile нет поддержки monitor mode, необходимого WiFi-картам для сбора пакетов. Q: Через апачевый .htaccess можно как-нибудь обезопасить сервер от популярных атак (кроме как блокировать доступ по IP-адресу в определенные папки)?A: Товарищ Ronald van den Heetkamp привел пример подобного файла:
Q: Интересно написание эксплоитов на PHP под веб-приложения, но мало где нашел информацию (кроме анализа уже написанных сплоитов). Есть ли полезная литература по теме?A: Очевидно, что нужно смотреть в сторону толстых учебников по PHP :). Как правило, основа работы подобных эксплоитов сводится к обычной эмуляции браузера. Соответственно, ищи в книжных изданиях главу с подробно расписанной темой «Работа с HTTP. Сетевые функции. Эмуляция браузера». Q: Как обезопасить сервер от брутфорса SSH?A: Есть несколько скриптов – они анализируют лог авторизации и блокируют доступ с ip-адресов, с которых в течение короткого отрезка времени было множество неудачных попыток авторизации. Один из них - BlockSSHD (http://blocksshd.sourceforge.net). Это перловый демон, весьма удобный в управлении и конфигурировании. После установки открываем конфиг (/etc/blocksshd/blocksshd.conf) и смотрим основные параметры:
Ключи командной строки просты:
Q: Нашел бажный движок, в котором есть аплоадер изображений. Насколько я знаю, в список запрещенных для загрузки файлов входят php, perl и cgi. Как можно прогрузить веб-шелл?A: Тебе повезло, что «защита» настолько примитивна. Дай расширение веб-шеллу, к примеру, gif, и загрузи .htaccess такого содержания:
Таким образом, мы запустим скрипт. Q: Какие, вообще, приемы используются для загрузки веб-шелла через скрипты, предназначенные для аплоада изображений?A: Все зависит от используемых функций в скрипте загрузки. Про самое примитивное было написано выше (когда есть список недопустимых расширений). Иногда админы запрещают какие только можно расширения, но при этом забывают про старый добрый cgi (на деле такие ошибки редко встречаются – как правило, в сценарии указан массив с допустимыми расширениями, и все остальные режутся). Далее идет проверка поля заголовка Content-Type. В самом скрипте будет примерно такой код:
Если мы попробуем напрямую загрузить шелл, в заголовке будет строка Content-Type: text/plain, и проверку MIME-типа пройти не получится. Но ничто нам не мешает этот самый заголовок подделать и указать «Content-Type: image/gif». Дальше глянем на функции move_uploaded_file и copy. Да-да, ты правильно понял, речь пойдет о null-байте ("%00", "\x00"). Предположим, в скрипте, ответственном за загрузку изображений, есть такой код:
Если мы попробуем загрузить php-файл, то не будет пройдена проверка, но если вставить null-байт (shell.php%00.jpg), то файл загрузится. Следующая функция, которая часто используется веб-мастерами в скриптах - getimagesize. Функция getimagesize() определяет размер изображения GIF, JPG, PNG, SWF, PSD, TIFF или BMP и возвращает размеры, тип файла и высоту/ширину. К примеру, есть код:
Берем обычную картинку, вставляем в EXIF-тег (заголовки, предназначенные для хранения комментариев к изображению и прочей «полезной» информации вроде модель камеры – редактируются фотошопом, ACDSee и т.п.) строчку веб-шелла, даем расширение php, если требуется подделываем Content-Type и загружаем файл. Q: А как собственно защититься от таких багов?A: Можно использовать специальный скрипт, который будет извлекать картинки в base64 из базы данных. Также предлагаем использовать скрипт, накладывающий рандомную XOR-маску на картинки. Это обезопасит от прямого выполнения, ведь любой код, внедренный в изображение, станет невалидным. В БД в таком случае нужно хранить саму маску и путь до файла. Существует еще замечательный проект «Suhosin» (http://hardened-php.net/suhosin), способный защитить от множества возможных атак.
Впечатляет? И это только часть возможностей suhosin! В будущем планируется внедрение защиты от подделки всевозможных заголовков, переменных; автоматическая блокировка нападающего при обнаружении загрузки файла, содержащего код и т.д. Q: Знакомый рассказал про XSS через cookies. Как такое возможно?A: Все просто – данные, вводимые пользователем, сохраняются у него в куках, после чего при последующих посещениях хоста эти самые данные берутся из куков и вставляются в страницу. Q: Скачал скрипты одной CMS, нашел очевидный инклуд-баг, но заюзать его не получается. Файлы не инклудятся. В чем может быть дело?A: Самое очевидное - выключен Register_globals. Второе - где-то ранее в уязвимом сценарии находится объявление переменной, которую мы хотим проинклудить. Иногда это значение прописано в самом скрипте, иногда – в конфиге, который инклудится в бажный скрипт, а иногда – берется из базы данных. Все переменные определены заранее. Скрипт отделался легким испугом, и тебе не удается опорочить его своим длинным инклуденгом :). К сожалению, не все багоискатели удосуживаются провести полный анализ кода, и в итоге мы получаем появляющиеся на багтраках липовые advisory (многие просто проходят по скриптам обычным парсингом потенциально опасных функций). Q: Я всегда стремился получить качественный мобильный интернет за разумные деньги. Практика показывает, что одним решением в этом случае не обойтись: зона приема сильно дифференцирована. Поэтому, помимо 3G-девайса, приобрел модем Samsung со встроенным приемником WiMax для провайдера Yota. Под Виндой никаких загвоздок, но это, увы, это единственная официально поддерживаемая ОС. Что же теперь - отказываться от любимой Ubuntu?A: Если не брать в расчет вариант с использованием виртуальной машины, то остается, пожалуй, один достойный способ - воспользоваться альтернативным драйвером madwimax (http://code.google.com/p/madwimax). Отмечу, что на свет он появился не самым традиционным способом – реверс-инжинированный Linux-драйвер для Samsung SWC-U200 – USB-адаптера для доступа к сетям Mobile Wimax. Драйвер пишется полностью в user-space, что позволяет упростить разработку, используя библиотеку libusb-1.0. Но отсюда возникает и ограничение: библиотека поддерживает только Linux, поэтому другие юниксоиды пока остаются не у дел. Как заставить телефон работать в системе? Вот краткая инструкция: 1. В первом терминале надо запустить драйвер:
Драйвер будет писать сообщения. Как только увидишь «State: NORMAL», будь уверен: модем подключился к сети. После этого можно переходить к шагу №3. 2. Во втором терминале выполняем команды:
3. Последняя команда:
После этого можно пользоваться инетом. Чтобы упросить себе жизнь и производить настройку автоматически, можно написать скрипты. Хороший пример можно найти в этой статье – http://habrahabr.ru/blogs/WiMAX/50504. Q: А если воспользоваться виртуальной машиной, то можно ведь настроить маршрутизацию из гостевой Винды и юзать инет под Linux'ом?A: Именно это и имелось в виду! Ниже я приведу простой способ, как пробросить инет из виртуальной Windows XP: 1. Ставим любую виртуальную машину с поддержкой USB, например, VirtualBox (www.virtualbox.org). 2. Устанавливаем в качестве гостевой системы – Винду. 3. Конфигурируем в нашей основной системе сетевой интерфейс:
4. Находим в VirtualBox раздел «Сеть», выбираем host interface и указываем интерфейс tap0. 5. Запускаем виртуальную машину. 6. В панели управления XP находим наш сетевой адаптер и указываем IP: например, 192.168.0.1. 7. Для удобства настраиваем в системе любой proxy-сервер. Самое простое – SmallProxy (smallproxy.ru). 8. Подключаем к компьютеру USB-модем и, как обычно, устанавливаем драйвера. 9. Далее в прокси настраиваем соединение через Yota. 10. Сворачиваем виртуальную машину и указываем в основной системе прокси - 192.168.0.1:3128. Q: Хочу добавить в свой RSS-агрегатор (использую Google Reader) ленту из моего ЖЖ. Никаких проблем с этим нет, кроме того, что в нее не транслируется самое интересное - посты «friends only». Как это исправить?A: Средствами самого ЖЖ - никак. Зато можно набросать скрипт, который будет сам авторизироваться в сервисе, парсить данные и компоновать в RSS-поток. Или еще вариант - воспользоваться сервисом Yahoo Pipes (pipes.yahoo.com), что вообще избавляет от необходимости писать код вручную. Оба способа требуют небольшой сноровки и времени, а что если хочется сделать все прямо сейчас? К счастью, в Сети есть один замечательный сервис - RSS Proxy (http://rss-proxy.darkk.net.ru). Он как раз и позволяет добавить френдленту ЖЖ или любой другой RSS-поток, который требует аутентификации, в любимый агрегатор. Сервис совершенно бесплатный, причем оценить безопасность кода ты можешь сам, изучив исходники: http://github.com/darkk/rss-proxy. Q: Существует ли возможность отправлять SMS-сообщения по протоколу XMPP (Jabber)?A: Такой фишки у самого протокола нет – но есть сервисы, которые принимают сообщения по протоколу XMPP. Уверен, если поискать, их найдется очень много. Что там говорить: при правильном подходе такой гейт можно быстро сварганить, связав простенькие скрипты на Python'е и всем известный Clickatell Bulk SMS Gateway (www.clickatell.com), предлагающий разработчикам отличный IP. Из готовых решений я лично пробовал MessagingBay (http://www.messagingbay.com), и это действительно очень просто. Все инструкции и расценки (обрати внимание, что цены указаны в сингапурских центах) ты найдешь на официальном сайте. Да, правильно заметил, – это платно. Хочется халявы? Есть и такие способы:
Учти: ограничение – 50 сообщений в день и большая вероятность быть забаненным :). Q: Приятно, что большое внимание ][ стал уделять RIA-приложениям. А теперь такой вопрос - можно ли скомпилировать такой проект, чтобы он запускался на мобильных устройствах?A: До недавнего времени это было невозможно. Но буквально на днях на странице Adobe Labs появился замечательный инструмент Distributable Player (http://labs.adobe.com/technologies/distributableplayer), который, наконец, позволил создавать RIA-приложения для мобильных устройств. Пакет состоит из двух частей:
Опробовать новину в действии ты можешь прямо сейчас – все доступно для скачивания! |