Hello World exsploit

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

  1. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Добрый вечер, пробую написать код для вывода сообщения "hello", цель научиться писать эксплойты под linux (да и под всё остальное)
    Вот код
    Код (Text):
    1. xor  eax,eax
    2. xor  ebx,ebx
    3. xor  ecx,ecx
    4. xor  edx,edx
    5. jmp short string
    6. code:
    7. mov al, 4
    8. mov bl, 1
    9. mov dl, 5
    10. pop ecx
    11. int 0x80
    12.  
    13. dec bl
    14. mov al,1
    15. int 0x80
    16.  
    17. string:
    18. call code
    19. db "hello"
    Проблема видимо в call code и последующем pop ecx ..
    После компиляции nasm hello.asm
    Запускаю через консоль созданный файл, и получаю это
    ./hello: line 1: 1�1�1�1����Ỳ�˰̀�����hello: command not found
    В чём проблема? как поправить?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Код (Text):
    1. mov al, 4
    2. mov bl, 1
    3. mov dl, 5
    Насколько я помню, для параметров используюся dword'ы. Так что надо:

    Код (Text):
    1. mov eax, 4
    2. mov ebx, 1
    3. mov edx, 5
    Предполагаю, что система 32битная.
     
  3. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    изменил код на это
    Код (Text):
    1. xor  eax,eax
    2. xor  ebx,ebx
    3. xor  ecx,ecx
    4. xor  edx,edx
    5. jmp short string
    6. code:
    7. mov eax, 4
    8. mov ebx, 1
    9. mov edx, 5
    10. pop ecx
    11. int 0x80
    12.  
    13. dec bl
    14. mov al,1
    15. int 0x80
    16.  
    17. string:
    18. call code
    19. db "hello"
    После nasm hello_2.asm
    $ ./hello_2
    bash: ./hello_2: cannot execute binary file


    =(
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    А, прошу прощения, не обратил внимания, что старшие разряды регистров чистятся до этого. Тогда не понятно в чем дело.
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    featurelles
    Неужели так трудно поисковиком воспользоваться и не задавать вопросы, которые давно уже решены.
    http://forum.codenet.ru/archive/index.php/t-35175.html
     
  6. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    valterg
    Прочёл всё по данной ссылке, и чем мне тот пост должен был помочь?
    Мне нужно получить простой бинарник, чтоб потом его считать в буфер, из другой программы и передать на него управление.
    Как сделать
    Эт я в курсе)... но надо то мне не использовать section .data ...да и не использовать ld ..и -f elf
    туплю?
     
  7. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Код программы, через котрую пытаюсь запустить бинарник
    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <sys/types.h>
    4. #include <sys/stat.h>
    5. #include <unistd.h>
    6. #include <errno.h>
    7.  
    8.  
    9.  
    10.  
    11. /* Вывод сообщения */
    12. static void croak(const char *msg)
    13. {
    14.   fprintf(stderr, "%s\n", msg);
    15.   fflush(stderr);
    16. };
    17.  
    18. /* Вывод справки по использованию */
    19. static void usage(const char *prgnam)
    20. {
    21.   printf("\nExecute code : %s -e <file-containtng-shellcode>\n", prgnam);
    22.   printf("\nConvert code : %s -p <file-containtng-shellcode>\n", prgnam);
    23.   fflush(stderr);
    24.   exit(1);
    25. };
    26.  
    27. /* Выход при ошибке */
    28. static void barf(const char *msg)
    29. {
    30.   perror(msg);
    31.   exit(1);
    32. };
    33.  
    34.  
    35.  
    36. /* Основной код */
    37. int main(int argc, char **argv)
    38. {
    39.   FILE *fp;
    40.   struct stat sbuf;
    41.   void *code, (*fptr)(void);
    42.   int arg, i, l;
    43.   int m = 15; // максимлаьное количество байтов, выводимых в одной строке
    44.   long flen; // подразумевается, длина файла 2^32
    45.  
    46.  
    47.   if(argc < 3) usage(argv[0]);
    48.   if(stat(argv[2], &sbuf)) barf("failed stat file\n");
    49.   flen = (long)sbuf.st_size;
    50.   if(!(code = malloc(flen))) barf("ошибка выделения памяти\n");
    51.   if(!(fp = fopen(argv[2], "rb"))) barf("ошибка открытия файла\n");
    52.   if(fread(code, 1, flen, fp) != flen) barf("ошибка чтения файла\n");
    53.   if(fclose(fp)) barf("ошибка закрытия файла\n");
    54.  
    55.   while((arg = getopt(argc, argv, "e:p:")) != -1)
    56.   {
    57.     switch(arg)
    58.     {
    59.       case 'e' :
    60.     croak("Вызываю код...\n");
    61.         fptr = (void (*)(void))code;
    62.     (*fptr)();
    63.         break;
    64.    
    65.       case 'p' :
    66.     printf("\n The following shellcode is %d bytes long: \n", flen);
    67.     printf("\nchar shellcode[] = \n");
    68.     l = m;
    69.     for(i=0; i<flen; ++i)
    70.     {
    71.      if(l>=m)
    72.      {
    73.        if(i) printf("\n");
    74.        printf("\t");
    75.        l=0;
    76.      };
    77.       ++l;
    78.       printf("\\x%02x", ((unsigned char *)code)[i]);
    79.     };
    80.     printf("\n\n");
    81.     break;
    82.       default: usage(argv[0]);
    83.     };
    84.   };
    85.  
    86. return 0;
    87. }
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А мы все это должны по одному слову exsploit угадать и пяти командам.

    Вот это на фига было делать? Естественно бинарник не запустится. И запутал окончательно.

    Почему выдало ?
    Явно ты куда-то залез. Смотри через отладчик gdb как твой "сплойт" отрабатывает.