format4

oogu ㅣ 2023. 1. 24. 13:48

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

int target;

void hello()
{
  printf("code execution redirected! you win\n");
  _exit(1);
}

void vuln()
{
  char buffer[512];

  fgets(buffer, sizeof(buffer), stdin);

  printf(buffer);

  exit(1);   
}

int main(int argc, char **argv)
{
  vuln();
}

printf(buffer) -> fsb가 발생한다.

hello() 실행되어야 하는데 exit(1); 때문에 프로그램이 종료된다.

exit() 함수의 got 값을 hello() 함수 주소로 바꾸면 exit()이 실행될 때, hello() 함수가 실행될 것이다.

[그림 1-1]

exit함수 got 주소와 hello 함수 주소를 구했다.

format3번 문제처럼 2byte씩 나눠서 exit함수 got값을 hello 주소로 덮어보자.

[그림 1-2]
[그림 1-3]

성공!

'protostar' 카테고리의 다른 글

heap1  (0) 2023.01.27
heap00  (0) 2023.01.27
format3  (0) 2023.01.24
format2  (0) 2023.01.24
format0  (0) 2023.01.24