心血來潮想說註冊一下個 Hack The Box 來找找練習方向,才發現需要邀請碼才能註冊,此刻腦海閃過一個畫面,不知道多久以前曾經看過取得 Hack-The-Box 的邀請碼相關的文章,似乎是利用測驗的方式取得邀請碼,也就是 CTF 題目的概念,於是順手 F12 下去,並把找到驗證碼的過程記錄下來。
前言
當兵之前還有陸續在發「資安系列」系列的文章,退伍之後,已經是一個社會新鮮人了,由於不想讓自己太廢,立刻就踏上求職的道路,同時也意識到自己對於相關技能都變得很生疏,目前也正規劃一些學習方案,著重在滲透測試這個領域,也希望透過練習打穩基礎能力,然後這篇文章大概就是我正要使用 Hack The Box 這個服務時,遇到的註冊問題,並記錄解決過程,如果讀者尚未註冊該服務,請斟酌閱讀。
註冊 Hack The Box
首先到 Hack The Box 的頁面上,看到最上方的 Bar,發現並沒有任何有關註冊的選項,跟使用者比較有關聯的大概就是 Login 了。
找到註冊頁面
接著進入到登入頁面後,也沒有註冊的相關的連結可以操作。
此時靈機一動,把 URL 從 login
改成 register
,果不其然,註冊頁面就出現了,隨後填好資料後,點下註冊,則出現上方那一行 Invite code missing. Submit one here.
。
點擊 here
連結後來到一個要求輸入邀請碼的頁面。
找出 Hack The Box 驗證碼
由於已經知道是要透過官方提供的線索去找到驗證碼了,所以也沒必要 Google 「Hack The Box Invite Code」之類的東西,一切就都在網站上探勘,一樣在頁面上 F12,尋找線索。
inviteapi.min.js
在瀏覽器的 Source 分頁中發現可疑的 inviteapi.min.js
檔案,由檔名可見 min
,所以是壓縮過的,簡單復原後如下。
eval(function(p, a, c, k, e, d) {
e = function(c) {
return c.toString(36)
}
;
if (!''.replace(/^/, String)) {
while (c--) {
d[c.toString(a)] = k[c] || c.toString(a)
}
k = [function(e) {
return d[e]
}
];
e = function() {
return '\\w+'
}
;
c = 1
}
;while (c--) {
if (k[c]) {
p = p.replace(new RegExp('\\b' + e(c) + '\\b','g'), k[c])
}
}
return p
}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}', 24, 24, 'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'), 0, {}))
就是一個不知道幹嘛的函數,而且有點混亂(不知道這算不算混淆過),不過我的重點專注於在 return p
,為了知道 p 的值是什麼,直接把他丟到瀏覽器上執行並沒有結果。
不過很奇怪沒有任何輸出,不是已經 return
了嗎,隨後突然想到,應該用個 console.log()
,接著就出現關鍵的程式碼。
程式碼如下:
function verifyInviteCode(code) {
var formData = {
"code": code
};
$.ajax({
type: "POST",
dataType: "json",
data: formData,
url: '/api/invite/verify',
success: function(response) {
console.log(response)
},
error: function(response) {
console.log(response)
}
})
}
function makeInviteCode() {
$.ajax({
type: "POST",
dataType: "json",
url: '/api/invite/how/to/generate',
success: function(response) {
console.log(response)
},
error: function(response) {
console.log(response)
}
})
}
然後可以發現 makeInviteCode
函數,看起來是產生一組邀請碼的 API,只要對 /api/invite/how/to/generate
送出 encodetype
為 JSON 的請求即可。
隨後接收到的資料感覺怪怪的,看到後面的部分寫著 "enctype": "ROT13"
,這提示就很明顯了,做完 ROT13
之後,字串如下。
In order to generate the invite code,
make a POST request to \/api\/invite\/generate
得到下一個提示,對 /api/invite/generate
送出 POST 請求即可。
看到 Code 的部分,直接秒聯想是 Base64 Encode
,解碼出後得到 Invite Code
。
註冊後就等 Email 惹,真香~