티스토리 뷰

wolfman.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);

 

// buffer hunter

memset(buffer, 0, 40);

}

wolfmanorc처럼 환경변수의 메모리를 비우고 argv[1][47]의 값이 \xbf여야 하면서 buffer의 메모리를 비웠다.

쉘 코드를 어디에 넣을지 생각하다 argv[2]에 쉘 코드를 넣고 retargv[2]의 주소를 넣어 공격해보기로 했다.

 

우선, argv[2]의 주소를 찾아보았다.

argv[1]bufferSFPnop를 채우고 if조건을 채우기 위해 ret\xbf를 채운다.

그 다음 argv[2]perl을 이용해 쉘 코드를 넣는다.

 

argv[2]의 주소 : bffffc57

 다음 argv[1]retargv[2]의 주소인 bffffc57를 넣어 공격한다.

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