переполнение буфера

Тема в разделе "WASM.BEGINNERS", создана пользователем Rodin, 5 апр 2009.

  1. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Не понимаю как исполнить мой код при переполнении буфера. Например есть такой простой код:

    Код (Text):
    1. void problem_function (char* big_str)
    2. {
    3.     char small_str[8];
    4.     strcpy(small_str, big_str);
    5. }
    6.  
    7. int main(int argc, char *argv[])
    8. {
    9.     if (argc < 2)
    10.     {
    11.         printf("usage: %s string\n", argv[0]);
    12.         return 1;
    13.     }
    14.     problem_function (argv[1]);
    15.     return 0;
    16. }
    Я передаю строчку большой длины и перезаписываю адрес возврата в main, допустим в строке есть и сам код. Но одкуда я узнаю eip моего кода при построении строки? Также смущает, что атакуемая прога упадет, что заметно.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Используюя переполнение буфера, ты применяешь его на заранее известной программе. Тебе надо найти в этой программе такое сочетаение байт, которое составило бы команду jmp esp. Это могут быть даже байты из заголовка. Потом просто статически прописать адрес этой команды вместо адреса возврата. С большой долей вероятности ты прыгнешь в стек на свой шеллкод. А то, что программа упадет - ты ведь можешь сделать корректный ExitProcess или, если код в отдельном треде, ExitThread. А вообще да, такой недостаток существует
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    MSoft
    так в винде код в стеке не выполняется
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а где ж он тогда выполняется? :))) все переполнение стека основано на том, чтобы заменить адрес возврата и прыгнуть на свой код, который в локальном буфере прописан. Разве нет? Деп работает только в хр сп3, 2к8 и висте... А в хп сп2 нет! Да и названные ос под большим вопросом - пробивают же их как-то
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в sp2 есть деп.
    только обычно его не юзают.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    я и не говорю, что его нет
    просто в хр сп2 можно на него не обращать внимания (по крайней мере по умолчанию)
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MSoft
    Как это деп в хрю не работает ?
    _security_check_cookie/__report_gsfailure во всех версиях есть. Также как и в страницах стека запрещено исполнение кода. Так откуда вы взяли что его нет этого механизма ?
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    повторюсь еще раз - я не говорил, что его нет. Но в ХП СП2 можно выполнить код на странице без аттрибутов исполнения. Кроме непосредственно собственного опыта скажу, что мой упаковщик работал нормально во всех осях, а в перечисленных (см. пост 4) падал! Как только я добавил VirtualProtect, все заработало и на них. НО на ХП СП2 и ниже и без VirtualProtect'а у всех моих знакомых, которые пользовались моим упаковщиком, все прекрасно работало. Собссно исходя из этого я и сделал такой вывод
     
  9. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    м.. и в самом деле код в стеке выполняется (xpsp2)
    Код (Text):
    1. format PE
    2.  
    3. virtual at 0
    4.         push _exit
    5.         retn
    6.         align 4
    7.         load c1 dword from 0
    8.         load c2 dword from 4
    9. end virtual
    10.  
    11.         pushd c2
    12.         pushd c1
    13.         jmp esp
    14. _exit:
    15.         pop eax
    16.         pop eax
    17.         xor eax,eax
    18.         ret
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MSoft
    Ну попробуй скопируй в стек код и исполни его там, не изменяя атрибуты страниц. Когда у меня была XPSP2 и я это пытался исполнить возникало исключение.
    Чтото я сомневаюсь что код у товарища выше работает, хотя возможно хз. Но полюбому в критических функциях используется проверка куков, так что переписать стек весьма проблемно.
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Разумеется работает. Да и по большому счёту без NX/XD никакого особо надёжного DEP'а быть не может.
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    м?
    DEP есть, однако по дефолту он вырублен.
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Свойства системы -> Дополнительно -> Быстродействие -> Предотвращение выполнения данных.
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    когда я сказал "нет", я имел ввиду "нет, не работае", а не "нет, он отсутствует". Я не знаю почему он не работает - отключен по дефолту или поломался, но такое явление имеет место быть. Собсно, ты ж мои слова и подтвердил только что
     
  15. _int2e_

    _int2e_ New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    124
    Код (Text):
    1. sub esp, 4
    2. mov byte ptr [esp], 0xC3
    3. mov eax, esp
    4. call eax
    5. add esp, 4
    6.  
    7. push 0
    8. call ExitProcess
    ХР sp2 ru professional - код отработал без ошибок и варнингов
     
  16. vasia

    vasia New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2009
    Сообщения:
    9
    Конечно, работает. Для нормального функционирования механизма запрета выполения кода в некоторых участках памяти нужна поддержка не только ОС, но и процессора - биты NX/XD.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У меня сейчас тоже работает XPSP3. И без разницы включена ли аппаратная защита, так как моё железо не поддерживает это. Раньше я использовал для некоторых обработчиков модель возврата, при которой Ret и есчо несколько инструкций исполнялисьв стеке. При тесте у некоторых моих друзей это работало, у других возникало исключение при передаче управления на стек и в дальнейшем я от этого отказался, так как не универсальный механизм. Более того, DEP это не только защита страницы от исполнения, это совокупность механизмов, предотвращающих исполнение кода, в непредназначенных для этого местах. Это аппаратная защита, атрибуты страниц, проверки куков в стеке и пр., нельзя учитывать лишь толькоаппаратную защиту.
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    vasia
    Где-то я уже это читал.
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Не поленился перезагрузиться чтобы включить DEP (XP home SP3) - пример _int2e_ начал падать с DEP предупреждением, зато перестал работать Punto Switcher - безо всяких предупреждений - иконка в трее висит, меню всплывает, а переключать не хочет ни автоматически, ни вручную :))
     
  20. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    l_inc
    +11111111