Хакер № 03/09 (123)

Hack-Faq #03
Евгений «Corwin» Ермаков (corwin88@mail.ru)
Степан «Step» Ильин
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 привел пример подобного файла:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ("|%22).*(>|%3E|<|%3C).* [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteCond %{QUERY_STRING} (javascript:).*(;).* [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteCond %{QUERY_STRING} (;|'|"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if).* [NC]
RewriteRule ^(.*)$ log.php [NC]
RewriteRule (,|;|<|>|'|`) /log.php [NC]
Q: Интересно написание эксплоитов на PHP под веб-приложения, но мало где нашел информацию (кроме анализа уже написанных сплоитов). Есть ли полезная литература по теме?
A: Очевидно, что нужно смотреть в сторону толстых учебников по PHP :). Как правило, основа работы подобных эксплоитов сводится к обычной эмуляции браузера. Соответственно, ищи в книжных изданиях главу с подробно расписанной темой «Работа с HTTP. Сетевые функции. Эмуляция браузера».
Q: Как обезопасить сервер от брутфорса SSH?
A: Есть несколько скриптов – они анализируют лог авторизации и блокируют доступ с ip-адресов, с которых в течение короткого отрезка времени было множество неудачных попыток авторизации. Один из них - BlockSSHD (http://blocksshd.sourceforge.net). Это перловый демон, весьма удобный в управлении и конфигурировании. После установки открываем конфиг (/etc/blocksshd/blocksshd.conf) и смотрим основные параметры:
max_attempts => '4' - число неудачных попыток авторизации;
unblock => '1' – время, по истечении которого заблокированные ip будут разбанены;
send_email => '1' - отправлять уведомления об атакующем на email (0 - не уведомлять);
email => 'mymail@mail.com' - наш email;
email_whois_lookup => '0' - отключаем отправку вывода whois на email;
Ключи командной строки просты:
*) -d | --daemon | --start - запускаем как демон.
*) --stop
*) -h | --help
*) -v | --version
Q: Нашел бажный движок, в котором есть аплоадер изображений. Насколько я знаю, в список запрещенных для загрузки файлов входят php, perl и cgi. Как можно прогрузить веб-шелл?
A: Тебе повезло, что «защита» настолько примитивна. Дай расширение веб-шеллу, к примеру, gif, и загрузи .htaccess такого содержания:
<Files shell.gif>
AddType application/x-httpd-php .gif
</Files>
Таким образом, мы запустим скрипт.
Q: Какие, вообще, приемы используются для загрузки веб-шелла через скрипты, предназначенные для аплоада изображений?
A: Все зависит от используемых функций в скрипте загрузки. Про самое примитивное было написано выше (когда есть список недопустимых расширений). Иногда админы запрещают какие только можно расширения, но при этом забывают про старый добрый cgi (на деле такие ошибки редко встречаются – как правило, в сценарии указан массив с допустимыми расширениями, и все остальные режутся). Далее идет проверка поля заголовка Content-Type. В самом скрипте будет примерно такой код:
<?php
if($_FILES['userfile']['type']!="image/gif"){
echo 'Error!';
exit;
}
Если мы попробуем напрямую загрузить шелл, в заголовке будет строка Content-Type: text/plain, и проверку MIME-типа пройти не получится. Но ничто нам не мешает этот самый заголовок подделать и указать «Content-Type: image/gif».
Дальше глянем на функции move_uploaded_file и copy. Да-да, ты правильно понял, речь пойдет о null-байте ("%00", "\x00"). Предположим, в скрипте, ответственном за загрузку изображений, есть такой код:
<?php
//здесь идет проверка расширения
if ($allowed) { //если проверка пройдена
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
echo 'Uploaded!';
}
else {
echo 'Error!';
}
?>
Если мы попробуем загрузить php-файл, то не будет пройдена проверка, но если вставить null-байт (shell.php%00.jpg), то файл загрузится.
Следующая функция, которая часто используется веб-мастерами в скриптах - getimagesize. Функция getimagesize() определяет размер изображения GIF, JPG, PNG, SWF, PSD, TIFF или BMP и возвращает размеры, тип файла и высоту/ширину. К примеру, есть код:
<?php
$imageinfo=getimagesize($)FILES['userfile']['tmp_name']);
if($imageinfo['mime']!='image/gif' && imageinfo['mime']!='image/jpeg'){
echo 'Error!';
exit;
}
// код
?>
Берем обычную картинку, вставляем в EXIF-тег (заголовки, предназначенные для хранения комментариев к изображению и прочей «полезной» информации вроде модель камеры – редактируются фотошопом, ACDSee и т.п.) строчку веб-шелла, даем расширение php, если требуется подделываем Content-Type и загружаем файл.
Функции могут сочетаться, поэтому комбинируй способы.
Q: А как собственно защититься от таких багов?
A: Можно использовать специальный скрипт, который будет извлекать картинки в base64 из базы данных. Также предлагаем использовать скрипт, накладывающий рандомную XOR-маску на картинки. Это обезопасит от прямого выполнения, ведь любой код, внедренный в изображение, станет невалидным. В БД в таком случае нужно хранить саму маску и путь до файла. Существует еще замечательный проект «Suhosin» (http://hardened-php.net/suhosin), способный защитить от множества возможных атак.
- Защита от sql-injection
- Шифрование cookie
- Проверка содержимого загружаемых файлов
- Запрет удаленного и локального инклудинга
- Отключение eval()
- Отключение у preg_replace модификатора /e
- Выключение поддержки phpinfo()
- Защита от перезаписи переменных
- Добавление поддержки шифрования
- Защита от использования null-byte
- Защита от уязвимости HTTP Response Splitting
Впечатляет? И это только часть возможностей 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. В первом терминале надо запустить драйвер:
sudo path/to/wimax
Драйвер будет писать сообщения. Как только увидишь «State: NORMAL», будь уверен: модем подключился к сети. После этого можно переходить к шагу №3.
2. Во втором терминале выполняем команды:
sudo ifconfig tap0 up
3. Последняя команда:
sudo dhclient tap0
После этого можно пользоваться инетом. Чтобы упросить себе жизнь и производить настройку автоматически, можно написать скрипты. Хороший пример можно найти в этой статье – http://habrahabr.ru/blogs/WiMAX/50504.
Q: А если воспользоваться виртуальной машиной, то можно ведь настроить маршрутизацию из гостевой Винды и юзать инет под Linux'ом?
A: Именно это и имелось в виду! Ниже я приведу простой способ, как пробросить инет из виртуальной Windows XP:
1. Ставим любую виртуальную машину с поддержкой USB, например, VirtualBox (www.virtualbox.org).
2. Устанавливаем в качестве гостевой системы – Винду.
3. Конфигурируем в нашей основной системе сетевой интерфейс:
sudo tunctl -t tap0 -u zero
sudo ifconfig tap0 192.168.0.1 up
sudo chmod 0666 /dev/net/tun
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), и это действительно очень просто. Все инструкции и расценки (обрати внимание, что цены указаны в сингапурских центах) ты найдешь на официальном сайте. Да, правильно заметил, – это платно. Хочется халявы? Есть и такие способы:
- Завести аккаунт на Mail.ru.
- Прицепить к любому jabber-аккаунту транспорт mail.ru агента с сервера jabber.ru.
- В ростере jabbera кликнуть правой кнопкой, и в меню выбрать «Транспорт -> Выполнить команду -> Отправить SMS».
Учти: ограничение – 50 сообщений в день и большая вероятность быть забаненным :).
Q: Приятно, что большое внимание ][ стал уделять RIA-приложениям. А теперь такой вопрос - можно ли скомпилировать такой проект, чтобы он запускался на мобильных устройствах?
A: До недавнего времени это было невозможно. Но буквально на днях на странице Adobe Labs появился замечательный инструмент Distributable Player (http://labs.adobe.com/technologies/distributableplayer), который, наконец, позволил создавать RIA-приложения для мобильных устройств. Пакет состоит из двух частей:
- Flash Lite 3.1 Distributable Player. Собственно плеер для запуска приложений.
- Adobe Mobile Packager. Десктопное приложение, преобразовывающее SWF в файл-установщик для девайсов на базе Windows Mobile и Symbian S60.
Опробовать новину в действии ты можешь прямо сейчас – все доступно для скачивания!
Содержание
ВИДЕО К ЭТОМУ НОМЕРУПередовой наблюдательный пункт Symon обладает хорошей функциональностью, весьма прост в настройках, а генерируемые им графики наглядны и информативны. Давай посмотрим, так ли это?...
eZPublish под прицелом В этом видео ты увидишь, как хакер с легкостью покоряет, казалось бы, неуязвимую Open source CMS eZPublish....
Туннельный синдром Виртуальные частные сети снискали заслуженную популярность как надежное и безопасное средство, предназначенное для организации межсайтовой сетевой инфраструктуры и подключений удаленного доступа. По сравнению с другими решениями, PPTP-се...
Вторая жизнь WEP Это видео демонстрирует работу программ aircrack и weplab с различными типами комбинированных дампов беспроводного трафика. Демонстрируются следующие особенности и ошибки в программах: Weplab может найти в комбинированным дампе только...
|