문제풀이/시스템해킹

[dreamhack] Return Address Overwrite 문제 풀이

Goblebin 2024. 4. 29. 11:36
반응형

문제 코드는 아래와 같다.

// Name: rao.c
// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie

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

void init() {
  setvbuf(stdin, 0, 2, 0);
  setvbuf(stdout, 0, 2, 0);
}

void get_shell() {
  char *cmd = "/bin/sh";
  char *args[] = {cmd, NULL};

  execve(cmd, args, NULL);
}

int main() {
  char buf[0x28];

  init();

  printf("Input: ");
  scanf("%s", buf);

  return 0;
}

 

메인 함수에서 리턴 주소를 get_shell 주소로 변환해주면 간단하게 익스플로잇 할 수 있는 듯 하다.

 

 

칼리로 확인했을 때, sub rsp 0x30으로 0x30만큼 공간을 만든다. 그리고 0x38만큼 떨어진 위치에 리턴 주소가 있는 듯 하니 이 부분을 get_shell 주소로 바꿔주면 된다.

 

처음 작성한 쉘코드

 

e.symbols 부분에서 오류가 난다. (대괄호로 써야한다.)

수정한 코드
실행 결과

드림핵에서 알려주는 예제 코드를 보니 0x30, 0x8로 나누어서 값을 넣는 것을 확인했고, 코드를 조금 수정했다.(sendlineafter 함수가 안 된다...)

 

반응형