Winja CTF | Nullcon Berlin 2022

個人で参加して36 / 93でした。

3問解きました。

Forensic Manila:

14 solvedで198pt。

pdfが配布されます。pdfビューワーで開きますが、何もありません。ファイル形式はちゃんとpdfです。

stringsコマンド等で見ますが、flagが直接入っているわけではありませんでした。

全体を見ていると、途中で文字が反転していることに気づきます。そしてこの文字列はpngを表していることが分かります。以下のようなコードを書き、生成したファイルからbinwalkでpngを取り出しました。

with open("Manila.pdf", "rb") as f:
    dat = list(f.read())

dat = bytes(dat[::-1])

with open("hoge", "wb") as f2:
    f2.write(dat)

flagが書かれた写真でした。

flag : flag{f497dfa4fe524bdaa6d973453859df9a_You_f0UNd_7H3_undERCover_r0bber}

このCTF、全体的にflagが長いんですがここまで長いと打つのめんどくさい

Rev Mercedes Colmenar:

44 solvedで250pt。

入力を求められます。

ltrace ./Mercedes_Colmenar

とすると、分解された比較対象が見えます。 -> The_3nd_0f_tHE_rO4D

改めて実行し、先程のpassを入力します。

flag : flag{3a81fcc46d1f7b990cafab0b0e1c01ce_REvEnge_iS_4_SELf15h_@ct}

Misc Suárez:

38 solvedで179pt

pythonのコードがアセンブリっぽくなったファイルが渡されます。

内容は

  • flagがasciiコードになってる
  • indexがばらばら

これだけなので、ツールを調べてもよかったですが手元で簡単にできそうです。

c_dat = []
iti = []

flag = [""] * 54

with open("dat.txt", "r") as f:
    dat = f.read().splitlines()


for i in range(0, len(dat), 2):
    c_dat.append(int(dat[i]))
    iti.append(int(dat[i+1]))

# print(c_dat)
# print(iti)

for i in range(len(iti)):
    flag[iti[i]] = chr(c_dat[i])

print(''.join(flag))

flag : flag{5424b01a0e1a94198c5aa17de5a599b9_wA$_I7_e@5y_x0R}

Pwn Francisco Torres:

24 solvedで192pt

間に合いませんでした。

これはpwnじゃなくてmiscでしょと思うし、flag長すぎ。

ncで接続するとqrコードが渡される。これを読むとflagの一部が見れます。時間内で90文字見たんですが、まだ完成しませんでした。終わってからちょっとやりましたが100超えても完成しないので、やめました。

うーん。意図が読めない。自分のコードが悪いのかもしれませんが。

from ptrlib import *
from time import sleep

s = Socket("3.145.216.156", 41879)

# flag = []


i = 0

while True:
    if i == "見たいqrの数字":
        s.recvuntil("set.")
        sleep(2)
        with open("qr.txt", "a") as f:
            f.write(s.recv(4000).decode('utf-8'))
        break
    
    s.recvuntil("Enter the Flag you got till now >")
    
    
    s.sendline(flag[i].encode())
    print("{}, {}".format(i, flag[i]))
    sleep(1)

    i += 1

sleepを挟まないと、データが見れなかった。