naya_hira’s diary

三日坊主の備忘録

Hack The Box をやりたかった

はじめに

Hack The Box というものをtwitterで見かけたのでやりたかった。 (始めることすら難しかったです(´・ω・`))

Hack The Box とは

www.hackthebox.eu 端的に書くとココ↑です。
An online platform to test and advance your skills in penetration testing and cyber security.(twitterより) 侵入テストとサイバーセキュリティのスキルをテストし、向上させるオンラインプラットフォームだそうです。
以下、個人解釈
ヨーロッパの常設CTFみたいな感じです。
こんな機能が...
- チームを組んだり
- ランキング機能で競ったり
- 掲示板とか個人メッセとかで自慢しあったり
- First blood(よくわからんです)
などがあります。 そして何より
外国語 + セキュリティ = かっこいい(ここ重要)
ということでやっていきます。 これより下はネタバレ(?)を含みます。

やりたいと思った人は絶対に見ないでください















答えに直結する値を載せるのは怖いので
invite_codeと書いて誤魔化すようにします。
(やり方を書いてる時点で...)*1

ユーザー登録

もうやりたい人はいなくなったと思うので、まずユーザー登録をします。

www.hackthebox.eu
ここに招待コードを打ち込んでユーザー登録画面に移ります。
あれ?と思った方、そうです。
まず、この時点で実力が必要とされています。
ちなみに、urlのinviteをregisterに変更してごり押しをしようとしても無駄でした。(1敗)

www.hackthebox.eu

招待コードを探す

こんな感じの常套手段としてソースコードを見てみます。 開発ツールを開きます。招待コードを探しているのでinviteで検索してみます。
そうすると<script defer src="/js/inviteapi.min.js"></script>とそれっぽいものが読み込まれていました。開発ツールのElements(インスペクター)タブからSources(デバッガー)タブに変更してのぞいてみます。 f:id:naya_hira:20200216155255p:plain
f:id:naya_hira:20200216155715p:plain

inviteapi.min.js(更新前)

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, {}))

うーん、最後が意味不明ですね。
とりあえず、preturnしているのでpを出力するように付け加えます。
inviteapi.min.js(更新後)

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)
        }
    }
    console.log(p);
    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, {}))

以上をコンソールで実行します。 すると、以下が出力されます。

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)
    }
  })
}

ということで招待コード作成する関数が見つかりました。 url の欠片があるのでアクセスしてみると

www.hackthebox.eu

Whoops, looks like something went wrong.
(google訳:おっと、何かがおかしかったようです。)
とのことで違うようです。まぁ、関数なのでコンソールから実行してみます。
makeInviteCode() 実行すると

data: Object { 
    data      : "invite_code", 
    enctype : "BASE64" 
}

データが来ました。 早速入力します。すると
f:id:naya_hira:20200216165514p:plain
ダメでした。enctype:BASE64とあるので変換してみます。 *2
オンラインサイトで変換ができます。 (無断掲載は怖いので各自で調べてください) 変換すると
In order to generate the invite code, make a POST request to /api/invite/generate
と出力できました。指示通りPOSTします。 POSTをするためにコマンドプロンプトから実行します。
curl -XPOST https://www.hackthebox.eu/api/invite/generate
すると

{
  "success" : 1,  
  "data":   
    {  
      "code":  "invite_code",
      "format" : "encoded"
     },
    "0" : 200 
}

またフォーマットがencodedになっているのでもう一度
BASE64で変換して招待コードを入力します。

f:id:naya_hira:20200216172954p:plain

ユーザー登録する

フォームに必要な情報を入力すると f:id:naya_hira:20200216173133p:plain
メールが送られてきます。 送られてきたメールのリンクをクリックして登録完了です。

最後に

完全にやり方を書いてしまい、すみませんでした。 何か指摘されたら消すので許してください。 長すぎて、登録だけで力が尽きました。 今回はここまでです。 やる気があればまたやります。