Выполнение кода в данных. freebsd.

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

  1. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Хочу заставить работать пример из книги "Искусство взлома и защиты систем", он для linux и там все работает.
    В freebsd shellcode нормально получает управление, но там:
    label1: jmp label3
    label2: pop esi
    .... ; здесь вызов execv для запуска шелла, но до него дело не доходит
    ....
    label3: call label2 : и при попытке этого вызова, программа получает SIGSYS (Nonexistant system call)

    Атрибуты секции .data меняю руками на выполняемые.

    Код (Text):
    1. /*
    2.  *
    3.  * shell.c
    4.  *
    5.  */
    6.  
    7. char shellcode[] =
    8.     "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46" \
    9.     "\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1" \
    10.     "\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
    11.  
    12. int main() {
    13.     int *ret;
    14.     ret = (int*) &ret + 2;
    15.     (*ret) = (int)shellcode;
    16.  
    17. //return 0;
    18. }
     
  2. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Да. FreeBSD 8.0-RC1 i386
     
  3. milo

    milo New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2009
    Сообщения:
    43
    хм... а во фряхе номера системных вызовов разве совпадают с линуховыми?
     
  4. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    execv совпадает. По номеру точно, а по параметрам не знаю. Но до него не доходит.
     
  5. herm1t

    herm1t New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2004
    Сообщения:
    22
    а calling convention?
     
  6. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    herm1t
    Проверял, оставляя только прыжок и вызов обратно. Ошибка происходит именно при вызове.
     
  7. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    mprotect(,,PROT_EXEC | PROT_READ и наличие Linuxolatorа (COMPAT_LINUX, поддерживаемые ioctl src/sys/compat/linux/ найдётся здесь) для выполнения линуховых вызовов
     
  8. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    dag
    У меня не выполняется конструкция, которая расположена в секции данных вида:
    Код (Text):
    1.           jmp label2
    2. label1:
    3.           nop
    4.           nop
    5.           nop
    6. label2:
    7.          call label1
    При call label1 отладчик пишет, что программа получила SIGSYS и должна завершиться. В документации это сообщение описано как общая ошибка, ничего конкретного не означающая. Если запустить не в отладчике, зацикливания не происходит, тихо падает да и все.

    Атрибуты секции .data стоят в executable. А jmp выполняется.