Try   HackMD

HKCERT CTF 2023: 解決手把手題目之秘笈 (II)

ST碼 (I) / ST Code (I) (Misc)

  • 瀏覽 /flag1 會看到一個 QR碼,但是看起來有點凹凸不平
    • 如果你有仔細翻閱伺服器的原始碼,你會發現這是一個 可縮放向量圖形 (SVG)
  • 檢視圖片的原始碼,你會發現有一堆 rx="0"rx="1" 看起來很可疑
    • 原來這就是圖片凹凸不平的原因
  • 由上而下記錄下的話,會得出 01101000 01101011 ...
    • 你能猜出這是甚麼編碼嗎?__________
  • 利用這個編碼轉換後,會得出 hkcert23{...
    • 看來這就是旗幟了呢

答案:二進制 ASCII 碼

獄門疆 / MongoJail (Pwn)

少量劇透

  • 這條題目好像跟 "Goku Mon Kyo" 無關
    • 但是跟 MongoDB Shell (mongosh) 有關
    • mongosh 是一個特設的 node.js 「讀取-求值-輸出」循環 (REPL) 環境
  • 你可以在一個設有限制的 mongosh 輸入任意的 Javascript
  • 所有內置的變量和函數,以及 require,module,globalThis被封印掉變成了 undefined
  • 還有甚麼能用的嗎?看看參考資料
    • 標準內建物件 (Built-in objects) 都被封印掉變成了 undefined
    • 運算式與運算子 (Expressions & operators) 還能用吧 至少加法還能用
      • 劇透: 有甚麼方法能打開門的另一面?

又有寶貝 XSS / Baby XSS again (Web)

  • 首先你需要了解奪旗賽裡的 XSS 題是甚麼
    • 如果你不清楚細節,你可以參考 HKCERT CTF 2021 的 Infant XSS 題目
    • 大致上,你需要找到網站裡的 XSS 漏洞,然後砌一個攻擊頁面或網址,再把網址傳送給題目的機器人。機器人會根據你的攻擊代碼執行指令,例如傳回敏感資訊或者 Cookie
  • 這題告訴你可以利用 query string 的 src 參數任意注入外部 Javascript 代碼:
out += """<script src="%s"></script>""" % request.args.get("src", "http://example.com/")
  • 但是 "內容安全策略" (Content Security Policy) 限制了 Javascript 的來源,只能是從 https://hcaptcha.com,https://*.hcaptcha.comhttps://pastebin.com:
<meta http-equiv="Content-Security-Policy" content="script-src https://hcaptcha.com https://*.hcaptcha.com https://pastebin.com">

轉蛋模擬器 / Gacha Simulator (Reverse)

Partial Guide

這題建議使用 .NET Framework
這是一個 pptm 檔, 包含了巨集指令. 你可以在開發人員頁 (Developer Tab) 查看 VBA 代碼.
https://support.microsoft.com/en-au/office/show-the-developer-tab-e1192344-5e56-4d45-931b-e5fd9bea2d45
打不開原始碼? 可以試試這方法:
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project
然後求其都解到啦,例如改概率,重新排列已加密的資料,又或者直接解密資料等。祝你好運!

下手ですね / BADES (Crypto)

挑戰描述

在這個挑戰中,我們被給予一個略微修改過的資料加密標準(標記為 DES')。此外,我們還有兩個功能:

  1. encrypt_flag:使用 DES'-CBC 加密 flag。
  2. encrypt:使用 DES'-CBC 加密任意訊息。

目標是使用上述功能獲取旗幟。

部分指南

由於 __left_rotations 被更改,所有金鑰都變成了弱金鑰。如果我們使用電子密碼本(ECB)操作模式,

Encrypt(Encrypt(m))=m,或者直觀地說,對相同訊息進行兩次加密將得到該訊息。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

圖 1

然而,在這種情況下,我們使用的是 CBC 模式。這是使用 encrypt_flag(或 encrypt)加密訊息時的過程。一開始,訊息被填充為 8 的倍數大小。然後,它被切成 8 字節的區塊:

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

圖 2

然後它被加密為密文

c0c1c2...,並提供給我們。我們如何利用「加密密文實際上是解密它」的行為來恢復
m1,m2,...

因為

c0 是個固定的初始值,讓我們展示如何通過加密
c0c1
來取得
m1

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

圖 3。

由於

c0(c0c1)=c1,我們傳遞給加密函數的內容即為
c1
。在圖 2 中,我們知道
Encrypt(c1)=c0m1
。現在,我們可以通過計算
c0(c0m1)
來恢復
m1

現在試試把其他區塊都解出來吧!