darkknight.c #include #include void problem_child(char *src) { char buffer[40]; strncpy(buffer, src, 41); printf("%s\n", buffer); } main(int argc, char *argv[]) { if(argc buffer는 15byte의 nop와 25byte의 쉘코드로 채우고 나머지 1btye는 \xaa로 넣었더니 sfp의 주소가 bffffaaa 로 되있는 것을 볼 수 있었다. 그래서 buffer의 주소를 찾은 다음 sfp의 주소를 buffer의 주소로 변경해 problem_child함수가 끝나고 돌아갈 때 buffer로 돌아가도록 하기로 하였다. 위의 gdb에서 buffer 앞부분의 어딘가의 주소가 bfff..
golem.c #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] != '\xbf') { printf("stack is still your friend.\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); // stack destroyer! memset(buffer, 0, 44); memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48)); } golem은 모든 버퍼를 다 비워..
- Total
- Today
- Yesterday