#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() 함수가 실행될 것이다.
exit함수 got 주소와 hello 함수 주소를 구했다.
format3번 문제처럼 2byte씩 나눠서 exit함수 got값을 hello 주소로 덮어보자.
성공!