TheNozza
19.03.2010, 19:31
Уважаемые специалисты асма, подскажите пожалуйста по следующему вопросу. Самому сообразить не удалось.
Тут нужен опыт и закалка. Которые,надеюсь преобрету с годами.
Вообщем к делу!
Исследуется уязвимость переполнения буфера,расположенного в стековом кадре.
Hight addr EIP EBP С Т Е К О В Ы Й К А Д Р ......аргументы функции2 EIP EBP .................. Low addr
...................................\buf before overflow \---------------------->-\ buf after overflow \
Функция2 так красиво копирует локальную переменную стекового кадра функции1(В реале конечно всё намного сложнее,так устроен мир,но схемка отражает суть вопроса) .
Сам вопрос:
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'а), отточка шеллкодов,написание эксплойтов. (По моему мнению - существенная разница между написанием программы и шеллкода, шеллкод скорее не пишется, а точится [синоним - подгоняется к своему идеалу методом бесконечных проб и ошибок,доводится до совершенства!]Отточенный шеллкод-это красота, совершенство,которое не встретишь реальном мире,предмет гордости,сокровище,заключё нное в объёме каких-то нескольких сотен байт.Как раз тот случай когда поражает не объём, а глубина.)
Ждём профессионалов асма!
http://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
Не ради критики, а ради божественного света знаний!
Подскажите молодёжи!
Тут нужен опыт и закалка. Которые,надеюсь преобрету с годами.
Вообщем к делу!
Исследуется уязвимость переполнения буфера,расположенного в стековом кадре.
Hight addr EIP EBP С Т Е К О В Ы Й К А Д Р ......аргументы функции2 EIP EBP .................. Low addr
...................................\buf before overflow \---------------------->-\ buf after overflow \
Функция2 так красиво копирует локальную переменную стекового кадра функции1(В реале конечно всё намного сложнее,так устроен мир,но схемка отражает суть вопроса) .
Сам вопрос:
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'а), отточка шеллкодов,написание эксплойтов. (По моему мнению - существенная разница между написанием программы и шеллкода, шеллкод скорее не пишется, а точится [синоним - подгоняется к своему идеалу методом бесконечных проб и ошибок,доводится до совершенства!]Отточенный шеллкод-это красота, совершенство,которое не встретишь реальном мире,предмет гордости,сокровище,заключё нное в объёме каких-то нескольких сотен байт.Как раз тот случай когда поражает не объём, а глубина.)
Ждём профессионалов асма!
http://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
Не ради критики, а ради божественного света знаний!
Подскажите молодёжи!