banner
wuhang2003

Zwh's Blog

ZH/EN | 一个人不在计算机专业却时不时就想折腾计算机相关东西的咸鱼

ハッカーゲーム 2024 をプレイしましょう

前言#

盼望着,盼望着,一年一度の网安原神 hackergame 搜索技術小考がついにやってきました。今年の入門問題は昨年より少し少なく、1k7 しか取得できませんでした。非コンピュータ専攻のユーザーとして、私はまだまだ未熟だと感じています。

次に、各問題に取り組んだ心の旅路についてお話しします。書く順番は私が解いた順番です。おそらく含まれる要素には:AI は私の大親、つぶやき、無駄なネタ、自己満足などの混沌とした要素が含まれます(

サインイン#

開門するには~~悠揚的小曲を聞きながら~~60 秒以内に各国の文字を入力する必要がありますが、貼り付けはできません(イライラ

ダメだ、私はあまりにも未熟で何もできない、やはり「待ちきれない、すぐにスタート!」にしましょう。アドレスバーに ?pass=false が追加されているのはなぜ? true に変更してみる?

hackergame 伝説的に素晴らしい

こうして、サインイン問題のフラグを取得しました:flag{We1C0ME-To-haCkerg@me-@Nd-EnJoY-hACk!n9-ZoZ4}

《hackergame 伝説》の歌詞を添付します:(公式 Writeup より転送)この歌は非常に良いので、この記事を見ている皆さんと一緒にループして聴くべきです。

大会は興味次第(?

猫の質問(Hackergame 10 周年記念版)#

おなじみの猫の質問、おなじみの検索技術小考、おなじみの答えが見つからずに叫ぶ(

  1. Hackergame 2015 の大会前夜に行われたプレ講座はどの教室で開催されましたか?(30 点) ヒント:教室番号を記入してください。例:5207、3A101。

この問題は複数のサイトを検索し、最終的にHackergame の LUG@USTC の紹介ページを通じて、科大の第 2 回情報セキュリティコンテスト(その時はまだ hackergame とは呼ばれていませんでした)の内容アーカイブを見つけました。大会の時間安排には 10月17日土曜日19:30 3A204 ネットワーク攻防技術講座 とあります。したがって、答えは 3A204 です。こうして水問題を難問にしてしまいました。

  1. ご存知の通り、Hackergame には約 25 の問題があります。過去 5 年間(今年を除く)に開催された Hackergame の中で、この数字に最も近い問題数の大会には何人が登録参加しましたか?(30 点) ヒント:非負整数です。

第一問で言及された Hackergame の紹介ページを見て、毎年の大会のリポジトリ(数年前はustclugの組織の下で)を一つ一つ数えていくと、最も近いのは 19 年(28 問)で、hackergame 2019をググってみました。見つけたのはこれ。したがって、答えは 2682 です。

  1. Hackergame 2018 でどの人気検索ワードが科大図書館のその月のホット検索 1 位になりましたか?(20 点) ヒント:漢字のみで構成されています。

ご存知の通り、猫の質問だけが図書館に関連することを尋ねます(他に何かあったら言ってないことにします

これに基づいて、2018 年の猫の質問の Writeupを直接見つけ、図書館の問題のキーワード プログラマーの自己修養 を見つけました。これが本問題の答えです。この解法はある意味で偶然の産物で、予期された解ではないでしょう?

  1. 今年の USENIX Security 学術会議で中国科学技術大学が発表した電子メール偽造攻撃に関する論文では、著者が 6 つの攻撃方法を提案し、いくつの電子メールサービスプロバイダーおよびクライアントの組み合わせで実験を行いましたか?(10 点) ヒント:非負整数です。

USENIX Security USTCUSENIX Security emailUSENIX 中科大などのキーワードで検索しても見つからず、血圧が上がりました。後にUSENIX Security 2024 ustcニュースを見つけました。問題の論文のタイトルは FakeBehalf: Imperceptible Email Spoofing Attacks against the Delegation Mechanism in Email Systems です。ググって論文紹介ページ論文リンクを得ました。

しかし、この時点で 2 つ目の血圧ポイントが来ました。論文紹介には 16 と 20 が書かれていて、どちらも問題の答えではないので、論文を読み込む必要がありました。何度も読み返した後、6 Imperceptible Email Spoofing Attackの下にこんな一文(ハイライト)を見つけました:

違う、兄弟

その中で resulting in 336 combinations(336 の組み合わせ)と書かれているので、答えは 336 です。このプロセスをこんなに簡単に言っていますが、実際には非常に苦痛で、私が倒数第二の問題として解いたものでした。

  1. 10 月 18 日、Greg Kroah-Hartman が Linux メールリストに提出したパッチは、多くの開発者を MAINTAINERS ファイルから削除しました。このパッチが Linux メインラインにマージされたコミット ID は何ですか?(5 点) ヒント:ID の最初の 6 桁、アルファベットは小文字、例:c1e939。

ついにおなじみの最新のホットな問題に到達しました。この事件は私がフォローしている各 Telegram チャンネルでAOSC が書いたニュースが転送されていました。記事にはこのひどいパッチをマージした GitHub のリンクが直接記載されていました。したがって、答えは 6e90b6 です。

  1. 大規模言語モデルは入力をトークンに分解して計算を続けます。このウェブページの HTML ソースコードは Meta の Llama 3 70B モデルのトークナイザーによっていくつのトークンに分解されますか?(5 点) ヒント:このページを初めて開いたときの HTML ソースコード、答えは非負整数です。

この問題は一度は爆破しようと思いましたが、後に Tiktokenizer を見つけてからはやる気を失いました。

ブラウザをプライベートモードで開き(すべてのプラグインを無効にして、プラグインがウェブページのソースコードを変更する可能性を排除)、トークンを使って問題のウェブサイトにアクセスしました。F12 でウェブサイトのコードをコピーしました(右クリックはトークンが必要なため正しいソースコードでは使用できません)。その時、他の問題を解いている間にある大規模モデルのページを見つけて Tiktokenizer を見ました。さて、ウェブサイトのコードを Tiktokenizer にコピーして 1829 を得て、いくつかの数を試して1833が正しい答えであることを確認しました。

Tiktokenizer に感謝

これで、本問題の 2 つのフラグを取得しました:flag{4_GooD_©α7_iS_THE_c4t_ωHØ_c4n_P@ss_TH3_QuiZ}flag{7eN_¥eαRs_of_hα©KergΛm3_ØmEd3tOบ_WI7h_ИEkO_QU12}

旅行写真 4.0#

昨年の 3.0 は成功しなかった、私はこれについて深く反省しました。主な問題は注意力の散漫でした。今年は、集中力を必要とする PuzzleHunt を経て、今の私は無敵です!

そして、この屑は今年の GeekGame の画像検索問題で注意力散漫で解けなかった

LEO_CHAN? (問題 1-2)#

問題 1: 写真が撮影された場所は中科大のどの校門に近いですか?(形式:X 校区 Y 門、いずれも 1 文字)

直接画像を検索して同じ画像を見つけ、画像の説明が中国蜀山科里科気科創驿站 — 科大站であることを知りました。その後、上記の場所を検索してニュースを見つけました。そこには中国蜀山科里科気科創驿站——科大站は金寨路と槽郢路の交差点に位置し、中国科学技術大学東校区西門に正対しています......と書かれています。したがって、問題 1 の答えは 東校区西門 です。

問題 2: ところで、Leo ちゃんが最後に桁架に登場したのは…… 科大の今年の ACG 音楽会ですか?活動日付は私が間違っていなければ?(形式:YYYYMMDD)

直接科大 ACG 音楽会を検索して Bilibili の関連動画を見つけ、直接または間接的に中科大 LEO アニメ協会のアカウントページにたどり着きました。動的に探してこの投稿を見つけ、確認したところ、日付は 20240519 です。

フラグ 1 を提出:flag{5UB5CR1B3_T0_L30_CH4N_0N_B1L1B1L1_PLZ_7647de202b}(人間の言葉:bilibili で LEO ちゃんをフォローしてください、ありがとうニャ)

FULL_RECALL(問題 3-4)#

問題 3: この公園の名前は何ですか?(公園が所在する市区などの情報は不要)

明らかに集中して注意を向けると、ゴミ箱に「六安園林」と書かれているのを見つけました。次に、六安 公園を直接検索して一つ一つ照合し、最終的に答えは 中央森林公園 です。

問題 4: この景観がある観光地の名前は?(3 文字)

直接画像を検索して三峡截流石であることを発見し、この言葉を検索すると宜昌の壇子岭観光地が得られます。

フラグ 2 を提出:flag{D3T41LS_M4TT3R_1F_R3V3RS3_S34RCH_1S_1MP0SS1BL3_f156cdbd44}(逆向き検索ができない場合、詳細が重要です)、ちょうど第二部のやり方に合致しました。

OMINOUS_BELL(問題 5-6)#

問題 5: 撮影地から最も近い病院は?(院区、地名情報は含めない、形式:XXX 病院)

問題 6: 左下隅の動車組のモデルは?

違う、隣の GeekGame で鉄道知識を試験したばかりだ(解けなかったけど)、どうして Hackergame でも試験するの?

本題に戻ります。2 つの問題は同じ画像にあり、正面から画像を見ても手がかりが全くなく、動車組に注目するしかありませんでした。画像の中の動車を直接検索すると、多くの結果が懐密号 CRH6F-Aに指し示し、塗装を比較しても問題なく、その情報を調べるとちょうど 4 編成で、ft で言及されている「非常に象徴的な……4 編成の動車があるようですか?」に合致します。したがって、問題 6 の答えが出ました。

懐密号を検索すると、その走行ルートは北京市郊鉄道懐柔 — 密雲線であることが分かります。このルートを検索すると、百度がそのルートを強調した地図を提供し、次に画像の撮影視点や周囲のものを分析して照合しました。後に道路と遠くの 3 つの赤い屋根を基におおよそ所在地域を確認しました(赤い円)。その地域の周囲には北京の積水潭病院(緑の円)があり、これが問題 5 の答えです。

目害了

フラグ 3 を提出:flag{1_C4NT_C0NT1NU3_TH3_5T0RY_4NYM0R3_50M30N3_PLZ_H3LP_1120265b41}

第三グループの問題は本当に心血を注ぎました。後にインスピレーションが湧いて直接結果を見つけました。

サインインが好きな CTFer の皆さん、こんにちは#

~~ 私は雷軍です。次はこの問題の手順を教えます。~~ 一連の検索を経て Nebula チームの公式サイトにたどり着きました。Writeup を書くときにこのサイトが「主催者」に書かれていることに気づきました。無駄なことをしている気がする。

ターミナルスタイルのウェブページであることが分かります。何も分からず、適当にhelpを入力してみました:

このコマンドは結構ある

すべての実行可能なコマンドが表示され、次に一つ一つ試してみました(

envを試したとき、最初のフラグを見つけました:flag{actually_theres_another_flag_here_trY_to_f1nD_1t_y0urself___join_us_ustc_nebula}

何 Nix 教徒

その後は試せなくなりました(

実行コマンドの記録を振り返ると、catの実行出力に hidden files があることに気づき、まずはls -aで隠しファイルを見てみました(

すると隠しファイル.flagが見え、再度cat .flagで 2 つ目のフラグを取得しました:flag{0k_175_a_h1dd3n_s3c3rt_f14g___please_join_us_ustc_nebula_anD_two_maJor_requirements_aRe_shown_somewhere_else}

隠すのが好き?

最後に、楽しく問題を解いているときに、sudoで飛ばされました。あなたたち、ナイロンが好きな CTFer たち、私があなたたちのナイロンを見たら、最寄りの小米 SU7 を遠隔操作してあなたたちを創造しますからね!

(以上の内容はすべて人工生成です)

大会グループとナイロンのコメントセクションから

ゼロ知識数独#

数独の達人#

非コンピュータ専攻として、プログラミングではなくウェブサイトを通じて数独を解くことを考えています。ちょうど以前 Puzzle Hunt に参加した際に、数独を専門に解くウェブサイトをいくつか見つけました。例えば焖肉面SudokumakerNoq Solver。適当に一つを選んで 4 つの難易度の数独を解けばフラグが得られます。(なぜフラグを表示しないのか?数独を書く気がしないからです)

zk の達人#

この問題が紙老虎レベルだとは思いませんでした。難易度は環境の設定とコマンドの検索にあります。以下はこの問題を解くための私の試行錯誤のプロセスです。

ゼロ知識に関する内容を検索して大まかに理解し(数独がゼロ知識証明の典型例であることを発見)、このチュートリアルに従って基本環境を設定しました(この問題に関しては、ソースコードディレクトリで npm circomlibパッケージをインストールしないと、参照されている回路が見つかりません)。その後、Copilot を使って入力形式を理解し、問題に合わせてunsolved_gridsolved_gridを修正してinput.jsonとして保存しました。そして、setup.shを実行して元のsudoku.zkeyverification_key.jsonを上書きし、自分でステップバイステップでウィットネスと署名を生成しましたが、操作中にウィットネスがスクリプトなしで生成できないことに気づき、再度手動でコマンドを実行しました。最終的にproof.jsonを生成して検証に出すとエラーが出て、何かがおかしいと感じました。

助けて、AI!

その後、すべての中間ファイル(zkey と wasm を指します)を自分で生成する必要があるなら、コードの添付ファイルは一部の中間ファイルに何のためにあるのかという疑問が湧きました。この問題を持ってその記事を再度読み返し、ウィットネスファイルと証明ファイルを同時に生成できる一発で済むコマンドsnarkjs groth16 fullprove input.json circuit.wasm circuit_final.zkey proof.json public.jsonを見つけました。ちょうど入力の JSON と問題が提供するsudoku.wasmsudoku.zkeyを使用しました。実行すると正常にproof.jsonが生成され、検証に出してそのまま退社しました(

成功の瞬間

フラグ:flag{you_are_a_5udoku_expert_and_pr0ved_your_kn0wledge_957bd00098}

大会終了時点で、この問題はわずか 66 人が解決しました。プロセスを整理してみるとそれほど複雑ではなく、主に原理と操作を学ぶことが重要で、少し紙老虎のように感じました(

開かない箱#

SolidWorks で開こうとしましたが、ソフトがクラッシュしたので、適当に STL モデルをオンラインでプレビューできるウェブサイトを探し、オンラインボックスモードで角度を変えるとフラグが見えました。

ImageToStl.com_flagbox.png

フラグ:flag{Dr4W_Us!nG_fR3E_C4D!!w0W}

惜字如金 3.0 / 問題 A#

主にどの行でエラーが出たかを参照し、その行の変数や関数などの欠落している文字を補完するだけで解決しました。昨年よりも簡単でした。

フラグ:flag{C0mpl3ted-Th3-Pyth0n-C0de-N0w}

毎日の論文が多すぎる!#

論文をダウンロードした後の 1 日目は全く手がかりがなく、2 日目の午後に再度見直すと、解決した人数がかなり多いことに気づき、これは非常に難しい問題ではないと感じ、再び論文を読み始めました。

論文のウェブページでブラウザを使ってflagを検索すると、ある画像の中に隠された文字が見つかり、引っ張ると完全な隠されたテキストflag hereが出てきました。私は隠された文字の中にフラグがあると思っていましたが、PDF エディタを使って画像を少しドラッグしたところ......

良い論文にフラグを隠すのか

なんてこった!(この画像はどうしてこんなにぼやけているのか)

後で振り返ってみると、この画像にはあまり調和の取れない枠があり、もしかしたらこの画像に問題があることを示しているのかもしれません。やはり注意力が足りず、運も必要でした(違う

フラグ:flag{h4PpY_hAck1ng_3veRyd4y}

大小王を比べる#

一目で丁真スクリプト問題だ、AI 起動!しかし生成されたユーザースクリプトの効率は少し低く、相手は最大で 46 問程度しか解けませんでした。そこで後に AI にコンソールスクリプトを改写させました。非常に不思議なことに、コンソールスクリプトでも相手に勝てませんでしたが、フラグは出ました。運の要素が少しあるように感じました。

フラグ:flag{I-@M-7hE-h@CkEr-KINg-OF-Comp4RinG-NuMB3r$-ZOz4}

早く AI に感謝の言葉を言え

AI が生成したコンソールスクリプト:

// ゲームの初期データを取得
let gameData = state.values;
let inputs = [];
let lessThanButton = document.getElementById('less-than');
let greaterThanButton = document.getElementById('greater-than');

// setInterval関数を使用して50ミリ秒ごとに自動的に答えを提出
let intervalId = setInterval(() => {
  // ゲームが終了した場合、タイマーをクリアして答えを提出
  if (inputs.length >= gameData.length) {
    clearInterval(intervalId);
    submit(inputs);
  } else {
    // 現在の2つの数のどちらが大きいかを判断し、対応するボタンをクリックする
    let pair = gameData[inputs.length];
    if (pair[0] < pair[1]) {
      lessThanButton.click();
      inputs.push('<');
    } else {
      greaterThanButton.click();
      inputs.push('>');
    }
  }
}, 50);

PaoluGPT / 千里挑一#

この問題を見たとき、これらのチャット記録の中に隠されたフラグを探すことだと予想しましたが、リンクを一つ一つクリックしたくなかったので、やはり AI に油猴スクリプトを書いてもらい、ウェブページ上のすべてのサブパスを自動的に探求しました。案の定、スクリプトはフラグがあるウェブページを見つけました。ウェブページを開くと、スクロールが下まで行っていなかったので、直接下にドラッグするとフラグが見えました。

第二の小問を試してみたところ、少し手がかりが得られましたが、確信が持てず、テンプレート攻撃ではないことに気づきました。

フラグ:flag{zU1_xiA0_de_11m_Pa0lule!!!_a1a2048d7d}

どうしてこんなに深く隠すのか

どうしてこんなに深く隠すのか

AI が生成した油猴スクリプト:

// ==UserScript==
// @name         Find Flag Links
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  ページ内のキーワードを含むリンクを探す
// @match        問題環境のリンク/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // すべてのリンクを抽出
    const links = Array.from(document.querySelectorAll('a[href]')).map(a => a.href);
    const keyword = 'flag'; // キーワード

    // キーワードを含むリンクを探す
    const foundLinks = links.filter(link => {
        const xhr = new XMLHttpRequest();
        xhr.open('GET', link, false); // 同期リクエストを使用
        xhr.send(null);
        return xhr.status === 200 && xhr.responseText.includes(keyword);
    });

    // 結果を出力
    if (foundLinks.length > 0) {
        console.log('キーワードを含むリンクが見つかりました:');
        foundLinks.forEach(link => console.log(link));
    } else {
        console.log('キーワードを含むリンクは見つかりませんでした');
    }
})();

結尾#

今回の得点状況:

ランキング

得点状況

ランキングは昨年とほとんど変わりません。今年の Web はまだあまり慣れていないと感じ、得られた点数は少なかったです;Math は今年入門のハードルが低くなり、昨年よりも多く得られました;General は得点が少なく、相変わらずのレベルです。ただし、100 人未満が解決した問題を作成できたのは少し驚きでした。しかし全体として、私はまだ大佬を仰ぎ見ている新参者の道を歩んでいます。

以上です。読者の皆さん、ありがとうございました。来年私は引き続き初心者の立場でお会いしましょう!

この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://zwh.moe/posts/moyu/hackergame-2024

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。