はじめに
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敗)
招待コードを探す
こんな感じの常套手段としてソースコードを見てみます。
開発ツールを開きます。招待コードを探しているのでinvite
で検索してみます。
そうすると<script defer src="/js/inviteapi.min.js"></script>
とそれっぽいものが読み込まれていました。開発ツールのElements(インスペクター)タブからSources(デバッガー)タブに変更してのぞいてみます。
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, {}))
うーん、最後が意味不明ですね。
とりあえず、p
をreturn
しているので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 の欠片があるのでアクセスしてみると
Whoops, looks like something went wrong.
(google訳:おっと、何かがおかしかったようです。)
とのことで違うようです。まぁ、関数なのでコンソールから実行してみます。
makeInviteCode()
実行すると
data: Object { data : "invite_code", enctype : "BASE64" }
データが来ました。
早速入力します。すると
ダメでした。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で変換して招待コードを入力します。
ユーザー登録する
フォームに必要な情報を入力すると
メールが送られてきます。
送られてきたメールのリンクをクリックして登録完了です。
最後に
完全にやり方を書いてしまい、すみませんでした。 何か指摘されたら消すので許してください。 長すぎて、登録だけで力が尽きました。 今回はここまでです。 やる気があればまたやります。