Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Нулевой байт-ASM
Посл.ответ Сообщение

Ранг: 23.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 18 марта 2010 23:32 · Поправил: TheNozza
· Личное сообщение · #1

Уважаемые специалисты асма, подскажите пожалуйста по следующему вопросу. Самому сообразить не удалось.
Тут нужен опыт и закалка. Которые,надеюсь преобрету с годами.
Вообщем к делу!
Исследуется уязвимость переполнения буфера,расположенного в стековом кадре.

Hight addr EIP EBP С Т Е К О В Ы Й К А Д Р ......аргументы функции2 EIP EBP .................. Low addr
...................................\buf before overflow \---------------------->-\ buf after overflow \

Функция2 так красиво копирует локальную переменную стекового кадра функции1(В реале конечно всё намного сложнее,так устроен мир,но схемка отражает суть вопроса) . Кому интересно скажу намёком функция1 является правнучкой печальной и на весь мир известной функции NetpwPathCanonicalize.( Всё молчу,кому надо те поняли о чём идёт речь.)

Сам вопрос:
1)DEP влючен(код шеллкода на данном этапе в стеке не исполняется).
Я осуществляю переполнение буфера по данной схеме перезаписывая адрес возврата функции2,и указатель базы стекового кадра функции2(база переписывается по любому-она в середине строки).
База должна быть равна 0006FAE4 +- 10-14h байт. Это необходимо для последующего отключения
DEPa(разрешения выполнения кода в стеке). Символы E4,FA,06 строкой передаю без проблем. А нулевой байт- засада! В середине строки его ясно передавать нельзя.

Условия
1) DEP включен пока. (Можно только вызывать функции (с любого адреса из дллок)).
2) Мне достаточно даже чтобы просто EBP стал равным ESP и всё ок.
Какие-то инструкции нужны из дллок выполнить типа
1 mov EBP,ESP;retn;
(но тут засада перед retn в функции будет торчать драное pop EBP -которое всю малину...))
2 Просто хотя бы MOV EBP,ESP;...CALL DWORD PTR SS:[EBP+-несколько десятков байт];(Туда адрес я шелкодом положу.
все адреса нормальные без нулевых байтов - только стек такой);
(Такой последовательности инструкций не нашёл)
Какие варианты?

И последнее если кто-то знает хотя бы примерный адрес расположения инструкции (JMP ESP или CALL ESP
в дллках SP2 или хотя бы название библиотеки напишите расцелую).

Жду ответа от добрых людей! Есть же программеры с опытом, со специализацией - агрессивное программирование:переполнение буфера,использование уязвимостей стек,куча,захват нити(Thread'а), отточка шеллкодов,написание эксплойтов. (По моему мнению - существенная разница между написанием программы и шеллкода, шеллкод скорее не пишется, а точится [синоним - подгоняется к своему идеалу методом бесконечных проб и ошибок,доводится до совершенства!]Отточенный шеллкод-это красота, совершенство,которое не встретишь реальном мире,предмет гордости,сокровище,заключённое в объёме каких-то нескольких сотен байт.Как раз тот случай когда поражает не объём, а глубина.)

Подскажите молодёжи!



Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 19 марта 2010 09:18 · Поправил: Rockphorr
· Личное сообщение · #2

"И последнее если кто-то знает хотя бы примерный адрес расположения инструкции (JMP ESP или CALL ESP
в дллках SP2 или хотя бы название библиотеки напишите расцелую). "

ищите по сигнатуре, но имхо вероятность найти где нить мала
в обычных длл потребности в такой специфичной инструкции нет




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 19 марта 2010 13:14
· Личное сообщение · #3

Rockphorr
с другой стороны, два байта можно встретить очень часто)

-----
zzz





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 19 марта 2010 14:46
· Личное сообщение · #4

по поводу нулевых байт в шеллкоде:

создаёшь битовую карту (bit map) нулей в шеллкоде, добавляешь (можешь применять и другую операцию) к ним (нулям) определённое значение, а в шеллкоде всё возвращаешь, в общем есть варианты
а jmp esp в системных либах найти... скорее уж как часть другой инструкции или данных (что неприемлемо)

-----
EnJoy!





Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 19 марта 2010 16:57
· Личное сообщение · #5

Jupiter пишет:
как часть другой инструкции или данных (что неприемлемо)

а почему?

-----
zzz




Ранг: 23.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 19 марта 2010 17:56 · Поправил: TheNozza
· Личное сообщение · #6

Ждём профессионалов асма!
www.insidepro.com/kk/063/063r.shtml - Красивая статья по обходу DEP'а.
Цитата:
"Главное, чтобы shell-код получил управление, и он его получит!Оторвать мыщъх'у хвост, если это не так!"
LPVOID VirtualAlloc
(
LPVOID lpAddress,
SIZE_T dwSize,
WORD flAllocationType,
DWORD flProtect
);


lpAddress Указатель на передаваемый регион памяти
dwSize Размер передаваемого региона
flAllocationType Тип запроса, MEM_COMMIT (1000h) - передача памяти
flProtect Атрибуты защиты, PAGE_EXECUTE_READWRITE (40h) - rwx

Что же великий и всемогущий Мыщъх недоговаривает или преднамеренно скрывает как положить шеллкодом напрмер четвёртый параметр функции VirtualAlloc flProtect (40h значение) в переполненный буфер при вкл. DEPe! (00000040h) Та же тема получится, только байтов нулевых поболее будет.
Я просто другую функцию юзаю, тема та же - размещение шеллкодом в буфере нулевых байтов(байта) при включенном DEPe
Не ради критики, а ради божественного света знаний!



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 19 марта 2010 19:48 · Поправил: _ruzmaz_
· Личное сообщение · #7

TheNozza пишет:
Что же великий и всемогущий Мыщъх недоговаривает или преднамеренно скрывает как положить шеллкодом напрмер четвёртый параметр функции VirtualAlloc flProtect (40h значение) в переполненный буфер при вкл. DEPe! (00000040h) Та же тема получится, только байтов нулевых поболее будет.

судя по мсдн, в параметре flProtect учитывается не более чем 11 первых бит (так ли это на самом деле?), остальное может быть и не нулевым
// проверил чуть позже, не так))) -> GetLastError = 87

так или иначе, там можно толкнуть как 6A 40
не совсем та же тема)

Jupiter пишет:
... (что неприемлемо)

почему)?

TheNozza пишет:
И последнее если кто-то знает хотя бы примерный адрес расположения инструкции (JMP ESP или CALL ESP в дллках SP2 или хотя бы название библиотеки напишите ... )

ну в кернел32 в сп2 и сп3 в MoveFileWithProgressW есть джамп на cmp edi, 0C00000D4h которая содержит в себе FF D4 (call esp)



Ранг: 23.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 19 марта 2010 20:22 · Поправил: Модератор
· Личное сообщение · #8

Вопрос по теме нулевых байтов!И поиска достойного варианта решения проблемы! Не надо писать сколько битов учитывается,а сколько нет. Суть в другом. Зрите в корень мужики!

От модератора: сначала сам достойно задавай вопросы! Если считаешь, что тут все лохи, а ты один умный, так что ты здесь забыл? Бан на 3 дня.




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 19 марта 2010 20:35
· Личное сообщение · #9

упс.. мну бы забанил...

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 19 марта 2010 21:33
· Личное сообщение · #10

Упс... мну забанил...




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 19 марта 2010 21:36
· Личное сообщение · #11

TheNozza пишет:
00000040h


1 << 6 вот и всё, делов то
можно спокойно обходиться без 0

-----
EnJoy!



 eXeL@B —› Программирование —› Нулевой байт-ASM
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати