NITIC CTF: Write up
web
82
flag.txtが渡されます。
先頭に
data:image/jpeg;base64
と書かれていることから画像データがbase64でエンコードされていると推測できるのでデコードします。
% cat data.txt | base64 -d > flag.jpg
PPC
prime_factorization
そこらへんにあるサイトで因数分解をしてもらうだけです。
CRYPTO
shift_only
暗号化された文字列と暗号化につかわれたプログラムが渡されます。
from os import environ flag = environ["FLAG"] format = environ["FORMAT"] shift_table = "abcdefghijklmnopqrstuvwxyz0123456789{}_" def encrypt(text: str, shift: int) -> str: assert 0 <= shift <= 9 res = "" for c in text: res += shift_table[(shift_table.index(c)+shift)%len(shift_table)] return str(shift) + res for shift in format: flag = encrypt(flag, int(shift)) with open("encrypted.flag", "w") as f: f.write(flag)
encrypt関数は引数のshift文だけtextをずらして、ずらした数とずらした文章をくっつけて返す関数のようです。
つまり、文字列の先頭にいくつずらしたかが書いてあるのでdecryptするような関数を用意すれば復号化できそうです。ただしformatの内容がみえないので何回暗号化を繰り返したかはわからないので適当にループさせます。
def decrypt(text,shift): res = '' for c in text: res += shift_table[(shift_table.index(c)+shift)%len(shift_table)] return str(shift) + res enc = "6}bceijnob9h9303h6yg896h0g896h0g896h01b40g896hz" while True: shift = int(tmp[0]) ans = decrypt(enc,shift) print(ans) tmp = ans if 'ctf' in tmp: break
$ python3 encrypt_flag.py 6_ehikoptuhcnc969n_4mbc_n6mbc_n6mbc_n67h{6mbc_n5 6_fknoquvz0nitic_ctf{shift_shift_shift_and_shift}
MISC
cha1n
$ ./c.sh | ./h.sh | ./a.sh | ./1.sh | ./n.sh nitic_ctf{cha1n_cha1n_cha1n_cha1n_cha1n_5combo}
Reversing
Fortran
適当にstringsつかったらありました。
$ strings problem.exe | grep nitic nitic_ctf{No_FORTRAN_Yes_Fortran}
Forensic
anim
flagという名前のファイルが渡されます。
$ file flag flag: Microsoft PowerPoint 2007+ foremost flag Processing: flag |foundat=_rels/.rels �(� foundat=ppt/presentation.xml���n� ��'�,n'��߉�TM�L�2)j�`6i�b� *|
出力されたoutputディレクトリの中身をみてみるとflagがありました。
Recon
Dangerous Twitter
Twitterをみる。