12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Описание:access violation по адресу 41414141. Смотрим — переполнение несамое удобное: EIP не перезаписали, адрес возврата тоже. Доступенлишь ESI, искаженно — регистр ECX. Стек кусочково загаженнашими А (см. выше и ниже). Зато перезаписали SEH (View - SEHchain). С нововведениями в винду защита исключений поднялась вразы, но для примера оно сойдет. Чудесно. Так, узнаем подробности,используя плагин к pvefindaddr.Создаем паттерн:!pvefindaddr pattern_create 2000Адреса для возврата в стекПоиск иггхантер производит по кругу, то есть после конца адресногопространства процесса он переходит в начало. Таким образом, еслииггхантер не найдет тэг перед основным шеллкодом, то процессконкретно зависнет в бесконечном цикле, забирая при этом 100%произ водительности проца.Кстати, в Linux-системах иггхантинг юзается ничем не хуже, чем подWindows, и алгоритм аналогичен первому, разве что системные вызовыдругие, да регистры. Подробнее можешь почитать в той же статьеот skape.ÏÐÀÊÒÈ×ÅÑÊÀß ×ÀÑÒÜ. ÏÐÈÌÅÐ.Коли мы уже определились в необходимости иггхантинга как метода,давай опробуем его и некоторые его возможности на практике.Признаюсь что пример — лабораторный, но чрезвычайно показательный,а главное — доступный, но об этом — после.Для опытов мы воспользуемся звуковым редактором Audacity. Версияс переполнением — 1.2.6. Взять можно либо с offensive-security.com/archive/audacity-win-1.2.6.exe, либо с диска. Чтобы не повторяться— на диске есть все, о чем написано в данной статье, от ПО до всехвариантов эксплойтогенерилки.Инструментарий для препарирования — будем пользоваться ImmunityDebugger’ом c аддоном pvefindaddr от corelanc0d3r'а (от котором яписал в прошлом номере). Взять отсюда — immunityinc.com/productsimmdbg.shtml,либо отсюда — corelan.be:8800/index.php/security/pvefindaddr-py-immunity-debugger-pycommand/ .Для того, чтобы pvefindaddr заработал, пихай его в коробку с гвоздями.То есть в PyCommands.Сам эксплойт будет создаваться посредством Perl’а, так что под Win —ActivePerl с activestate.com/activeperl. Личное пристрастие…Итак, к делу. Переполнение буфера возникает при импорте специальносформированного MIDI-файла в программе. Создаем файл с AAAAAв 2000 байт.#!/usr/bin/perl$junk = "\x41" x 2000 ; #Áóêâà À 2ê ðàç$sploit = $junk;#Èòîãîâûé ñïëîéòopen(FILE, ">test.gro") or die "Cannot open file: $!";#Îòêðûâàåì ôàéë íà çàïèñüprint FILE $sploit; #Ïèøåì òåêñòclose(FILE); #Çàêðûâàåìprint "test.gro has been created \n";Длиннющую строчку, полученную из окошка лога(l) или из файлаmspattern.txt в папке Immunity Debugger’а, пихаем в переменную$junk. Пересоздаем test.gro и перезапускаем эдитор в дебаггере(ctrl+F2).Смотрим итог, используя функцию suggest, которая ищет в памятипервые 8 байт паттерна и выдает адреса, а также указывает, на чтомы можем воздействовать (регистры, SEH и т.д.), и какое необходимосмещение.!pvefindaddr suggestМожно узнать смещение и для конкретной части паттерна.К примеру, при переполнении SEH перезаписался значением67413966, тогда смещение узнаем так:!pvefindaddr pattern_offset 67413966Не буду вдаваться в подробности описания техники перезаписиSEH, но напомню основные моменты. SEH-запись в стекесостоит из двух 4-байтных адресов. Один из них — указатель наследующий обработчик исключений (nextSEH), если данный несработает, а второй — указатель на сам код, обрабатывающийисключение. При возникновении исключения программа переходитпо этому адресу. Но, так как нам нужно передать управлениена стек, то мы находим где-то в памяти последовательностьинструкции pop, pop, ret, тем самым избавляемся от лишнихданных в стеке, появившихся после перехода на обработчик, ивозвращаемся в стек. Так как nextSEH расположен на вершинестека, то нам нужно перепрыгнуть запись об обработчике исключения,что мы делаем, используя конструкцию \xeb\x06\x90\x90. Первые два байта — джамп вперед на 6 байт (2 байта \x90(NOP) и 4 байта адреса на SEH), то есть, за обработчик на нашшеллкод.Надеюсь, что понятное объяснение получилось, если что — смотримрисунок :).Итак, SEH находится на 178 байте, next SEH — 174. Чудесно.Для того, чтобы найти необходимую последовательность «pop popret», воспользуемся плагином еще раз. Для этого в нем есть несколькофункций. Без параметров он ищет в памяти процесса данную последовательностьсо всеми регистрами. По функции «p» — поиск происходиттолько для библиотек скомпилированных без safeSEH, по «p1»— без safeSEH и ASLR, «р2» — по всем. Итог смотри на скриншоте.!pvefindaddr pОткрываем Audacity в дебаггере и запускаем его (F9). Импортируемв звуковой редактор (Проект-Импорт MIDI). И видим в дебаггереXÀÊÅÐ 08 /139/ 10Полученный адрес, как ты понимаешь, будет у всех разный, так какзависит он от версии, пака ОС. Так что подбери какой-нибудь.069

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!