티스토리 뷰

SYSTEM/bof

LEVEL4 (goblin -> orc) : egghunter

Notchicken 2013. 7. 19. 13:13

orc.c

#include <stdio.h>

#include <stdlib.h>

extern char **environ; 

main(int argc, char *argv[])

{

char buffer[40];

int i;

 

if(argc < 2){

printf("argv error\n");

exit(0);

} 

// egghunter

for(i=0; environ[i]; i++)

memset(environ[i], 0, strlen(environ[i]));

 

if(argv[1][47] != '\xbf')

{

printf("stack is still your friend.\n");

exit(0);

} 

strcpy(buffer, argv[1]);

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

}

orc는 지금까지와 다르게 egghunter가 환경변수의 메모리값을 지우고, argv[1][47]의 값이 \xbf가 아니면 “stack is still your friend"를 출력하는 것이 있었다.

buffernop와 쉘 코드로 채우고 SFPnop로 채운다음 retbuffer의 주소를 넣어 공격하기로 했다.

 

우선, orc.c를 복사하여 printf("%x\n", buffer);를 추가하여 buffer의 주소를 찾았다.

buffer 어딘가의 주소 : bffffac0

 

buffer의 주소를 알아내었으니 공격.

buffer의 앞(24byte)\x90으로 채운 뒤, 16byte의 쉘코드를 넣어 buffer40byte를 채운다. 그 다음 SFP\x90으로 채우고 찾은 buffer의 주소 \xc0\xfa\xff\xbfret에 넣어 공격하였다.

 

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