Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Итоги конкурса Group-IB Итоги конкурса Group-IB
Настало время подведения итогов нашего конкурса, который мы проводили совместно с компанией Group-IB, специализирующейся на расследовании инцидентов информационной безопасности....
Трюки с phpinfo Трюки с phpinfo
Совсем недавно в паблике появилась информация о новом интересном подходе к эксплуатации уязвимостей класса LFI с помощью бесполезной на первый взгляд функции phpinfo() и временных загрузочных файлов. Берем на вооружение этот полезный прием....

Хакер № 06/08 (114)

Easy-Hack

Леонид «R0id» Стройков (stroikov@gameland.ru)

Хакер, номер #114, стр. 114-038-1


Задача: провести обфускацию PHP-кода

Решение:

В прошлом номере ][ мы уже говорили о такой проблеме, как запутывание собственного PHP-кода. С научной точки зрения, сей процесс называется обфускацией – приведением исходного текста исполняемого кода к виду, сохраняющему функциональность программы, но затрудняющему анализ и понимание алгоритмов ее работы. Сегодня мы решим задачу, пользуясь утилой от хакера DX под названием PHP Obfuscator. Скрипт написан полностью на PHP и предоставляется автором свободно и в открытом виде. Коротко ознакомлю тебя с основными возможностями обфускатора:

  1. Скрипт имеет веб-интерфейс, поддерживает обфускацию имен переменных, имен функций, методов классов, шифрование статических строк (без переменных), а также сжатие PHP-кода (удаляются лишние пробелы, комментарии и т.п.).
  2. Есть возможность указать переменные, функции, которые не следует заменять, а также функции, параметры которых не следует заменять.
  3. Можно выборочно отключить обфускацию строк/переменных/функций. Для каждого типа также есть по два вида обфускации.
  4. Не поддерживаются конструкции $$var_name и eval, после обфускации необходимо будет поменять соответствующие имена функций в функциях, устанавливающих манипуляторы (например, ob_gzhandler). Не поддерживаются вызовы функций по их именам из строк.

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

  1. Выбираем любой веб-шелл с дирой на 777 либо бесплатный/платный хостинг.
  2. Заливаем в веб-диру (например, /img) файл dxobf.php (обфускатор).
  3. Переходим по линку к нашему скрипту, например: http://host.com/img/dxobf.php
  4. В поле «Исходный код PHP-файла» вбиваем код, который необходимо обфусцировать.
  5. Отмечаем понравившиеся галки в меню «Опции обфускации».
  6. Жмем баттон и довольствуемся результатом.

Скрипт имеет множество настроек и опций, посему процесс обфускации стал еще приятнее и удобнее :).

Решение: Думаю, ты не раз задавался целью поиска открытых веб-камер в Сети. Не спорю, наблюдать за людьми/событиями, происходящими в другом конце Земли (или офиса :)), довольно забавно. Удобнее всего осуществлять поиск с помощью любимого Гугла. При составлении запросов тебе поможет знаменитый ресурс http://johnny.ihackstuff.com. Наиболее жизнеспособные запросы я приведу в качестве примера:

inurl:"ViewerFrame?Mode="

inurl:netw_tcp.shtml

intitle:"supervisioncam protocol"

inurl:CgiStart?page=Single

inurl:indexFrame.shtml?newstyle=Quad

intitle:liveapplet inurl:LvAppl

inurl:/showcam.php?camid

inurl:video.cgi?resolution=

inurl:image?cachebust=

intitle:"Live View / - AXIS"

inurl:view/view.shtml

intext:"MOBOTIX M1"

intext:"Open Menu"

intitle:snc-rz30

inurl:home/

inurl:"MultiCameraFrame?Mode="

intitle:"EvoCam" inurl:"webcam.html?quot;

intitle:"Live NetSnap Cam-Server feed"

intitle:"Live View / - AXIS 206M"

intitle:"Live View / - AXIS 206W"

intitle:"Live View / - AXIS 210"

inurl:indexFrame.shtml Axis

inurl:"ViewerFrame?Mode="

inurl:"MultiCameraFrame?Mode=Motion"

intitle:start inurl:cgistart

intitle:"WJ-NT104 Main Page"

intext:"MOBOTIX M1" intext:"Open Menu"

intext:"MOBOTIX M10" intext:"Open Menu"

intext:"MOBOTIX D10" intext:"Open Menu"

intitle:snc-z20 inurl:home/

intitle:snc-cs3 inurl:home/

intitle:snc-rz30 inurl:home/

intitle:"sony network camera snc-p1"

intitle:"sony network camera snc-m1"

site:.viewnetcam.com -www.viewnetcam.com

intitle:"Toshiba Network Camera" user login

intitle:"netcam live image"

intitle:"i-Catcher Console - Web Monitor"

inurl:/home/home

intitle:flexwatch intext:"Copyright by Seyeon TECH Co"

intitle:"snc-rz30 home"

intitle: Network camera

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

  1. Определяемся с типом веб-камеры, доменной зоны, etc.
  2. Идем на Гугл и составляем интересующий нас запрос.
  3. Кликаем по линкам и наслаждаемся (иногда даже админскими правами).

Чтобы не быть голословным, оставлю тебе на растерзание два рабочих линка на веб-камы:

http://65.254.62.79/CgiStart?page=Single&Language=0

http://84.45.154.218:2220/CgiStart?page=Single&Language=0

Но учти, подглядывать – нехорошо.

Задача: максимально быстро сбрутить md5-хэш, не используя ranbow-таблиц

Решение: Как ты знаешь, большинство утил для брута мд5-хэшей довольно медлительны. Принцип их действия основывается на использовании мощностей процессора твоего компа. Однако, утила CUDA в своих «вычислениях» юзает видеокарту Nvidia (а точнее, ее мультипроцессоры, коих в последних версиях около 16). Результат подобного подхода налицо – сумасшедшая скорость перебора паролей. Рассмотрим все необходимые действия:

  1. Видеокарта потребуется Nvidia GF8600GT (или выше)
  2. В Windows XP нужно установить последние драйверы ForceWare: 169.21
  3. Запускаем утилу:

nvCUDA.exe -f=mypas.txt -s=7 -e=7

– где:

  • -f= файл с паролями до 50 шт., типа admin:9987d22788e810116a45109f2ea88648
  • -s= начальное количество символов в пароле (6 – по дефолту)
  • -e= конечное количество символов в пароле (8 – по дефолту)

Предварительная атака 2..5 символов (0x21..0x7f)

Командная строка:

// перебирает 0..9,a..z

nvCUDA.exe -f=mypas.txt -s=7 -e=7

  • -f= файл с паролями до 50 шт. типа admin:9987d22788e810116a45109f2ea88648
  • -s= начальное количество символов в пароле 6 - by default
  • -e= конечное количество символов в пароле 8 - by default
  1. Необходимые библиотеки и утилу ты найдешь на нашем DVD

Скорость перебора составляет на заявленной видеокарте порядка 105 mln pas/sec, так что – дерзай.

Задача: получить доступ к файлам на компе в игровом клубе

Решение:

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

Следующий метод будет работать во многих клубных системах – рассмотрим его на примере ClubControl (www.clubcontrol.ru). Если тестим в клубе, первые два пункта, естественно, можем пропустить.

  1. Ставим «ClubControl Client». Прога с русским интерфейсом, поэтому разобраться не составит труда. Вводим заранее оговоренный пароль.
  2. Создаем раздел с любым именем: «Раздел -> Добавить раздел». Добавляем ярлык для запуска: «Раздел -> Добавить ярлык». В качестве экзешника выбираем наш winamp (надеюсь, этот редчайший плеер у тебя установлен).
  3. Итак, подготовка закончена. Щелкаем по ярлыку, в Винампе вызываем диалог открытия файла (в моей версии «Open file(s)») и ... получаем доступ лишь к разрешенным файлам и папкам (в отдельных случаях, когда местные админы слишком ленивы – ко всему компу). Обычно для пользователя отводится своя папка. Можно сливать файло со своей флешки на комп и обратно, удалять, запускать и изменять файлы в своей директории.
  4. Но много радости это нам не доставит, поэтому в поле для ввода имени открываемого винампом файла нагло пишем «C:». Несмотря на то, что в спускающемся меню «Папка» дальше собственной директории нам уйти не удавалось (до ввода «C:» все было скрыто), а теперь при клике по этому меню плеер вылетает с ошибкой, в основном окне диалога выбора файла мы свободно распоряжаемся всеми файлами на диске C. До содержимого остальных жестких дисков и CD/DVD приводов можно добраться аналогично – вспоминаем английский алфавит и вводим в поле «Имя файла» «D:», «E:», «F:» и так далее.

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

Хочется отметить, что все ваши манипуляции при желании легко просматриваются (а возможно, логируются) с админского компа клуба, поэтому при выборе музыки стоит поторопиться :).

Задача: обойти StarForce для запуска игры с образа

Решение:

Старфорс – всем известная система защиты дисков, основанная на их физическом строении.

  1. Будем исходить из того, что у нас на руках уже есть образ диска, считанный на низких скоростях (1х-4х) с RMPS (физическая подпись записываемого диска). В противном случае для качественного создания образа лучше всего юзать Alcohol120% при всех включенных опциях эмуляции и типе данных StarForce.
  2. Допустим, мы имеем дело со StarForce 3.4.49.x (различные версии, в том числе более ранние, имеют свои способы обхода). Качаем утилиту StarFuck (black2knight.nm.ru/Starfuck_v0.83Beta2-Rus.exe) – версия 0.83 вполне подойдет. Тем, кто не дружит с английским, беспокоиться не стоит, найти наш вариант не составит труда. Запускаем.
  3. Выбираем нашу версию защиты StarForce из списка справа. В дальнейшем нужно будет указывать именно ее.
  4. Заходим в «Настройки». Заполняем поля с путями до Daemon Tools и Алкоголя. Метод патча cd-rom’ов оставляем «СуперАгрессивный», ожидание образа – 1000. В менюшке «CDRom'ы находятся» указываем, как подключены наши дисководы. Если что-то пойдет не так, то придется выключать комп и отсоединять их вручную, указывая в менюшке «у меня нет CDRom'ов». Также будет полезна прога StarForceNightmare, которая позволяет более точно подойти к делу отключения приводов (15 различных вариантов и комбинаций – напротив каждого варианта есть кнопка «Включить»). Применяем настройки, запускаем утилу еще раз.
  5. Щелкаем «Патчить BList». Выбираем «Выключить CD».
  6. Добираемся до менюшки «Генератор ярлыков». Сразу же меняем версию защиты на правильную в правом верхнем углу. Тип запуска «Запускать с EXE». Далее выбираем, в чьем виртуальном приводе будет работать образ диска (Даймон/Алкоголь). Кликаем «Указать EXE» и выбираем экзешник игры, с которого ее обычно запускают. Соседней кнопкой показываем путь до образа. Поле «Параметры запуска EXE» оставляем пустым.
  7. Готово. Создаем ярлык и используем его для запуска нужной игрушки.

Во избежание недоразумений: информация предоставлена только для тех, кто имеет оригинальный диск и просто ленится совать его в CD-ROM.

Задача: изменить параметры окна запускаемого приложения из-под отладчика

Решение:

Для чего это может понадобиться? Во-первых, иногда бывает необходимо изменить размер окна, которое не «растягивается» стандартными методами. Конечно, в таком случае можно использовать какую-либо утилиту, которая специально предназначена для манипуляции с окнами путем посылки им системных сообщений, но это – не путь настоящего крэкера :). Мы используем более изощренный метод, причем его можно применять не только для манипуляции с окнами, но и для задач сугубо «системного» толка. Ведь метод этот – подмена данных, передаваемых API-функции.

Первое, что нам требуется узнать, – какая API-функция создает окно. Лезем в справочник и получаем ответ: CreateWindowExW (есть и другие функции, но будем считать, что мы их откинули, действуя методом исключения). После того, как мы это выяснили, остается одно – поставить точки останова на все вызовы данной функции, дождаться инициализации (а, следовательно, и остановки на нужном месте) программы под отладчиком, исследовать передаваемые параметры. Затем найти среди них те, что отвечают за размеры окна и подменить их либо в стеке, либо непосредственно по адресу, откуда происходит извлечение этого параметра.

Рассмотрим этот несложный механизм на примере стандартного приложения notepad.exe, которое мы столько раз терзали.

  1. Открываем notepad.exe для отладки под OllyDbg;
  2. Устанавливаем точки останова на все вызовы CreateWindowExW: для этого нажимаем комбинацию клавиш <alt+F1> и в появившееся окно вводим «bpx CreateWindowExW»;
  3. Запускаем программу нажатием <F9>. Выполнение будет прервано по адресу 01004694h. Вот что мы увидим:

0100466B PUSH DWORD PTR DS:[1009A70];Height = 139 (313.)

01004671 MOV ESI,notepad.01001394

01004676 PUSH DWORD PTR DS:[1009A74];Width = 39A (922.)

0100467C PUSH DWORD PTR DS:[1009A7C];Y = CA (202.)

01004682 PUSH DWORD PTR DS:[1009A78];X = 52 (82.)

01004688 PUSH 0CF0000 ; стилевые характеристики

0100468D PUSH ESI; имя окна

0100468E PUSH notepad.01009020;Class = "Notepad"

01004693 PUSH EBX; стилевые характеристики

01004694 CALL DWORD PTR DS:[<&USER32.CreateWindowExW>]; вызов функции

Как ты можешь догадаться, по адресам 0100466B и 01004676 располагаются инструкции, выполняющие помещение в стек значений, которыми и определяется, соответственно, высота и ширина создаваемого окна.

Ставим точку останова по адресу 0100466B и перезапускаем программу под отладчиком.

  1. После того, как мы остановимся по адресу 0100466B, у нас появится, как минимум, два пути решения нашей задачи: первый – подменить данные непосредственно в стеке, и второй (наиболее предпочтительный) – изменить значения, находящиеся по адресу, который использует инструкция PUSH в качестве операнда. Инструкция выглядит следующим образом: PUSH DWORD PTR DS:[1009A70]. Это означает, что мы должны произвести подмену данных, находящихся по адресу 1009A70h. В окошке hex-дампа (которое находится «слева-снизу», под окном, содержащим листинг дизассемблирования) проследуем по этому адресу, выделим мышью два байта, которые содержат значения 39 и 01 и выберем из меню правой кнопки мыши пункт «Binary -> Edit». После этого можно смело вбивать в появившемся окне другое двухбайтовое значение, задающее высоту окна. Чтобы почувствовать «эффект», советую ввести значения «FF FF».
  2. Следующий (и последний) шаг – запуск программы по <F9>.

Обрати внимание, что API-функция CreateWindowExA приняла новые данные, результатом чего явилось изменение вертикальных размеров окна «Блокнота». Что и требовалось получить!

Задача: замаскировать вызов API-функции, заменив его более сложным, неявным, вызовом

Решение:

Думаю, ты сразу понял, для чего необходима маскировка. Конечно, единственная ее цель – затруднить задачу реверсера. Здесь есть где разгуляться фантазии кодера! Можно вызывать функцию через серию переходов, можно вычислять адрес функции путем математических преобразований, да мало ли что еще можно придумать :). Чем необычнее подход, тем больше вероятность, что реверсер отступится от защищаемой программы.

Для начала рассмотрим пример маскировки вызова с заменой конкретного адреса функции вычисляемым значением.

  1. Ставим точку останова на маскируемую API-функцию.
  2. Запускаем программу на исполнение (F9).
  3. После остановки программы на месте вызова маскируемой API-функции выполняем один шаг с заходом в подпрограмму (F7).
  4. Записываем адрес, по которому мы находимся после выполнения call-а (этот адрес фактически является адресом API-функции, и находимся мы в недрах конкретной библиотеки dll).
  5. Находим любую «свободную зону» в PE-файле – то есть зону, где расположен массив нулей, необходимый для выравнивания секций.
  6. Вызов API-функции заменяем безусловным переходом на начало массива нулей (вида «jmp адрес»).
  7. Переходим к массиву нулей – заполняем его следующими инструкциями:
    1. инструкциями, которые производят вычисление адреса вызова – именно вычисления по несложному алгоритму (единственное обязательное условие здесь: чтобы адрес API-функции нигде не присутствовал в явном виде).
    2. перехода по вычисленному адресу, помещенному в регистр (например, «call eax»).
    3. безусловного перехода по адресу инструкции, которая следовала за вызовом маскируемой API-функции.

Теперь, когда ты знаешь теорию, можно применить этот несложный алгоритм на примере изменения простого PE-файла «ex.exe», который вызывает функцию MessageBoxA, под отладчиком OllyDbg. О том, как это сделать, ты можешь прочитать на нашем DVD или посмотреть мой видеоурок.

Содержание  


ВИДЕО К ЭТОМУ НОМЕРУ

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

Вооруженный бронекальмар
Несмотря на то, что кэширующий прокси-сервер Squid прекрасно справляется с задачей ограничения доступа к различным ресурсам, проверять файлы на вирусы и блокировать баннеры его штатными средствами крайне проблематично. Здесь на помощь пр...

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

Берем Longhorn за рога
Установка Windows 2008 Server довольно проста, по ходу инсталляции задается минимум вопросов, и если все требования к оборудованию и размещению выдержаны, через 20 минут получаем уже готовую к использованию систему. Далее предстоит выпол...

Виртуальный грабеж
В этом ролике ты увидишь, как был взломан один из зарубежных шопов. Сначала хакер заходит на сайт магазина и находит несколько sql-инъекций. Но убедившись, что в качестве СУБД используется MS Access, взломщик подбирает название файла с Б...

ESHOP под ударом
В этом видео Elekt продемонстрирует процесс нахождения и практического применения уязвимостей в движке PHPShop. Хакер, исследуя каждый байт кода, последовательно находит самые разнообразные уязвимости. В конце концов, он находит серьезну...





Предыдущие номера


    Rambler's Top100