[資訊安全] Hack-The-Box Invite Code

心血來潮想說註冊一下個 Hack The Box 來找找練習方向,才發現需要邀請碼才能註冊,此刻腦海閃過一個畫面,不知道多久以前曾經看過取得 Hack-The-Box 的邀請碼相關的文章,似乎是利用測驗的方式取得邀請碼,也就是 CTF 題目的概念,於是順手 F12 下去,並把找到驗證碼的過程記錄下來。

前言

當兵之前還有陸續在發「資安系列」系列的文章,退伍之後,已經是一個社會新鮮人了,由於不想讓自己太廢,立刻就踏上求職的道路,同時也意識到自己對於相關技能都變得很生疏,目前也正規劃一些學習方案,著重在滲透測試這個領域,也希望透過練習打穩基礎能力,然後這篇文章大概就是我正要使用 Hack The Box 這個服務時,遇到的註冊問題,並記錄解決過程,如果讀者尚未註冊該服務,請斟酌閱讀。

註冊 Hack The Box

首先到 Hack The Box 的頁面上,看到最上方的 Bar,發現並沒有任何有關註冊的選項,跟使用者比較有關聯的大概就是 Login 了。

找到註冊頁面

接著進入到登入頁面後,也沒有註冊的相關的連結可以操作。

Hack-The-Box Login Page
Hack-The-Box Register

此時靈機一動,把 URL 從 login 改成 register,果不其然,註冊頁面就出現了,隨後填好資料後,點下註冊,則出現上方那一行 Invite code missing. Submit one here.

Register Hack-The-Box
Hack-The-Box Register 2

點擊 here 連結後來到一個要求輸入邀請碼的頁面。

Register Hack-The-Box need Invite Code
Hack The Box Invite Code

找出 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 = k || c.toString(a)
        }
        k = [function(e) {
            return d[e]
        }
        ];
        e = function() {
            return '\\w+'
        }
        ;
        c = 1
    }
    ;while (c--) {
        if (k) {
            p = p.replace(new RegExp('\\b' + e(c) + '\\b','g'), k)
        }
    }
    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

Get Hack-The-Box Invite Code
Invite Code

註冊後就等 Email 惹,真香~


發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料