литература

Тема в разделе "WASM.ASSEMBLER", создана пользователем Dimarik__, 9 июл 2011.

  1. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    Очень много слышал про атаку, связанную с переполнением буфера. Подскажите, пожалуйста, в каких источниках максимально подробно и с примерами это всё описано. Заранее спасибо.
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Например The Shellcoder`s Handbook.
    Ну и в инете очень много инфы по этой теме. Достаточно заюзать гугл (вбиваем в поиск "buffer overflow how to").
     
  3. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Джон Эриксон "Хакинг, исскуство эксплоита"
    Иван Скляров "Программирование боевого софта под линукс"
     
  4. Dimarik__

    Dimarik__ New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2011
    Сообщения:
    58
    Код (Text):
    1. #include <Windows.h>
    2.  
    3. //прототипы
    4. void show_array(int arrlen, char array[]);
    5.  
    6. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int cmdShow)
    7. {
    8.          char mystr[] = "111112222233333444445555566666777778"
    9.              "\x01\x38\x14\x13";//адрес вызова функции "после переполнения" 01381413
    10.  
    11.     show_array(51, mystr);
    12.  
    13.     MessageBox(NULL, "до переполнения", "до переполнения", MB_OK);
    14.     MessageBox(NULL, "после переполнения", "после переполнения", MB_OK);
    15.     return 0;
    16. }
    17.  
    18. void show_array(int arrlen, char array[])
    19. {
    20.     char buffer[32];
    21.     int i;
    22.  
    23.     for (i = 0; i < arrlen; i++) buffer[i] = array[i];
    24.  
    25. }
    Нужно при помощи переполнения стека проскочить вызов MessageBox "до переполнения" и сразу вызвать MessageBox "после переполнения".
    функция Call MessageBox (посмотрел в OllyDbg) находится по адресу 01381413
    Самое главное, выскакивает не ошибка "обращение по несуществующему адресу", а просто Windows 7 выдаёт сообщение о том что прекращена работа программы. Предлагает отладку, поиск решений в Интернете и закрыть программу.
    Я не так адрес функции передал?
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Dimarik__
    Брось ты это дело. Написание шеллов требуют понимания и упорства, а не упрощения себе жизни. Твой исходник ПО-РАЗНОМУ компилируется - например в VS2005 в релизе вообще нет никакого затирания стека и выводятся оба сообщения. В режиме дебаг еще хитрее - с вероятностью 1/2(приблизительно) либо ловится затирание стека, либо память не может быть 'read'.
    Кстати адрес вызова нужно задавать задом-наперед "\0x13\0x14\0x38\0x01"
    Ну и народ утверждает, что в 7-ке чтобы жизнь не казалась медом адрес загрузки меняется и вы могли просто не попасть туда, куда попадаете под отладчиком.
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Dimarik__
    Соглашаясь с valterg добавлю, что еще вам стоит поизучать ассемблер. Иначе я не понимаю, зачем в разделе по WASM.ASSEMBLER, вы приводите код на Си.