setodaNote CTF writeup

個人で参加しました。revとmiscを全完し5440ptで81位で終えました。

                                        f:id:Bigdrea6:20210904215745p:plain

 

初めの5日ほどで解ける問題を全て解き後は触れていませんでした。久々に参加したCTFですが、初心者向けだったので解ける問題が多くて楽しかったです。しかし、いつまでたっても初心者脱却が出来ない。

多分、全完した方々がwriteupを上げると思うので必要なさそうだけど書いておきます。

Misc

morse_one(30pt)

ファイルの中身はDBSがランダムっぽく書かれているテキスト。

結構悩んでいたけれど、これらを"."、"-"、" "の3つに置換すればいいことに気づいた。Sは一番少ないので空白で確定しているからDBを適当に割り振ってデコードするやつに投げればいい。

D -> "." 、 B -> "-" 、 S -> " "が置換の答え

cyberchefとかに落とす。

flag{VIBROPLEX}

Hash(50pt)

3つのhash値を探せばいいというものだったので、shellで次を実行する。

$ sha256sum *.txt | grep <hash>

<hash>に該当するhashを入れる

flag{hardest_logic_puzzle}

F(80pt)

問題分にBrainf*ckのコードがある。

オンラインBrainf*ckデバッガ で実行した。

flag{Don't_Use_the_F-Word!!}

magic_number(80pt)

マジックナンバーが3つ渡される。上からpng、rar、jpg。

rarは知らなかった。

flag{post_rar_light}

Stegano(100pt)

写真が渡される。stegsolve.jarでrgbの値をずらして?見ていく。

最後の部分が小さくて見つけにくかったのと、最初のlがIかよく分からなかった。(lだった)

flag{Re4l17y_1s_cReA73d_by_7h3_m1nd_rA9}

morse_zero(100pt)

これはcatだけだとZしか見えない。hexdumpすると見える。これはそれぞれゼロ幅スペース。

e2 80 8c -> "-" 、e2 80 8b -> "." 、5a(Z) -> " "

flag{ZER0_W1DTH_SPACE}

ransom_note(100pt)

写真にランサムウェアの名前がある。gandcrab

これで調べるとdecoderがあるのでそれを使って治す。

www.coveware.com

flag{unlock1ng_y0ur_d1gital_life_with0ut_paying;)}

Nothing(120pt)

catするとすごい空白ができる。whitespaceなので、これのdecoderに投げる。

Whitespace Language - Online Translator/Interpreter

flag{And_Then_There_Were_None}

i_knew_it(120pt)

これ、めっちゃ適当でちゃんとコードを見ずに解いてしまった。

最近、やったのがこれだったので適当に入れるとビンゴだった。

flag{RC4}

Redacted(150pt)

pdf -> pptxのツールを使うとうまくいけばある程度復元できる。今回はそれでうまくいった。画像を動かすと隠れているflagが出てきた。

flag{weather_balloon}

strong_password(250pt)

パスワード解析といえばJtR + hashcat。

今回はパスワードの付け方が与えられたのでルールを書いてあげればすぐに出る。あと、分かっていない年月はランダムにやらせると時間がかかると思ったからこちらで順番に指定していった。

$ hashcat -m 17210 -a 3  -o result.txt hoge.hash -1 '?l?u' '?1?1?1?s20210?d2?d?s'

pass : qYL%20210228!

展開するとflagが出てくる。

flag{And_n0w_h3re_is_my_s3cre7}

今回の問題でやっとhashcatを使いこなせた気がする。

Network

これは1問だけvcanのやつが残ってしまった。

Host(30pt)

stringsするとhost欄があった。

flag{ctf.setodanote.net}

tkys_never_die(50pt)

wiresharkでオブジェクト抽出をする。今回はhttp。

flag{a_treasure_trove}

echo_request(120pt)

icmpに絞って、通信の中身を見ていくと送信データがflagの分割内容になっている。

flag{ICMP_Tunneling_T1095}

stay_in_touch(150pt)

tcp streamを見る。この時、データはUTF-8で表示しておく。14でパスワード通知が行われている。この前の通信を見ているとzipが送られている。

バイナリ形式で送られていてこれはbase64されているので、cyberchefで復号してzip形式で保存する。展開するとflagがある。

flag{SoNtOkIhAmOuKaTaHoUmOtSuMuRuNoSa;)}

Digdig(200pt)

hexたちを文字列に治す。多分long_to_bytesで治ったと思う。

すると複数のflagのパーツが出てくる。合体させていくと次の4つが出来た。

flag{This_is_DAMMY_FLAG}
flag{Nice_try_Sorry_for_that}
flag{7h3_k3y_15_53cur17y}
flag{DNS_S3cur17y_T1071!}

上2つはなくて、下から入れていくと正解だった。

flag{DNS_S3cur17y_T1071!}

Logger(250pt)

fileでみるとこれはUSBの通信を記録したものらしい。

ぐぐると過去のwriteupがヒットしたのでそれを引用した。

github.com

flag{QWE_keyb0ard_RTY}

tkys_not_enough(250pt)

何も考えずにwiresharkで開くと開けなかった。fileコマンドでみるとデータベースとあった。とりあえずbinwalk

$ binwalk tkys_not_enough.pcap

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
535234        0x82AC2         gzip compressed data, from Unix, last modified: 1970-01-01 00:00:00 (null date)
537545        0x833C9         gzip compressed data, from Unix, last modified: 1970-01-01 00:00:00 (null date)

gzipって普段は関係ないものだと思うけど、これだけしか出てこないのはそれはそれで気持ち悪かったので抽出してみた。

$ binwalk -D=".*" tkys_not_enough.pcap

どちらもtextファイルだった。片方にflagがあった。

flag{netw0rk_shell_2000}

Web

点数が伸び悩んだ最大の原因はこれ。多分上位層みんなweb全完してるっぽい?回答者数的に。

webはほんとにわからんね。教えてくれる人がほしい。

Body(30pt)

コードを読む。

flag{Section_9}

Header(50pt)

networkからコードとか写真とかの詳細情報を見る。これのHeaderにflagがあった。

flag{Just_a_whisper}

puni_puni(80pt)

なんて調べたか忘れたけど、decoderが出てきたので使った。

punycode.jp

確か、ひとつだけうまく治らなかった気がするけどflagは取れた。

デコード後はこんな感じ。

フラグは、さん、さん、ピー、ユー、エヌ、ワイ、
シー、オー、ディー、イー、よん、よん、です.
カタカナ表記は半角英小文字に、

flag{33punycode44}

MX.Flag(150pt)

なんか解けた。コードを見ると表示されていない?写真があったのでそれを持っているURLに飛んだ。

https://ctf.setodanote.net/web007/images/favicon.png

コード?にflagがあった。

flag{Mr_Flag_hiding_in_the_favicon}

Osint

残った問題は検討がつかなかった。Osintは割と調べ方の問題な気もする。(いやでもそれは素数のやつだけか

tkys_with_love(30pt)

 C6DF6で調べると出てくる。

idyllicocean.com

flag{Symphony_of_the_Seas}

Dorks(50pt)

dorks google login.phpって調べるとヒットした。

gbhackers.com

flag{inurl:login.php}

filters_op(50pt)

from:cas_nisc since:2017-05-15 until:2017-05-16

twitterの検索欄に打つ。

flag{#WannaCrypt}

MAC(50pt)

macaddress.io

ここでもどこでもいいけど投げていく。

flag{O_U_I_Y_A}

tkys_eye_only(50pt)

天気のサイトを写した写真が渡されている。左上に座標があるからそれをgoogle mapに打つ。初め、ヒントに騙されたけど解けた。

flag{United_Nations}

MITRE(100pt)

Enterprise Techniques - attack-mitre-japan

ATT&CKの話であることは分かっていたけど上のようなflagに直結するサイトを探すのに少し時間がかかった。渡された形式通りにやっていく。flagになるのはこのTXXXXにヒットしたやつの頭文字。

flag{MITRE_ATTACK_MATLIX_THX}

Ropeway(120pt)

画像検索する。すぐに浜名湖なんちゃらが引っかかる。サイトにとぶと答えがある。けど、ここからローマ字に治すのがちょっとうまくできなくて何回か引っかかった。

flag{kanzanji}

identify

これ途中で止まってしまった。このtsuruというファイルはマルウェアらしい。そこで、virus totalとかany.runで見てみた。ここで使うのはファイルのsha256とか。どちらも引っかかって、特にany.runはいろいろあったんだけど進まなかった。

https://app.any.run/tasks/50ac34a0-c4e1-41b8-bd1f-29ec76f7164b/
https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net/

Crypto

これも2問残ったけど、暗号手法みたいなのは分かっていた。実装できず。

base64(50pt)

そのまま

flag{It's_called_base64!}

rot13(50pt)

そのまま

flag{Even_you_Brutus?}

pui_pui(80pt)

コード書いた。っていってもchrにするだけ

flag{Have_you_ever_heard_of_Hexdump?}

tkys_secret_service(120pt)

単一換字式暗号(あってる?)。サイトと辞書使って直していく。

www.net.c.dendai.ac.jp

flag{puipui_car_of_mol}

lets_bake(150pt)

与えられたrecipeはbase64されている。ただ、これ一気にdecodeにほりこむとエラーが吐かれるので分けて送る。=があるからそこで分割するとうまくいった。

From_Base64('A-Za-z0-9+/=',true)

From_Hex('None')

Fork('%','_',false)

RC4({'option':'UTF8','string':'chef'},'Latin1','Latin1')

あとは、この通りにしてencodeされたflagを投げる。

flag{hello_baked_cipher}

vul_rsa_01(200pt)

普通のrsa。いつも使っているコードを使いまわした。

import gmpy2,binascii

n = 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257
e = 65537
p = 3058517013146002381763962882964790715736519
q = 4372642466716249946441875327733923056149624303
c = 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335

d = gmpy2.invert(e,(p-1)*(q-1))

m = pow(c,d,n)

flag = binascii.unhexlify(format(m, 'x')).decode()

print("FLAG: {}".format(flag))

flag{weak_rsa_can_be_decrypted!}

vul_rsa_02

rsa big eって調べるといろいろヒットした。実装力と理解力がなくて諦めた。

WEARECIA

EMUFPHZLをたまたま切り出して調べると切り出し方がよくてヒットした。

kryptos sculpture cipherみたいなやつっぽくていろいろ記事出てきたけど、こちらも諦めた。

Rev

全完。勉強になる問題もあった。

Hello_World(50pt)

exe。ただ実行するとだめと言われる。stringsで見てみるとflagという入力を待っている。

$ wine helloworld.exe flag

flag{free_fair_and_secure_cyberspace}

ELF(80pt)

ヘッダがいじられている。7f 45 4c 46に修正。実行

flag{run_makiba}

Passcode(120pt)

elf。実行するとpassを求められる。ghidraで見てみる。

strcmpで20150109と比較しているのが分かる。

flag{20150109}

Passcode2(150pt)

elf。ghidraでみると条件分岐が多いので、flagが出力されるところから上がって見ていく。passの長さは0xb。この下のwhile文を見る。

入力したpassと内部のデータ^0x2aを比較していっている。なので、この内部データを持ってきてやればいい。

comparison_char = [0x18, 0x1f, 0x04, 0x79, 0x4f, 0x5a, 0x04, 0x18, 0x1a, 0x1b, 0x1e]

for i in comparison_char:
    print(chr(i^0x2a),end='')

flag{25.Sep.2014}

to_analyze(200pt)

.NETなのでC#。dnspyとかで解析する。

C#の配列の使い方を知らなくて、困ったけどなんとなくで解いた。

上からその配列に対していろんな処理をしている。これをコピーして実行していけばいい。

array=[65,127,89,80,182,160,183,182,89,118,119,116,177,189,177]
array2=[i^35 for i in array]
for i in range(len(array2)):
    if array2[i]==107 or array2[i]==108 or array2[i]==102 or array2[i]==117 or array2[i]==98:
        array2[i]=array2[i]+3
array4=[i^21 for i in array2]
array5=[i-32 for i in array4]
ans=[i^19 for i in array5]

print(ans)

for i in ans:
    print(chr(i),end="")
#[67, 58, 92, 85, 115, 101, 114, 115, 92, 51, 50, 49, 116, 120, 116]
#C:\Users\321txt
array=[67, 58, 92, 85, 115, 101, 114, 115, 92, 51, 50, 49, 116, 120, 116]
new_array=[9,37,48,34,41,61,199,49,220,63,115,59,220,200,46,115,57,220,214,
50,53,46,47,37,124,62,9]
array2=[i^array[12] for i in new_array]
array3=[i^array[8] for i in array2]
array4=[i^array[3] for i in array3]
array5=[i^35 for i in array4]

for i in range(len(array5)):
    if array5[i]==107 or array5[i]==108 or array5[i]==110 or array5[i]==119 or array5[i]==99 or array5[i]==111 or array5[i]==97 or array5[i]==101 or array5[i]==112 or array5[i]==103 or array5[i]==113:
        array5[i]=array5[i]+3
array7=[i^21 for i in array5]
array8=[i-32 for i in array7]
ans=[i^40 for i in array8]

print(ans)

for i in ans:
    print(chr(i),end="")
#[10, 102, 108, 97, 103, 123, 68, 111, 95, 121, 48, 117, 95, 75, 110, 48, 119, 95, 85, 114, 115, 110, 105, 102, 63, 125, 10]
#flag{Do_y0u_Kn0w_Ursnif?}

flag{Do_y0u_Kn0w_Ursnif?}

Forensic

paint_flag(50pt)

docx、pptxはzipにして展開できる。

展開してやると、word/mediaにflag.pngというファイルが。

flag{What_m4tters_is_inside;)}

Mail(50pt)

Sent-1のzipファイルをデコードして展開。

これもbase64なのでcyberchefに投げてダウンロードする。

flag{You've_clearly_done_a_good_job_there!!}

Deletedfile(80pt)

FTK imagerでunallocated spaceを見る。

0005が答えのファイル。

flag{nosce_te_ipsum}

Timeline(100pt)

メモが少なすぎて思い出せないんだけど

WindowsTimelineparser.exeっていうツールを使ってできたっぽい。

なんでこのツールにたどり着いたんだろう。

flag{Th3_Fu7Ure_1s_N0w}

browser_db(100ot)]
$ strings stella_9s84jetw.default-release_places.sqlite | grep flag

flag{goosegoosego}

MFT(100pt)

MFTECmd.exeというツールを使う。

flag{kimitsu.zip}

tkys_another_day(100pt)

apngというアニメーションの写真。

apngdisというツールを使うとできた。複数の写真が作成され。繋げる。

flag{a_fake_illness_is_the_most_serious_disease_f5ab7}

TITLE(120pt)

この問題はずっと使いたかったツールが使えたので楽しかった。

画像のサイズを1280✕1280に変更する。すると一部分のQRコードが見える。これは次を使うとできる。

github.com

flag{Y0u_h4ve_w1tnessed_t00_much}

unallocated space(150pt)

壊れているファイルが渡される。

$ parted unallocated_space
(parted)rescue
start : 0x23303fcc
end   : 0x25000000

これで修復できる。たまたまpartedというツールを見つけた。startはfileコマンドで出てきた値を、endは適当に入れると治った。

あとは修復できたのFTK Imagerに食わせる。rootを見るとflagに関する動画があったので、抽出して見る。

flag{file_carving_gogo}

Programing

これ、サーバーでやるやつ使えるものが少なくてどうやるのか全く分からなかった。なので、手元でできる2もんは解けた。

ZZZIPPP(80pt)

コード書く。

import os
import time
num=1000
for i in range(1000):
    target=num-i
    os.system('unzip flag{}.zip'.format(target))
    time.sleep(2)

なんか、sleep挟まないとエラーが出た(それで挟んでいると思う)。

flag{loop-zip-1989-zip-loop}

EZZZIPPP(150pt)

コード書く。

import os
num=1000
for i in range(1000):
    pass_data = open("pass.txt", "r")
    pass_f = pass_data.read()
    pass_data.close()
    os.system('rm pass.txt')
    target=num-i
    os.system('unzip -P {} flag{}.zip'.format(pass_f.replace('\n',''),target))

flag{bdf574f15645df736df13daef06128b8}

Pwn

なんも分からなかった。

tkys_let_die(100pt)

gateをopenにすればいい。

AAAAAAAAAAAAAAAAAAAAAAAAAAopen

を投げればうまく行く。

flag{Alohomora}

 

最後に

楽しかった。後輩とかやっていたのかな。割と高専セキュコンで出てきそうなレベルな気がした。どうだろう