Нажмите CTRL-D чтобы добавить нас в закладки
Внимание! Вы находитесь в незащищенном режиме (HTTP). Для перехода в защищенный режим SSL, нажмите здесь
HackZone.RU - Часть 1 из 2. Win32_bind. Обзор Shellcode (win32 shellcode) Актуальные базы 2GIS в форматах CSV,Excel,SQL
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Поиск ТОП Добавить публикацию

Часть 1 из 2. Win32_bind. Обзор Shellcode (win32 shellcode)

11.11.2015

В этой статье приведено описание того, как работает метэсплойт Win32_bind shellcode.
Настоящая статья ориентирована на людей с небольшим опытом в этой области, возможно только начинающих писать shellcode.
Имеющие SRE-опыт ничего нового или захватывающего в этой статье не найдут.
Я должен также упомянуть, что это не OllyDbg или инструкция по эксплуатации программного обеспечения. Вы должны иметь представление а том, как загрузить Ваш shellcode в память и работать с ним.
И так, если вы здесь, чтобы узнать об шеллкоде, давайте начнем!
Примечание: Рассматриваемая версия win32_bind актуальна по состоянию на ноябрь 2015 года.  В
озможно, Шеллкод, был обновлен с тех пор. В это заслуга команды Metasploit , поскольку я не написал ни строчки для этого.

Обзор
Наше путешествие начинается, с момента когда поток выполнения получает байт 0x0000 нашего win32_bind shellcode в Windows OS на x86 архитектуре. То, как это получилось илм как EIP был взломал - не важно.
Содержание общей цели и регистры флагов
нам неизвестны, и мы делаем только три предположения:
1) FS регистра сегмента находится в безопасности
2) У
казателя стека ESP указывает, что где-то есть записи
3) Kernel32.dll был вторым модулем, который будет инициализирован

Примечание:
В то время как содержание FS и регистра ESP  вряд ли были изменены с помощью обычной уязвимости переполнения буфера, мы скоро убедимся, что третье предположение не может быть выполнено  в версиях Windows 7 и выше.

Цель win32_bind состоит в том, чтобы прослушать полученный порт для TCP-соединения, который используется при соединении хоста Windows cmd shell.

Я разделю этот процесс на несколько частей, чтобы сделать его более управляемым:  вводная часть, замена GetModuleHandle, обычное внедрение GetProcAddress, для получения сокета и прослушивая его, обслуживание cmd shell и наконец финальная уборка после себя.
Итак приступим...


Вводная часть
Вводная часть это 9 байтов длиной и состоящее из следующего:



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

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

Следующие две инструкции могут считаться EB 4D (JMP 77 байтов вперед) с
помещенными впереди 6А, преобразовывая их в доброкачественные команды, которые не вызовут скачок на первом же проходе или любые другие нежелательные последствия. Этому нужно некоторое объяснение, однако потерпите.




Цель инструкции CALL в 0x0004 состоит в том, чтобы сохранить
его адрес на стек ниже так, чтобы его можно было использоваться позднее. Код между инструкцией CALL 0x0002 и инструкцией RETN в 0x0050 формирует функцию, которая многократно вызывает shellcode, поэтому это подходящее решение, чтобы сохранить его начальный адрес (запомните, что CALL  действует как PUSH EIP, сопровождаемый JMP).

Инструкция CALL с использованием четырех байтов (пример приведен для 32-битной системы), выполнена так чтобы компенсировать продолжение выполнения в этом случае 0xFFFFFFF9 (операнды отображаются в обратном порядке в столбце кода операции, так как они реально хранятся в памяти). Таким образом, план заключается в использовании CALL, чтобы сохранить адрес полезной функции в стек и продолжить выполнение в 0x0051, где мы сможем использовать этот адрес снова и снова.




Вы могли заметить или не заметить две вещи; первое - то, что 0xFFFFFFF9 слишком большое число, чтобы быть возвращено назад к семи байтам (CALLs & JMPs сделаны относительно байтов кодов операций), и второе, “почему нам просто не подставить в CALL 72 байта вместо того, чтобы вызывать семь байтов тогда, когда JMP отправляет 77 байтов?”.

В первом пункте причина состоит в том, что двоичная система счисления  используется здесь, чтобы представлять отрицательные числа, если Вы хотите узнать больше, я предлагаю изучить статью в Wikipedia в качестве отправной точки. Второй пункт следует за первым в том смысле, что мы ограничены использованием четырех или больше байтов, чтобы представлять смещение, используя команду CALL, но мы можем использовать всего один вариант инструкции JMP c
EB. Если бы мы хотели вызывать инструкцию в то же самое местоположение, то мы должны были бы использовать E8 00000047, в котором содержится три пустых байта, это то, чего в коде shellcoders нужно избегать.

Замена GetModuleHandle
Эта фаза начинается со смещения 0x0051 и его цель состоит в том, чтобы найти базовый адрес Kernel32.dll в памяти.  Оттуда он будет в состоянии использовать функцию, которую я упомянул во Вводной части, чтобы искать другие полезные функции в DLL и продвигаться к конечно цели. Неудивительно, т.к. этот код эмулирует работу функции GetModuleHandle от Kernel32.dll, хотя, так как мы еще не нашли Kernel32, мы должны использовать такую реализацию. Посетите страницу MSDN для получения дополнительной информации.




Мы видим, что EBX обнуляются, поэтому никакие нулевые байты не используются в следующей инструкции. В 0x0053 FS  сегментного регистра (который, как мы предположили, указывает на TIB/TEB ) разыменовывается, плюс 30 байтов. Смещению от TIB 0x30  является адресом PEB. Вы можете найти сведения об этих структурах ниже.

Примечание: TIB/TEB
 обозначает поток информации/блок переменных окружения. Это структура данных Windows, которая хранит информацию о текущем выполняющемся рабочем потоке. Для получения дополнительной информации посетите страницу Wikipedia, но для наших целей достаточно знать, что они могут быть надежно обнаружены с помощью FS регистра и смещения 0x30 удерживающего указателя в PEB.

При смещении 0x0C PEB указателя на структуру PEB_LDR_DATA, являющейся Windows структурой OS, содержащей информацию о загруженных модулях текущего процесса. Мы увидим, что его адрес будет перемещен в EAX в 0x0057.

Примечание: PEB (Process Environment Block) является другой
структурой данных Windows, в которую мы можем достоверно перейти, чтобы найти информацию. Вы можете проверить разбивку структуры в различных версиях Windows здесь.

Мы не станем слишком подробно останавливаться на TIB и PEB, т.к. они содержат больше лишней информации и некоторые версии PEN могут достигать в размере до ~ 580 байт. Однако, мы внимательнее взглянем на структуру PEB_LDR_DATA.

PEB_LDR_DATA содержит три отправные точки в двунаправленный список загруженных модулей. В одной из отправных точек перечислены модули в том порядке, в каком они были загружены, второй перечисляет их в том порядке, как они размещаются в памяти, но третий и самый интересный для нас перечисляет их в том порядке, как они были инициализированы. Порядок инициализации модулей в Windows вполне предсказуем (по крайней мере, когда дело доходит до жизненно важных библиотек dll, которые каждый процесс должен более или менее выполнить). Библиотека msvcrt будет импортировать функции из библиотеке kernel32 которпя импортирует функции из ntdll. Это приводит к общему правилу, что первым будет ntdll, kernel32 будет вторым и т. д..

Примечание: В Windows 7 и выше KernelBase будет инициализирован вторым, а Kernel32 третьим в порядке init. Приведенный shellcode потерпит неудачу на Windows 7 и выше, если Вы не измените его соответствующим образом.

Каждый объект, с которым связаны эти отправные точки (DR_MODULE) содержат информацию об этом модуле, включая его базовый адрес, который мы и ищем. Ниже упрощенная визуализация того, с чем мы имеем дело:





Как вы можете видеть, ссылка на функцию init  в PEB_LDR_DATA указывает на первый модуль, который будет инициализирован (в нашем случае модуль 2), который в свою очередь указывает на второй и т. д. Поскольку мы знаем, что на kernel32 был введен в строй вторым мы будем следовать первому .flink (сокращение для forward link) и использовать смещение к адресу, на который указывает захваченный базовый адрес в kernel32. В 0x005E повторно нам сделать просто, для чего добавить 08h до позиции, что на схеме второй зеленый .флинкчтобы найти наш желаемый адрес. Если здесь что-то не очень понятно, то вот ссылка  для понимания больше об этой структуре, в том числе и почему первый .флинк в init синий.

На этом этапе базовый адрес Kernel32 расположен в EAX и может быть использоваться в следующей фазе. Также стоит отметить, что инструкция POP ESI в 0x0061 хранит адрес кастомной функции GetProcAddress, которая была вызвана инструкцией  CALL во Вводной части, также будет для использования в следующей фазе.

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

Продолжение следует...
 

При копировании материалов ссылка на HackZone.RU обязательна

Добавить страницу в закладки

 Детали
Категория: Взлом
Опубликовал: Five-seveN
Просмотров: 3129
Проголосовало через SMS: 0
Ключевые слова: win32, shellcode, (найти похожие документы)
  Разместить у себя на сайте
Прямая ссылка
HTML
BBCode ссылка
BBCode ссылка с текстом

 Комментарии (оставить свой комментарий можно здесь)
Только зарегистрированные пользователи могут оставлять комментарии

Зарегистрироваться *** Авторизоваться


 Последние новости и статьи  Последние сообщения с форумов
  • Самозащита от вируса Petya
  • Google Pixel взломали за 60 секунд
  • В CMS Joomla обнаружена критическая 0-day уязвимость
  • ФБР не смогло взломать протокол шифрования переписки террористов ...
  • Полиция обыскала дом предполагаемого создателя платежной системы ...
  • Google: квантовый ПК будет в 100 млн раз быстрее стандартных чипо...
  • "Лаборатория Касперского" констатирует усиление атак кибергруппир...
  • Microsoft Edge откроет исходные коды ChakraCore
  • Anonymous объявили 11 декабря «днём троллинга» ИГИЛ
  • Миллионы телевизоров, смартфонов и маршрутизаторов оказались уязв...

    Все новости... Все статьи... Прислать новость RSS
  • Взлом и безопасность / Новичкам » Взлом Whatsapp.Viber.Instagram. facebook.Узнаем взломаем !!!
  • Разное / Продам, отдам » Re: Продаю Инсаид ВМ
  • Разное / Предложения работы » Нужен взлом Telegram
  • Взлом и безопасность / WEB сайтов » Где взять прокси или vpn которые меняют внешний ip?
  • Разное / Предложения работы » Работа для настоящего профи!
  • Разное / Предложения работы » Взлом программы.
  • Разное / Предложения работы » Нужно взломать собственный MySpace
  • Разное / Предложения работы » Нужно взломать андроид онлайн игру на некоторые параметры
  • Взлом и безопасность / Программы » Re: Помогите снять ограничение, программа MasterTool
  • Взлом и безопасность / Новичкам » Профессиональные услуги по взлому

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 2007-2012. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    Ya-Cyt службы мониторинга серверов

    #{title}

    #{text}

    x

    #{title}

    #{text}