본문 바로가기

system

[protostar]stack3.c

반응형

문제

Stack3 looks at environment variables, and how they can be set, and overwriting function pointers stored on the stack (as a prelude to overwriting the saved EIP)

Hints:
both gdb and objdump is your friend you determining where the win() function lies in memory.

This level is at /opt/protostar/bin/stack3

stack3는 환경변수와 그들이 어떻게 set되는지 본다.

그리고 스택에 저장된 함수 포인터를 오버라이팅하는 것을 본다.

 

힌트: 메모리에 win()가 있을 때 gdb와 objdump는 당신이 결정하는 데에 있어선, 당신의 친구이다.

 

stack3.c

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

void win()
{
  printf("code flow successfully changed\n");
}

int main(int argc, char **argv)
{
  volatile int (*fp)();
  char buffer[64];

  fp = 0;

  gets(buffer);

  if(fp) {
      printf("calling function pointer, jumping to 0x%08x\n", fp);
      fp();
  }
}

스택의 구조를 보면, fp위에 버퍼가 있음을 알 수 있다.

 

일단 알려준 위치로 가서 stack3를 실행해본다.

뭐가 나오진 않는다.

힌트대로 objdump를 해본다.

그럼 init, main, win 등등 다양한 함수를 확인할 수 있다.

 

일단 win을 봐본다.

win에서 24 84 04 08 가 리틀엔디안 형태로 주소임을 확인했다.

이제 버퍼를 채워주고 win함수로 이동하게 한다.

반응형

'system' 카테고리의 다른 글

[protostar]stack6.c  (0) 2020.11.02
[protostar]stack4.c  (0) 2020.09.24
[protostar]stack0  (0) 2020.09.22
[protostar]stack1.c  (0) 2020.09.22
[protostar]stack2  (0) 2020.09.17