前言#
盼望著,盼望著,一年一度的網安原神 hackergame 搜索技術小考終於來了。今年的入門題相比去年少了些,只拿到 1k7。作為一個非計算機專業用戶感覺我還是太菜了。
接下來來聊聊做各道題的心路歷程,寫的順序也是我做出來的順序。可能包含:AI 是我大爹、碎碎念、無端玩梗、自娛自樂等混沌要素(
簽到#
開門需要在聽著悠揚的小曲的同時在 60s 內輸入各國文字的啟動,但是不能粘貼(惱
不行,我太菜了什麼都做不到,還是 “等不及了,馬上啟動!” 吧。怎麼地址欄多了個 ?pass=false
?改為 true
看看?
就這樣,拿到了簽到題的 flag:flag{We1C0ME-To-haCkerg@me-@Nd-EnJoY-hACk!n9-ZoZ4}
附一個《hackergame 傳奇》歌詞:(轉自官方 Writeup)這歌啊,非常的好聽,應該拉著看這篇文章的各位一起循環。
貓咪問答(Hackergame 十周年紀念版)#
熟悉的貓咪問答,熟悉的搜索技術小考,熟悉的找不到答案在吼叫(
- 在 Hackergame 2015 比賽開始前一天晚上開展的賽前講座是在哪個教室舉行的?(30 分) 提示:填寫教室編號,如 5207、3A101。
這道題搜了好幾個網站,最後通過 Hackergame 在 LUG@USTC 的介紹頁面找到了科大第二屆信息安全大賽(那時候還沒叫 hackergame 呢)的內容存檔。可以看到比賽時間安排裡面有 10 月 17 日 周六晚上 19:30 3A204 網絡攻防技巧講座
。所以答案是 3A204
。就這麼活生生把水題做成了難題。
- 眾所周知,Hackergame 共約 25 道題目。近五年(不含今年)舉辦的 Hackergame 中,題目數量最接近這個數字的那一屆比賽裡有多少人註冊參加?(30 分) 提示:是一個非負整數。
看第一題裡說過的 Hackergame 的介紹頁面,把每年比賽的倉庫(前幾年的在 ustclug
組織下) 翻一次數數,最後得出來是 19 年最接近(28 題),再把 hackergame 2019
丟給咕噜噜。搜到了這個。所以答案為 2682
。
- Hackergame 2018 讓哪個熱門檢索詞成為了科大圖書館當月熱搜第一?(20 分) 提示:僅由中文漢字構成。
眾所周知,只有貓咪問答會考查查詢圖書館相關的東西(如果還有其他考的那當我沒說
基於此直接定位 2018 年貓咪問答的 Writeup,找到了圖書館題目的關鍵詞 程序員的自我修養
,即為本題答案。這種解法某種意義上也是一種巧合,應該不算預期解吧?
- 在今年的 USENIX Security 學術會議上中國科學技術大學發表了一篇關於電子郵件偽造攻擊的論文,在論文中作者提出了 6 種攻擊方法,並在多少個電子郵件服務提供商及客戶端的組合上進行了實驗?(10 分) 提示:是一個非負整數。
搜 USENIX Security USTC
、USENIX Security email
、USENIX 中科大
等關鍵詞都沒搜到,血壓高了。直到後面用 USENIX Security 2024 ustc
搜到一則新聞。得到題目所述論文題目為 FakeBehalf: Imperceptible Email Spoofing Attacks against the Delegation Mechansim in Email Systems。請進咕噜噜得到論文介紹地址和論文鏈接。
但是這時候第二個血壓點來了,論文介紹裡面寫的 16 和 20 都不是題目答案,所以還得啃論文。翻來覆去的讀之後,在 6 Imperceptible Email Spoofing Attack
下找到了這麼一段話(高亮標注):
其中說到 resulting in 336 combinations
(336 個組合),所以答案為 336
。別看我這麼輕鬆的說這個過程,做起來還是非常痛苦的,也是我倒數第二道才解出來的題目。
- 10 月 18 日 Greg Kroah-Hartman 向 Linux 郵件列表提交的一個 patch 把大量開發者從 MAINTAINERS 文件中移除。這個 patch 被合併進 Linux mainline 的 commit id 是多少?(5 分) 提示:id 前 6 位,字母小寫,如 c1e939。
終於來到熟悉的最新最熱的題目了。因為這個事件我關注的各個 Telegram 頻道都有轉發過 AOSC 寫的新聞稿。稿子裡直接給好合併這個糟糕的 patch 的 GitHub 傳送門了。所以答案是 6e90b6
。
- 大語言模型會把輸入分解為一個一個的 token 後繼續計算,請問這個網頁的 HTML 源代碼會被 Meta 的 Llama 3 70B 模型的 tokenizer 分解為多少個 token?(5 分) 提示:首次打開本頁時的 HTML 源代碼,答案是一個非負整數。
這題我一度想爆破,直到後邊找到了 Tiktokenizer 之後開始擺爛了。
瀏覽器進無痕(並關閉所有插件,以排除插件修改網頁源代碼的可能),使用 token 進入題目網站。F12 複製網站代碼(右鍵因為需要 token 不是正確的源代碼而不能使用),此時因為做其他題找到了某個大模型的頁面看到了 Tiktokenizer。好了,網站代碼複製到 Tiktokenizer,得到 1829,往上試幾個數確定 1833
為正確答案。
至此,得到了本題的兩個 flag: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 答案為 東校區西門
。
問題 2: 話說 Leo 醬上次出現在桁架上是…… 科大今年的 ACG 音樂會?活動日期我沒記錯的話是?(格式:YYYYMMDD)
直接搜 科大 ACG 音樂會 找到 B 站相關視頻,可以通過直接或間接的跳轉找到 中科大 LEO 動漫協會的帳號主頁。翻動態找到了這條,確認時間為 20240519
。
提交得到 flag1:flag{5UB5CR1B3_T0_L30_CH4N_0N_B1L1B1L1_PLZ_7647de202b}
(人話:bilibili 關注 LEO 醬謝謝喵)
FULL_RECALL(題目 3-4)#
問題 3: 這個公園的名稱是什麼?(不需要填寫公園所在市區等信息)
顯而易見集中注意力發現垃圾桶寫著 “六安園林”,接下來就是直接搜 六安 公園
一個一個進行匹配了,最後答案是 中央森林公園
。
問題 4: 這個景觀所在的景點的名字是?(三個漢字)
直接搜圖發現是三峽截流石,對這個詞進行搜索可得到其在宜昌的壇子嶺
景點。
提交得到 flag2: flag{D3T41LS_M4TT3R_1F_R3V3RS3_S34RCH_1S_1MP0SS1BL3_f156cdbd44}
(如果無法進行逆向搜索,細節很重要),正好契合了第二部分的做法。
OMINOUS_BELL(題目 5-6)#
問題 5: 距離拍攝地最近的醫院是?(無需包含院區、地名信息,格式:XXX 醫院)
問題 6: 左下角的動車組型號是?
不是,隔壁 GeekGame 剛考完鐵路知識啊(雖然沒做出來),怎麼 Hackergame 也考?
說回正題。兩題均在一張圖上,正向圖尋毫無頭緒,只能就著動車組下手了。直接對著圖片裡的動車搜圖,許多結果都指向懷密號 CRH6F-A
,塗裝對比沒毛病,且查詢該信息也能發現其正好是四編組,符合 ft 中提到的 “似乎有輛很標誌性的…… 四編組動車?”,這樣第六題的答案就出來了。
對懷密號進行搜索可知它走的線路是北京市郊鐵路懷柔 — 密雲線。搜索這條線路,百度提供了一個高亮該線路路線的地圖,接下來就是分析圖片的拍攝視角以及周圍的東西進行匹配了,後面根據道路和遠處的三個紅色屋頂大概確認了所在區域(紅圈),區域周圍有個北京積水潭醫院
(綠圈)即為第五題答案。
提交得到 flag3:flag{1_C4NT_C0NT1NU3_TH3_5T0RY_4NYM0R3_50M30N3_PLZ_H3LP_1120265b41}
不得不說第三組題目是真的費盡心力了,直到後面靈感大開直接搜到出結果。
喜歡做簽到的 CTFer 你們好呀#
~~ 我是雷軍,接下來由我來教這題的步驟。~~ 通過一系列搜索跳轉得到 Nebula 隊的官網。寫 Writeup 時才發現這個網站寫在了 “承辦單位” 中。怎麼感覺自己不是在做無用功就是在做無用功的路上。
可以發現是個 Terminal 風格的網頁。毫無頭豬,隨便輸入個 help
看看:
裡面給出了所有可執行的命令,接下來一個一個試呗(
試到 env
的時候,我們找到了第一個 flag:flag{actually_theres_another_flag_here_trY_to_f1nD_1t_y0urself___join_us_ustc_nebula}
。
然後就試不出來了(
回看執行命令的記錄,注意到 cat
執行輸出發現裡邊有個 hidden files,那就先用 ls -a
看看有啥隱藏文件吧(
然後就看到了隱藏的 .flag
,再來個 cat .flag
拿下第二個 flag: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 時找到一些專門解數獨的網站。比如焖肉面、Sudokumaker、Noq Solver。隨便找一個完成四個難度的數獨都能拿到 flag。(為什麼不展示 flag?因為不想再寫數獨了)
zk 高手#
我都沒想到這題是紙老虎級別,難度都在配置環境和找命令上了。以下是做這道題我的摸索過程。
通過搜索大概了解了零知識的相關內容(而且發現數獨還是個零知識證明的典型例子)。按照這篇教程配置了一下基礎環境(對於這道題來說,還得在源代碼目錄安裝 npm circomlib
包,否則找不到引用的電路)。隨後通過 Copilot 了解了其輸入格式,按照其輸入格式範例對著題目修改 unsolved_grid
和 solved_grid
保存為 input.json
。然後就傻傻的執行 setup.sh
覆蓋掉原有的 sudoku.zkey
和 verification_key.json
,再自己一步步生成 witness 和簽名了,操作的時候發現 witness 缺腳本沒法生成了又手動操作了一遍命令,最後生成 proof.json
丟上去報錯了發現不對勁。
後面一想如果全部中間文件(指的 zkey 和 wasm)都得需要自己生成那代碼附件給部分中間文件幹什麼?帶著這個問題又翻了那篇文章,找到了個能同時生成 witness 文件和證明文件的一步到位的命令 snarkjs groth16 fullprove input.json circuit.wasm circuit_final.zkey proof.json public.json
。剛好用到了輸入的 JSON 和題目提供的 sudoku.wasm
、sudoku.zkey
。執行了一下正常生成 proof.json
,丟去驗證直接下班(
flag:flag{you_are_a_5udoku_expert_and_pr0ved_your_kn0wledge_957bd00098}
截至比賽結束時,這題僅 66 人做出,過程梳理了一下並不複雜,主要是現學原理與操作,感覺有點紙老虎了(
打不開的盒#
拿 SolidWorks 打開但是軟件爆炸了,於是隨便找了個在線預覽 STL 模型的網站,發現在線框模式下轉個角度就能看到 flag。
flag:flag{Dr4W_Us!nG_fR3E_C4D!!w0W}
惜字如金 3.0 / 題目 A#
主要就參照哪一行報錯就把那一行裡變量 / 函數等缺失的字母補上,秒了。真就比去年還簡單。
flag:flag{C0mpl3ted-Th3-Pyth0n-C0de-N0w}
每日論文太多了!#
下了論文之後的一天內都毫無頭緒,第二天下午又翻了一遍,看到解出的人數挺多,感覺這不是一道非常難的題,于是又開始啃論文了。
在論文網頁用瀏覽器搜索 flag
,會發現在一張圖裡面有隱藏文字,拉一下還能帶出來完整的隱藏文本 flag here
。我以為是找隱藏文字裡的 flag,但是直到我拿了一個 PDF 編輯器隨便拖動了一下圖片......
焯!(還有這圖怎麼這麼糊啊)
後來復盤發現這幅圖裡邊有個不太和諧的邊框,或許這就意味著這圖有問題。果然注意力不夠還得運氣來湊(不是
flag:flag{h4PpY_hAck1ng_3veRyd4y}
比大小王#
一眼丁真腳本題,AI 啟動!但是生成的油猴腳本效率有些拉了,對面答完了最多才做了 46 道左右。於是後面讓 AI 改寫控制台腳本了。很神奇的是,控制台腳本依舊沒贏過對面,但是出 flag 了。感覺有點運氣成分在裡邊。
flag:flag{I-@M-7hE-h@CkEr-KINg-OF-Comp4RinG-NuMB3r$-ZOz4}
附 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 {
// 判斷當前的兩個數哪個更大,並模擬點擊相應的按鈕
let pair = gameData[inputs.length];
if (pair[0] < pair[1]) {
lessThanButton.click();
inputs.push('<');
} else {
greaterThanButton.click();
inputs.push('>');
}
}
}, 50);
PaoluGPT / 千里挑一#
看到這題目就猜到是從這些聊天記錄中找藏的 flag,但是鏈接不想一個一個點,所以還是丟給 AI 寫了個油猴腳本自動探尋網頁上所有的子路徑。果不其然,腳本找到了 flag 所在的網頁。打開網頁,發現滾輪沒划到,直接拖到最底下就能看到 flag 了。
第二小問嘗試了一下有點頭緒但是不確定,然後發現不是模板攻擊,擺了。
flag: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