티스토리 뷰

SYSTEM/bof

LEVEL12 (golem -> darkknight) : sfp

Notchicken 2013. 7. 19. 13:58

darkknight.c

 

#include <stdio.h>

#include <stdlib.h>

 

void problem_child(char *src)

{

char buffer[40];

strncpy(buffer, src, 41);

printf("%s\n", buffer);

}

 

main(int argc, char *argv[])

{

if(argc<2){

printf("argv error\n");

exit(0);

}

 

problem_child(argv[1]);

}

darkknightargv에 입력한 값의 41byte만을 buffer에 복사하였다.

40bytebuffer를 채우고 나머지 1bytebuffer 다음에 위치하는 sfp의 주소가 변경 될 것인데 어떻게 변경되는지 gdb를 이용해 확인해보았다.

buffer15bytenop25byte의 쉘코드로 채우고 나머지 1btye\xaa로 넣었더니 sfp의 주소가 bffffaaa 로 되있는 것을 볼 수 있었다.

 

 그래서 buffer의 주소를 찾은 다음 sfp의 주소를 buffer의 주소로 변경해 problem_child함수가 끝나고 돌아갈 때 buffer로 돌아가도록 하기로 하였다.

위의 gdb에서 buffer 앞부분의 어딘가의 주소가 bffffaa4였으므로 bffffaa4를 이용하기로 하였다.

주소를 내려가면서 확인한 결과 bffffa98에서 성공할 수 있었다.

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday