gcc macro & std vulnerability

https://dreamhack.io/wargame/challenges/749?writeup_page=3

이 문제를 풀면서 얻은 점들이다.

일단 첫번째로 gcc 에는 -D 옵션이 존재한다. 이는 매크로를 지정할 수 있는 옵션이다.

Python
$ gcc a.c -D'if(x)=if(1)'
$ cat flag.txt

이런식으로 if 문을 매크로로 지정해 아예 항상 실행시킬 수도 있고

Python
gcc a.c -D v2="v2=v2+=v1"

이런식으로 변수를 매크로로 지정해서 실행을 바꿀 수도 있다.

Python
echo -e '
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>

int main()
{
    chmod("/flag.txt", 07777);
}' |  gcc -o a.out -x c -

이런식으로 gcc -o a.out -x c - 이런식으로 -x 옵션으로 c 언어 파일임을 인지시키고 - 으로 입력을 표준 출력으로 받을 수 도 있다.