обход exit(0) при написании exploita Linux

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

  1. shtoosha

    shtoosha New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    17
    Дана задачка.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>



    int main(int argc, char **argv)
    {
    char *p;
    char buffer[128];

    if (argc != 3) {
    fprintf(stderr, "enter two strings that need to be concatenated\n");
    return 1;
    }

    /* concatenate two input strings, and print them out together */
    p = buffer + strlen(argv[1]);

    strcpy(buffer, argv[1]);

    strcpy(p, argv[2]);

    fprintf(stdout, "%s\n", buffer);

    exit(0);
    }



    Нужно вызвать переолнение стека и вызвать шелл. Как делать перполнения стека , я знаю, но екзит не дает сделать нормальный ретерн.
    Мне было сказано, что надо найти адрес экзита или принта использу. objdump -R , но что с ним потом делать?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
  3. shtoosha

    shtoosha New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    17
    Просто я не знаю, куда его=(
    А очень мало времени =(
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Это не значит, что на правила форума у тебя двух минут не нашлось. Здесь 22 раздела -- толкай свои сообщения в каждый :)
    Хочешь, чтобы посмеялись -- в WASM.HEAP
    Если есть слова *NIX -- в WASM.UNIX
    Если есть слова "эксплоит", "переполнение буфера" -- в WASM.VIROLOGY
    Хочешь, чтобы быстро ответили и написали программу -- в WASM.COMMERCE (но за твои зеленые)
    Хочешь, чтобы объясняли -- в WASM.BEGINNERS, но писать за тебя в этом разделе никто не будет
     
  5. shtoosha

    shtoosha New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    17
    ок, спасибо!
    писать за меня не надо.
    Мне надо -то,узнать, где GOT расположен и как перезаписывать адрес принтф
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    shtoosha
    Я думаю, тебя должна интересовать не GOT, а PLT. Поиск в google по "finding PLT linux" дает много хороших результатов, например этот: http://www.codeproject.com/KB/cpp/shared_object_injection_1.aspx#elf_load_plt . Т.к. сам я статью еще не прочитал, больше пока сказать не могу :).
     
  7. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Автору - по теме.
    Я вот что думаю. Наверное надо:
    1) переполнить buffer строкой argv[1] и тем самым записать в указатель p нужный адрес.
    2) этим нужным адресом должен быть адрес указателя, в к-м хранится адрес функции fprintf или exit
    3) после выполнения 2-го strcpy указатель на ф-ю (fprintf или exit) надо затереть строкой argv[2], записав в качестве значения указателя адрес нашего шел-кода (н-р, первые 128 байт argv[1]).
    4) и после кала по этому указателя вместо вызова fprintf или exit получит управление наш шел-код.

    P.S. Вот за этим то и надо знать адрес указателя на ф-ю fprintf или exit!
     
  8. shtoosha

    shtoosha New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    17
    Работает, я сделала. Я тока адрес второго в глобаьной переменной!!!!
    Спасибо=)

     
  9. shtoosha

    shtoosha New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    17
    Да, а не подскажете,а как можно посмотреть,что желает шелл код?

     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Это смотря кому. Хозяину -- долгих лет жизни. Врагу -- мучительной смерти.

    Как такой вопрос понять?.. :)
     
  11. shtoosha

    shtoosha New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    17
    очепятка. ДЕЛАЕТ.

    В смысле взялся вот откуда-то с сайта. А посмотреть, то ли это, где там чего и так далее?

     
  12. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Можно подробнее? Какая ОС, через что пришел эксплойт, в каком виде хранится сейчас и т.д. Самое общий ответ-- взять тело эксплойта и положить в дизассемблер.