問題
与えられたプログラムを実行して,flag.txtの中身を出力させます.
解法
そのまま実行すると,権限がないのでダメだと言われます.
ソースコードを見てみると,以下のような行があります.
absolutely-relative.c
15: file = fopen("/problems/absolutely-relative_1_15eb86fcf5d05ec169cc417d24e02c87/flag.txt" , "r");
21: file = fopen( "./permission.txt" , "r");
30: if (!strncmp(permission, yes, yes_len)) {
permission.txt を読んで,中にyesと書かれていれば,flag.txtを読み込めるらしい.
しかし,プログラムを実行するディレクトリでは新たにファイルを作成することができません.
ここで,permission.txt が相対パスで書かれていることに注目します.
つまり,ファイルを作成可能なディレクトリからプログラムを実行すればいいわけです.
ホームディレクトリに移動し,権限ファイルを作成して,プログラムを実行したらフラグを獲得できました.
$ cd ~
$ echo "yes" > permission.txt
$ /problems/absolutely-relative_1_15eb86fcf5d05ec169cc417d24e02c87/absolutely-relative
(略)