HackAll の攻略解説 – Level 1 – 5

2022-04-23インターネット,ハッキング,プログラミング

今回は ActiveTK 氏 が作った HackAll というハッキング能力を試すことができるサイトの攻略解説をします。

HackAll は下記の URL からアクセスできます。

ここでは、問題問題一つ一つに「概要・ヒント・解説」の順番で解説していきます。

また、基本答えは載せていません。ただ、 Level1 とかは簡単すぎて他に書きようがなかった(適当)ので例外として載せています。

あと、私は Firefox をメインに使ってるので画像などは基本 FireFox です。

では早速やっていきましょう。

始め方

まずは下のサイトにアクセスします。

すると、こんな画面になるので「こんなサイトハッキングしてやる!!」をクリックして始めましょう!

Level1 – ソースコード解析

概要

このステージでは、HTML のソースコードを解析して答えのパスワードを求める問題が出されます。

ソースコードを見ればすぐにわかると思います。

では、やっていきましょう。

ヒント

ヒントを見る

HTML のソースコードを見るにはページを右クリックして、「ページのソースを表示」またはその旨のメニューを選択すれば開くことができます。多くのブラウザでは Ctrl + U (Mac では Cmd + U )でも開くことができます。

ここで解析するときには プログラミングと JavaScript の基礎知識が必要になります。

解説

解説を見る

では、実際にソースコードを見てみましょう。

すると、下にスクロールしていくと JavaScript のコードが見えると思います。

この JavaScript コードを読めば、なにやら _() という関数があり、そこから取得してきた .value 要素が "mypass" と等しいか判断していて、正解していれば alert で正解していることを表示して location.href でページを遷移していることがわかります。

そして、コンソールで _("password") を実行してみると、なにやらパスワードの input タグが取得できて、 .value 属性で中身を取り出しているようです。

(デベロッパーツールのコンソールの使い方については Level2 の解説で詳しく触れます。)

なので、パスワードを入れる input タグに "mypass" を入れれば次のステージに行けます。

Level2 – デコード

概要

このステージでは、先ほどと同じくソースコードを解析する問題が出されています。

だけど、先ほどと同じく読んでも、なにやらパスワードが何かの形式にエンコードされているようです。

それに気をつけながらやってみましょう!

ヒント

ヒントを見る

ここも JavaScript の if 文を解析して解きます。

そこで、 if 文の右辺に注目してみましょう。なにやらエンコードされたパスワードを何かの関数に渡しているのがわかると思います。

しかもその関数は decode なんていうアヤシイ名前がついてる。

では、やってみましょう〜

解説

解説を見る

では、ソースコードを見ていきましょう。

するとさっきと似たようなものが見えると思います。

アルゴリズムも先ほどと同じです。

そして、よくみると先程の問題のパスワードの代わりに atk.decode("%E9%96...%81") なんていうコードが見えると思います。つまり、この if 文は入力されたパスワードが、「 atk.decode() 関数を通過したエンコードされていたパスワード」と同じかどうか判断しています。つまり atk.decode("%E9%96...%81") をパスワードとして入力すればこのステージはクリアできるということです。

ブラウザにはデベロッパーツールというものがあり、そこで JavaScript のコードを実行できるのでコピペして実行してみましょう。

デベロッパーツールは、ページを右クリックして「調査」とか「検証」とかいうメニューをクリックすれば出すことができます。

多くのブラウザでは Ctrl + Shift + I (Mac では Alt + Cmd + I )で開くこともできます。

開いたら、「コンソール」というタブを開きましょう。そこで atk.decode("%E9%96...%81") を実行してみましょう。そうすればこのステージはクリアできます。

当たり前ですが、コピーペーストするのはダブルクォーテーション("")の中身だけですよ〜。

Level3 – ユーザーエージェント取得

概要

このステージはユーザーエージェントを答える問題です。

簡単なので早速やってみましょう!

ヒント

ヒントを見る

デベロッパーツールのコンソールで、ある JavaScript コードを実行することにより自分のユーザーエージェントを取得することができますよ。

「JavaScript ユーザーエージェント」とかでググってみてください。

コンソールの開き方は Level2 の解説で書いています。

解説

解説を見る

ユーザーエージェントというのはクライアント(そのウェブサイトにアクセスする人)の情報が書かれています。

どんなデバイスか、どんなブラウザか、などの情報が記されています。

さて、このステージではユーザーエージェントをパスワードとして入力すれば正解になります。

ヒントでも書きましたが、自分のユーザーエージェントは、ある JavaScript のコードを実行すれば取得できます。

そのコードは、 navigator.userAgent というコードです。これはクライアントのユーザーエージェントが格納されている変数です。

なので、コンソールに navigator.userAgent と入れてみましょう。

そこで出てきた文字列をコンソールに入れて実行してみましょう。なんということでしょう!自分のユーザーエージェントが出てきました!!

これをパスワードとして入力ボックスに入れて次の問題だ!!

Level4 – ユーザーエージェント改竄

概要

このステージではユーザーエージェントを改竄して適当なパスワードを入れれば次のステージに行けます。

ユーザーエージェントというのはクライアントの情報が記されていると前ステージの解説で言いましたね。

世の中には、このタイプのデバイスにはこういう操作をしよう、などという操作があるサイトがたまにあります。

そういうタイプのサイトに対して、ハッカーたちは自分たちのユーザーエージェントを改ざんしてハッキングすることがあるんです。

ではやってみましょう!

ヒント

ヒントを見る

ユーザーエージェントは拡張機能を入れると改竄しやすいですよ。

だけど、 Burp Suite などのプロキシツールを使ってリクエストのヘッダを改竄することによってアクセスすることもできます。

解説では拡張機能による改竄をメインに解説します。 Burp Suite については筆者の余力があれば書いていこうと思っています。

プロキシによるリクエストヘッダを書き換える方法ですと、プロキシ設定にある “Match and Replace" という項目を使います。

これはリクエスト内に、条件に合った項目を変更するための設定です。

ここで、"Request header" 内の “User-Agent: … " という項目にマッチしたら “User-Agent: HackAll" に書き換えるように設定して、有効化してプロキシを通してアクセスすれば書き換えが成功します。

解説

解説を見る

では、まずは User-Agent Switcher という拡張機能をインストールしましょう。

Firefox: https://addons.mozilla.org/ja/firefox/addon/user-agent-switcher-revived/

Chrome: https://chrome.google.com/webstore/detail/user-agent-switcher/dbclpoekepcmadpkeaelmhiheolhjflj?hl=ja

これをインストールしたら拡張機能ツールバーからインストールした拡張機能を選択して開きましょう。

(Chrome の場合は下のようなアイコンをクリックしてお目当ての拡張機能を探してください。ピンマークをクリックすればツールバーにピン留めすることができます。)

するとこのようになったかと思います。

ここで左下の方にある鉛筆マークをクリックします。

すると、こんなモーダルウィンドウが出てくるので “HackAll" と入力して OK をクリックします。

これで先程の HackAll のページに戻って適当にパスワードを入れてログインしてみてください。

正解になるはずです。

Level5 – Cookie 操作

概要

このステージでは Cookie を追加・取得することでクリアできます。

もっと詳しく言えば、 key が UserID で value が ActiveTK の Cookie を追加し、 key が password の Cookie の value をパスワードとして入力すればクリアできます。

下におまけがありますが、基本は使わないでください。つまらないですよ。

一応僕の環境では FireFox も Chrome もブラウザオンリーでクリアできましたからね(圧)。

ヒント

ヒントを見る

取得はとても簡単です

デベロッパーツールのネットワークタブでリクエストヘッダ、またはレスポンスヘッダを見ればわかります。

次に追加ですね。

一番簡単な方法は JavaScript で Cookie を追加する方法です。

他には、拡張機能を使って追加する方法やプロキシを経由して追加する方法もありますが、ここでは JavaScript を使って追加する方法で行きます。

(理由は一番解説がしやすいからです。)

解説

解説を見る

では、まず key が password の Cookie の value を取得しましょう。

普通ならデベロッパーツールのコンソールで document.cookie を実行して取得できるんですが、今回はなぜかできません。僕もなぜかわかりませんが、おそらくレスポンスヘッダに Set-Cookie が指定されているからでしょう。

なので、レスポンスヘッダを見てみましょう。

まず、デベロッパーツールを開いてください。

次にネットワークタブを開いてください。

もしも、下のように表示されたらリロードしてください。

そうしたら、 /level5/ のところをクリックしましょう。

すると、 “set-cookie: password=loginnow" というのが見えるかと思います。

set-cookie というのはレスポンスヘッダないで Cookie を設定する役目があります。

よって、 key が password、 value が loginnow であるクッキーが登録されていることがわかります。これでパスワードが取得できました。

次に、 key が UserID で value が ActiveTK のクッキーを追加します。

これは document.cookie="" というコードをコンソールで実行すればできます。

え、 = の右側を教えろだって?それくらいは自分で調べましょう。

「JavaScript Cookie 追加」で検索。

※「Cookie “UserID” は “secure” 属性なしで」とかいう警告が出ることがありますが、これはサイトの安全のための警告です。今回は気にしなくても結構です。

Tips

Level3 – ユーザーエージェント取得

JavaScript を活用すれば、 document.querySelector('input').value = navigator.userAgent をコンソールに入力して実行すればパパって input タグにユーザーエージェントを入れてくれます。