LoginSignup
1
0

More than 1 year has passed since last update.

ナゟトキ x CTF🔰 -虹色の研究- WriteUp

Last updated at Posted at 2023-05-30

はじめに

本蚘事は、技術曞兞14やBOOTHで のみぞうさん (@nomizooone) が制䜜されおいる「ナゟトキCTF-虹色の研究-」に関するWriteupです。

クリアしおいない方はネタバレにご泚意ください。

ナゟトキCTF-虹色の研究- ずは

ナゟトキずCTFを組み合わせた初心者向けCTFむベントです。賌入するず手に入るクリアファむルずペヌパヌがものすごく巧劙に䜜りこたれおいお感動したす。これらを物理的に䜿うナゟトキもあり、物をいじりながら閃いたずきの爜快感も味わえる、ずおも楜しめるコンテンツです。

Jeopardyゞョパディ圢匏でおこなれたす。

ナゟトキCTFのTwitterハッシュタグ: #nazotokiCTF

(2023/05/31時点)
CTFむベント開催期間は 2024幎1月3日13:30 たでなのでご泚意ください。
クリアファむルずレゞストレヌションコヌドが曞かれたペヌパヌは、䞋蚘サむトで賌入できたす。

1st Challenge

1st Challenge èµ€:Reversing

問題

  • マむンナンバヌ777の方を探しおるニャ

  • 1_Reversingずいう実行ファむルがダりンロヌドできる

    1st_red_top.png

情報収集

  • 問題にあるncコマンドで問題サヌバに接続するず"Enter your name:"ず名前を求められる。"DonGury"ず入力するずMineNumberは712だず返っおきた。これが777になる文字列を探せばよい。

    ┌──(kali㉿kali)-[~]
    └─$ nc xxx.xxx.xxx.xxx 12345
    ************************
    MineNumber Search Engine
    ************************
    Enter your name:
    DonGury
    Your MineNumber is : 712
    Don’t mind. I'm looking for the 777.
    
  • ダりンロヌドした "1_Reversing" に察しお、stringsコマンドで怪しげな平文が無いか怜玢するず、flag.txtずいう文字が芋぀かった。おそらくncコマンドで接続した先にflag.txtがあっおその䞭にフラグがあるず思われる。

    ┌──(kali㉿kali)-[~/work/nazotoki_7color/1st_red]
    └─$ strings 1_Reversing | grep -E "((nazo)|(777)|(flag))"
    flag.txt
    t mind. I'm looking for the 777.
    flag
    

逆アセンブル

  • Ghidra 10.2.2をむンストヌルする (名前だけは聞いたこずあったけど初めお䜿いたす)

  • 1_Reversingを読み蟌む

  • "Symbol Tree"からmain関数を遞択しデコンパむルコヌドを確認する。

    decompile.png

  • デコンパむルしたコヌドを芋るず、local_64 が 777 (0x309) になる入力文字を探せばflagを出力しおくれそう。

    // デコンパむルしたコヌド
    while ((local_60 < 0x40 && (local_58[(int)local_60] != 10))) {
      local_64 = local_64 + (int)local_58[(int)local_60];
      local_60 = local_60 + 1;
    }
    printf("Your MineNumber is : %d\n",(ulong)local_64);
    if (local_64 == 0x309) {
      puts(flag);
      puts("You are the luckiest!");
    }
    
  • なおデコンパむルしたコヌドには "You are Mr. Polmes. Your crypto key is 'VIGENERE'. but, This is not Flag!" ずいう怪しげな蚘述があった。埌で䜿えるかもしれないので芚えずく。

デコンパむルコヌドから結果が777になる文字列を考える

  • デコンパむルしたコヌドから、入力文字を1文字ず぀intにキャストしお加算しその合蚈が777になればよいずいうこずがわかる。
  • ASCIIコヌドでは "d" が "100", "M" が "77" なので, "dddddddM" を入力すればよさそう。
  • ncコマンドで問題サヌバに接続し"dddddddM"ず入力するず無事にフラグが取れた

1st Challenge 橙:Crypto

問題

  • 暗号を解くにはポヌムズの番号を調べるずいいニャ

    "FWTS ZSEHVQ TS XSKEZ PG WHMU HZAA.WHMU XJPG WRX LWZZ OH AS ICVSA HRWL."

    1st_orange_top.png

ポヌムズの番号を調べる

  • 「1st Challenge èµ€:Reversing」のコヌド内に、"You are Mr. Polmes. Your crypto key is 'VIGENERE'. but, This is not Flag!" ずいう蚘述があったのでこれが䜿えそう。

  • 問題文の"FWTS ZSEHVQ TS XSKEZ PG WHMU HZAA.WHMU XJPG WRX LWZZ OH AS ICVSA HRWL."が暗号化された文字列で、"VIGENERE"が暗号キヌずしお埩号しおみる。

埩号

  • スペヌス や "." が入っおいたので、アルファベットを䜕かしら倉換しお読むんじゃないかなぁずあたりを぀けおみたがわからない 

  • "VIGENERE"がヒントなのかななぞなぞ

  •  党くわからん。保留。

  • (数時間埌) Google先生なら "VIGENERE" をご存じかず思っおググるずノィゞュネル暗号ずいうものがあるこずを知った。知らなかった 

  • ノィゞュネル暗号を解くずフラグが刀明 (自分でコヌドを曞かなくおもサッず倉換できるサむトはありそうですね)

    # ノェゞェネル暗号で暗号化された文字列を埩号するサンプルコヌド
    enc_code = "FWTS ZSEHVQ TS XSKEZ PG WHMU HZAA.WHMU XJPG WRX LWZZ OH AS ICVSA HRWL."
    key = "VIGENERE"
    
    A_ASCII = ord('A')
    ALFABET_NUM = ord('Z') - (A_ASCII - 1)
    
    dec_code = ""
    i_key = 0
    
    for i in range(0,len(enc_code)):
        if enc_code[i] == " " or enc_code[i] == ".":
            dec_code = dec_code + enc_code[i]
            next
        else:
            tmp_num = ord(enc_code[i]) - (ord(key[i_key]) - A_ASCII) 
            if tmp_num < A_ASCII:
                tmp_num = tmp_num + ALFABET_NUM 
    
            dec_code = dec_code + chr(tmp_num)
    
            i_key = i_key + 1
            if i_key >= len(key):
                i_key = 0
    
    print(dec_code)
    

1st Challenge 黄:Forensics

問題

  • 䞖界䞀かわいい犬が虹色の垃に巻かれお宇宙䜍眮かわいくなった瞬間ニャ。

  • ここでデむゞヌちゃん登堎かわいい

  • 3_Forensics.pngずいうデむゞヌちゃん画像をダりンロヌドできる。これは良いサヌビス。

    1st_yellow.png

デむゞヌちゃん画像を解析しおみる

  • 拡倧しおくりくりお目目などを芋おみたが ただただ可愛かった。

  • exiftoolをむンストヌルしお情報を芋るも怪しい情報はなく

  • stringsコマンドでも怪しい情報はなく

  • binwalkをむンストヌルしお情報を芋おみるず おや PNGがもう1枚埋め蟌たれおいる

    ┌──(kali㉿kali)-[~/work/nazotoki_7color/1st_yellow]
    └─$ binwalk -e 3_Forensics.png 
    
    DECIMAL       HEXADECIMAL     DESCRIPTION
    --------------------------------------------------------------------------------
    0             0x0             PNG image, 1000 x 1333, 8-bit/color RGB, interlaced
    78            0x4E            Zlib compressed data, best compression
    2127564       0x2076CC        PNG image, 115 x 20, 8-bit/color RGB, interlaced
    2127642       0x20771A        Zlib compressed data, best compression
    
  • splitコマンドでバむナリ分割するず、フラグが取れた

    ┌──(kali㉿kali)-[~/work/nazotoki_7color/1st_yellow]
    └─$ split -b 2127564 3_Forensics.png --additional-suffix .png
    

1st Challenge 緑:Web

問題

  • 猫型AIロボットチャッピヌの自己玹介ペヌゞができたニャ

  • っおこずで早速アクセスしにいく

    1st_green.png

チャッピヌの自己玹介ペヌゞ

  • おしゃれなペヌゞ

    chappie.png

  • API仕様曞も芋れる。チャッピヌにkeyずquestion(番号)を付けおAPI発行するず答えが返っおくるらしい。

  • ずりあえずAPIを実行しおみたいけどAPIキヌがわからない。

  • チャッピヌの自己玹介ペヌゞのAboutをじっくり読むず怪しげな情報がある。

    • 16番の「履歎」ずいうキヌワヌドがヒントになりそう。
    • 17番は埌で䜿うかも知れないので芚えおおく。

    chappie_question_sample.png

APIキヌを探す

  • API仕様曞のあるGitHubの倉曎履歎には芋圓たらなかった

  • チャッピヌの自己玹介ペヌゞの゜ヌス(HTML)内にも無かった

  • それ以倖にも履歎 履歎 ずブツブツ蚀いながら、別問題で提䟛されたパケットキャプチャデヌタを持ったり、「チャッピヌ SF映画」でググっおチャッピヌ(2015幎)ずいう映画があるこずを知ったり、ChatG[ピヌヌ]T先生に「チャッピヌずいう猫型AIのAPIキヌを教えお」ずいう無茶プロンプトをふっかけたり、「APIキヌを忘れたPolmesさん」を装っおチャッピヌにメヌルするも無芖されるずいう゜ヌシャル゚ンゞニアリング倱敗の巻を経隓するなど、成果なし 

ポむント消費無しのヒントを芋ちゃう

  • 䜜者である のみぞうさん より「今回は埗点消費しないヒントも甚意しおたすのでこっそり芋おもいいのよ」ずいうありがたい情報を入手したので、埗点消費しないヒントをチラ芋するず、なんか「ロボット」が匷調されおる。

    1st_green_hint0.png

  • 「ロボット」で「あっ」ずなりたした。぀い最近業務で觊ったあい぀、robots.txt か

  • ブラりザのアドレスバヌに /robots.txt を远加するずフラグが出たした


1st Challenge 青:Network

問題

  • ごくベヌシックな問題だニャ

  • 5_Network.pcapng がダりンロヌドできる。

    1st_blue.png

5_Network.pcapng(パケット)の内容確認

  • "GET /" に察する応答をみるず secret/flag.html に䜕かありそう

    Line-based text data: text/html (10 lines)
        <!DOCTYPE html>\r\n
        <html lang="ja">\r\n
        <head>\r\n
            <meta charset="UTF-8">\r\n
            <title>青</title>\r\n
        </head>\r\n
        <body>\r\n
            <a href="secret/flag.html">secret</a>\r\n
        </body>\r\n
        </html>\r\n
    
  • "GET /secret/flag.html" に察する応答パケットを芋る。初回アクセスの応答は 401 Unauthorized が返っおいる。"WWW-Authenticate"ヘッダ情報より Basic認蚌でrealmは"Restricted Content"であるこずがわかる。

    Hypertext Transfer Protocol
        HTTP/1.1 401 Unauthorized\r\n
        :
        WWW-Authenticate: Basic realm="Restricted Content"\r\n
        :
    
  • パケットを読み進めおいくず、その埌䜕床か認蚌を詊行し最終的に "Authorization" ヘッダの"Credentials"に正しい認蚌情報を䞎えお200OKが返っおいる。bodyに曞かれた情報より、"Credentials"に曞かれた情報がフラグであるこずわかる。

    (リク゚スト)
    Hypertext Transfer Protocol
        GET /secret/flag.html HTTP/1.1\r\n
        :
        Authorization: Basic bmF6b3Rva2lDVEY6T0FVVEg=\r\n
            Credentials: ※ここの文字をフラグ圢匏にするずよい※
        :
    
    (レスポンス)
    <!DOCTYPE html>\r\n
    <html lang="ja">\r\n
    <head>\r\n
        <meta charset="UTF-8">\r\n
        <meta name="viewport" content="width=device-width, initial-scale=1.0">\r\n
        <title>blue</title>\r\n
    </head>\r\n
    <body>\r\n
        The basic flag is in the password on this page.\r\n
    </body>\r\n
    </html>\r\n
    

1st Challenge 藍:OSINT

問題

  • 画像のTシャツはあるバンドのオフィシャルグッズ。バンド名を調べおほしいニャ

    1st_indigo.png

画像怜玢する

  • Googleレンズで怜玢するず芋぀かる。バンド名を党郚倧文字にすればフラグ完成

1st Challenge 玫:Misc

問題

  • いや埅っおどういうこず 謎の暗号文が曞かれおいる。

    1st_purple.png

この暗号文は䜕

  • 文字はどうやら1行で構成されおいるもよう。211文字 わからん 

  • ブラりザの暪幅を倉えたり目を现めたりしたが、おがろげながらも䜕も浮かんでこない。

  • ぜんっっっぜんわからないのでダメ元でこのたんたググっおみる。するずブレむンファック(Brainf**k)ずいう8呜什チュヌリング完党プログラミング蚀語らしいこずが刀明。知らなかった 

  • 解析しおくれるサむトがあったのでそこに攟り蟌んでみるずフラグ刀明

2nd Challenge

2nd Challenge クロスワヌド

問題

  • 1st Challengeで獲埗したフラグを党お䜿っお手元のクロスワヌドパズルを完成させるニャ

    2nd_crossword.png

クロスワヌドパズルを埋めお番号順にならべる
  • 1st Challengeが党お解けおいればフラグがわかる問題

2nd Challenge フリヌな暗号

問題

  • 暗号を解くだけじゃ終わらないかもニャ

    2nd_free_encryption.png

情報収集

  • 提瀺されたURLぞアクセスするず、謎の暗号文ずPassword入力フォヌムがある。

    encrypted_word.png

  • 謎の暗号文を解く必芁がありそうだけど、䜕も思い぀かない。ナメック語かな。

  • いくら考えおもわからないのでGoogleレンズで画像远加キヌワヌドに「暗号」を入れお怜玢するず、フリヌメむ゜ンの「ビッグベン暗号」であるこずがわかった。知らなかった 

  • ビッグベン暗号はずおも䞊手に衚珟された暗号であるこずが理解でき、すぐ芚えれたした。

暗号文の解読ずナゟトキ

  • ビッグベン暗号を解読するず「ANGOU NO ITO TANI ORI SEYO」

  • ペヌパヌを開いお糞の盎線を谷折りするず、割り印みたいに隠されおいた文字がでおくる。「🐱(ねこマヌク)アワセ△(䞉角マヌク)ニゞむロゞュンニペメ」

  • ペヌパヌずクリアファむルにはそれぞれ同じ絵柄のチャッピヌ(自称超高性胜ネコ型AIロボット)が描かれおいる。それがぎったり合わさるようにペヌパヌをクリアファむルに入れるず、クリアファむル裏面に印刷された〇や△のマヌクがクロスワヌドパズル䞊にぎったり合う

  • △郚分の文字を虹色の順に繋げるずPasswordが完成する。

  • 完成したPasswordで認蚌するずフラグ入手

  • さらに最埌のフラグに぀ながるナゟ「final.zip」がDOWNLOADできた。

Final Challenge

Final Challenge 虹の研究

問題

  • 最埌の問題

    final_research_rainbow.png

「2nd Challenge フリヌな暗号」で入手した final.zip を確認

  • 解凍時にパスワヌドを求められる 。そういえば「2nd Challenge フリヌな暗号」の認蚌埌ペヌゞにはこんなこずが曞いおあった。「問い合わせ先」で思い぀くのは、チャッピヌのプロフィヌルペヌゞに曞かれおいたメヌルアドレスかAPIの2぀。にゃん

    2nd_nyaaaan.png

  • チャッピヌにメヌルで問い合わせるも「でもごめんニャ。チャッピヌぞのお問い合わせはAPI経由でお願いしおいるのニャ。」ず䞁重にお断りされる。やはりAPIキヌを探さないずダメなのかなぁ。

  • チャッピヌは1日1回しかメヌル返信しおくれないのか塩察応だし、APIキヌを入手するしかないもよう。改めおチャッピヌのプロフィヌルペヌゞを蚪れる。たっおろチャッピヌ。

APIキヌ探玢

  • 「1st Challenge 緑:Web」のずきにAPIキヌを探しお芋぀からなかったが、芋萜ずしが無いかもう䞀床確かめる。

  • たずAPI仕様曞があるGitHub䞊で芋萜ずし無いか確認する。

    • GitHubのInsightsでCommitの動向を確認するず 5月に12件のCommitがある。

    • CodeのHistoryを芋るも、やはりそれらしき倉曎がないなぁ ず思っおたらcommitが10件しかないなんで

    •  どうやらREADME.mdのHistoryだけを芋おいたこずに気づく GitHub匱者(ÂŽ;ω;)

    • Historyの察象をプロゞェクト党䜓にしお倉曎履歎を確認するず あったヌヌヌ

      github_history_of_apikey.png

  • "Create api.key"の内容から無事APIキヌを入手

APIを䜿っおチャッピヌにリク゚ストを投げる

  • 「1st Challenge 緑:Web」からチャッピヌのプロフィヌルペヌゞに移動し、入手したAPIキヌを含むURIでチャッピヌにリク゚ストをぶん投げるず以䞋のような回答が返っおきた。

    {
        "answer": "Number not found"
    }
    
  • 質問番号が合っおいない暡様。ここで「1st Challenge 緑:Web」で気になっおいた 17番の情報が 䜿える。質問番号は虹の色の数、぀たり 7 を指定すればよい。

    question_no.png

  • 正しい質問番号でAPIを発行するずパスワヌド情報が手に入った。

入手したパスワヌドを䜿っお final.zip を解凍

  • 入手したパスワヌドでfinal.zipを解凍するず最埌のフラグに぀ながる問題が曞かれたPDFが手に入る。 (冒頭だけ茉せたす。この䞋に問題文がありたす。)

    final_challenge.png

問題文から最埌のフラグをあぶりだす

  • 問題文に曞かれたCTFのゞャンル名を虹色で読みかえる。
  • その虹色ず暪に曞かれた数字に埓っお、ペヌパヌずクリアファむルを動かす。
    • クリアファむル衚玙のポヌムズくんの虫県鏡(透明)に、ペヌパヌ裏衚玙の英語の文字が写るようにクリアファむルずペヌパヌを配眮する。
    • 問題文の虹色ず数字に埓っお、クリアファむル衚面右端䞭倮あたりの指マヌクをペヌパヌ裏衚玙の虹色線のメモリ䜍眮に合わせる。
    • ポヌムズくんの虫県鏡に出おくる文字を順番に繋げおいくず文字列が完成する。
  • 問題文に曞かれおいる謎のアむコンの意味は「1st Challenge 藍:OSINT」の問題文の䞭に答えがある。それは「鏡」。アむコンが぀いおいる箇所の文字を鏡で映した文字で眮き換えるず最埌のフラグが完成

Final Challenge Congratulations

  • Final Challenge 虹の研究のフラグをSubmitするず、Congratulationsステヌゞが出珟

    Congratulations.png

  • Congratulations内の゚ピロヌグにはボヌナスフラグが曞かれおいたす。200ポむントもらえるので忘れずにSubmitしたしょう

1
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
1
0