LoginSignup
0
0

More than 3 years have passed since last update.

CyBRICS CTF 2019 write-up とわからなかったところ

Last updated at Posted at 2019-07-22

感想

2019年7月20~21日にCyBRICS CTFを(院試勉強そっちのけで)やりました。正直全然できなかったです順位は775チーム中232位でした。3問しか解いてないんですけどね。

Write-up

Mic Check

Screenshot from 2019-07-21 23-44-37.png
言う事なし。

Tone

Screenshot from 2019-07-21 23-45-02.png
YOUTUBEで番号を入力している音が聞こえて何を入力しているかという問題。問題見た瞬間コナンの映画を思い出しました。
DTMFという2つの周波数で番号を認識しているやつです。その2つの周波数が分かれば良いのでUbuntuソフトウェアにあったAudacityというツールで録音しスペクトルをこんな感じで一つずつ調べていきます
Screenshot from 2019-07-21 23-56-56.png
このとき697Hz,1336Hz周辺が強く見られるので2です。2回押したらB,3回ならCって感じです。全部解析して終わり。

Caesaref

Screenshot from 2019-07-21 23-45-17.png
最初、ログイン画面のようなものが表示される。SQLインジェクションかな?とおもってユーザー名に'--を入力したらなんか入れた。
そして、入力して送信したものがそのサイトで表示されるのでXSS攻撃かなと思ったら案の定でした。
そして管理者はその内容を見てるようなのでCSRF攻撃(違ったらすいません)かな?と思い、PostBinというサイトで一時的なサーバーを取得し、

を送信。管理人がアクセスしてくれるのでクッキーを取得し、自分のブラウザのクッキーをそれに変えてアクセスすると
Screenshot from 2019-07-20 22-37-51.png
このような画面に、フラグを表示して終わり。

わからなかったもの

解けたものより解けなかったもののほうが多かったですが、今回は惜しいところまで行った気がするけどできなかったものをピックアップしました。

Sender

Screenshot from 2019-07-22 13-56-34.png
スパイの通信を覗いてみたぜ〜という内容
Screenshot from 2019-07-22 13-56-22.png
見てみるとリクエストやレスポンスが表示されてる。
下の方にあるquoted-pritableでエンコードされているやつをデコードすると
btw.
password for the archive with flag:crack0Weston88vertebracheers!
cheers!

と書かれていました。これで終わりか?と思い送信するもダメ。
次にユーザー認証している部分がbase64で暗号化されているので復号してみると
Username:fawkes
Password:Combin4t1onXXY

と書いてありましたcombinationXXYということはXXYを結合しろってことなんでしょうが、先程のflagの色んな所にXXYをくっつけてみましたがダメでした。ここで行き詰まりました。

[追記]
得られたUsernameとpasswordをもとに実際にtelnetでアクセスするとzipファイルが手に入るそうなのでpassword for archiveで解除するとflagゲット

Oldman Reverse

Screenshot from 2019-07-22 23-04-16.png
Screenshot from 2019-07-22 23-04-34.png
開くとアセンブラ言語がでてきました。実行しようとしたのでしが何故かできなかったので(型が違かったのかも)Pythonで同じ挙動をするであろうコードを書きました

string ="cp33AI9~p78f8h1UcspOtKMQbxSKdq~^0yANxbnN)d}k&6eUNr66UK7Hsk_uFSb5#9b&PjV5_8phe7C#CLc#<QSr0sb6{%NC8G|ra!YJyaG_~RfV3sw_&SW~}((_1>rh0dMzi><i6)wPgxiCzJJVd8CsGkT^p>_KXGxv1cIs1q(QwpnONOU9PtP35JJ5<hlsThB{uCs4knEJxGgzpI&u)1d{4<098KpXrLko{Tn{gY<|EjH_ez{z)j)_3t(|13Y}"
r2 = 13
for i in range(0,len(string),2):
    r1 = string[i:i+2] #mov #MSG r1
    r1_1_bin = bin(ord(r1[0])).replace("0b","")
    r1_2_bin = bin(ord(r1[1])).replace("0b","")
    if (len(r1_1_bin) < 8):
        while(len(r1_1_bin) != 8 ):
            r1_1_bin = "0"+r1_1_bin
    if (len(r1_2_bin) < 8):
        while(len(r1_2_bin) != 8):
            r1_2_bin = "0"+r1_2_bin
    r1 = r1_1_bin + r1_2_bin 
    r0 = bin(int(r1,2) + r2).replace("b","") # add r2 r1
    if (len(r0) < 16):
        while(len(r0) != 16):
            r0 = "0"+r0
    print(chr(int(r0[0:8],2))+chr(int(r0[8:16],2))) #.TTYOUT
    r2 += 829 # add #33d r2
    r2_bin = bin(r2) # clrb
    r2_bin_lat = r2_bin[-8:]
    r2 = int(r2_bin_lat,2)

本来はr3レジスタにloopの回数をカウントする数が入っているのですが、割り切れない数で減算していて(´・ω・`)って感じだったので無視しました。これを実行してもよくわからない文字列が得られたのでたぶん間違っているんだと思います。もしくはその文字列からまた何かするのだと思います。

[追記]
writeupより、このコードはpyhtonで

s="cp33AI9~p78f8h1UcspOtKMQbxSKdq~^0yANxbnN)d}k&6eUNr66UK7Hsk_uFSb5#9b&PjV5_8phe7C#CLc#<QSr0sb6{%NC8G|ra!YJyaG_~RfV3sw_&SW~}((_1>rh0dMzi><i6)wPgxiCzJJVd8CsGkT^p>_KXGxv1cIs1q(QwpnONOU9PtP35JJ5<hlsThB{uCs4knEJxGgzpI&u)1d{4<098KpXrLko{Tn{gY<|EjH_ez{z)j)_3t(|13Y}"
i=0
j=32
o=""
while j>0:
   o+=(s[i%len(s)])
   i+=33
   j-=1
print(o)

と書けるそうですが、なぜこうなるかはわかりません。。。自分でまた調べてみます。。。

Warmup

Screenshot from 2019-07-22 23-30-09.png
これはかすりもしなかったのですが面白い問題だったので書き留めます
Screenshot from 2019-07-22 23-30-21.png
開くと所々文字化けしたサイトが開かれます。最初文字化けした部分をつなぎ合わせれば何かになるのかなと思ったのですがよくわからなかったです...

[追記]文字化けはただのホントの文字化けで引っ掛け(?)でした。
正解はこのページはリダイレクトされた後にでるページでリダイレクトされる前のページを見ればわかる問題でした。よく見ればアクセスする前のURLと後のURLが異なっていたのでそれを見ればわかったかもしれないです。。。
リダイレクト前のページをみるには

curl http://45.32.148.106

です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0