Дана задачка. #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 , но что с ним потом делать?
shtoosha 2. Правила обязательные для исполнения. 2.5 Запрещается помещение одного и того же или похожих сообщений в нескольких экземплярах, в одной или разных темах форума. Вплоть до бана...
Это не значит, что на правила форума у тебя двух минут не нашлось. Здесь 22 раздела -- толкай свои сообщения в каждый Хочешь, чтобы посмеялись -- в WASM.HEAP Если есть слова *NIX -- в WASM.UNIX Если есть слова "эксплоит", "переполнение буфера" -- в WASM.VIROLOGY Хочешь, чтобы быстро ответили и написали программу -- в WASM.COMMERCE (но за твои зеленые) Хочешь, чтобы объясняли -- в WASM.BEGINNERS, но писать за тебя в этом разделе никто не будет
ок, спасибо! писать за меня не надо. Мне надо -то,узнать, где GOT расположен и как перезаписывать адрес принтф
shtoosha Я думаю, тебя должна интересовать не GOT, а PLT. Поиск в google по "finding PLT linux" дает много хороших результатов, например этот: http://www.codeproject.com/KB/cpp/shared_object_injection_1.aspx#elf_load_plt . Т.к. сам я статью еще не прочитал, больше пока сказать не могу .
Автору - по теме. Я вот что думаю. Наверное надо: 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!
Это смотря кому. Хозяину -- долгих лет жизни. Врагу -- мучительной смерти. Как такой вопрос понять?..
очепятка. ДЕЛАЕТ. В смысле взялся вот откуда-то с сайта. А посмотреть, то ли это, где там чего и так далее?
Можно подробнее? Какая ОС, через что пришел эксплойт, в каком виде хранится сейчас и т.д. Самое общий ответ-- взять тело эксплойта и положить в дизассемблер.