~無料で学べる HTB Academyの準備と実践~
目的
CTF に挑戦したいけど、どこから手をつければいいか分からないという方も多いのではないでしょうか。HTB Academy は、まさにそんなあなたのためのプラットフォームです。
今回は「Hacking」勉強するための人気プラットフォーム “HacktheBox” の始め方をご紹介します。
前回紹介した、TryHackMeと比較されることが多いです。
HTB が提供する実践的なセキュリティトレーニングプラットフォームであり、ゲーム形式で様々な脆弱性を発見し、エクスプロイトを作成する経験を通して、実戦的なスキルを習得できます。
その名も「HTB Academy」を始めようと思います。
準備
OpenVPN接続設定
HTB Academyにログインし、表示される画面(DashBoard)の自分のアイコンをクリック
“VPN Setting”を選択する。
表示された画面を下にスクロールして、”VPN Servers”のところで”PROTOCOL”をTCP443に変更してダウンロードする(DOWNLOAD VPN CONNECTION FILE)
ダウンロードしたファイルをKali Linux(攻撃マシン環境)上に保存します。
ここからは、TryHackMeのOpenVPNとは違うやり方をします。
LANポートのマーク > VPN Connections > Add a VPN connection… の順に選択
“Fortinet SSLVPN”を、”Import a saved VPN configuration…”に変更し、Create を選択
OpenVPN接続設定ファイル(academy-regular.ovpn)を保存した場所まで移動して選択する。表示された画面の Save を選択
・接続確認
LANポートのマーク > academy-regular
VPN Login Message
VPN connection has been successfully established.が表示されます。
同時に、LANポートのマークの横にIPアドレスが表示されます。
これで接続確認完了です。
Module実践
HTB academyはFreeプランの場合、与えられたcubeを使用してModuleという問題集を解いていきます。なので、cubeがなくなると新しいModuleにチャレンジしたい場合には購入する必要があります。ただ、ModuleをCompleteするといくらかのcubeをgetすることができます。
※うまく使っていくことで無課金でも楽しめると思います!
たくさんModuleをやりたいという人には有料プランもあるので、検討してみてください。
また、興味のある分野をやってみたいのであればSkill pathsというものがあり、関連のModuleをまとめて学習しやすい形にされているので利用してみてもいいかもしれません。
では実際にModuleをやっていきます。
今回は「Web Requests」をやります。
HyperText Transfer Protocol(HTTP)
・SSHで接続する
Target: Click here to spawn the target system!をクリックし、しばらく待つとIPが表示される。
表示後、 「ssh htb-student@<表示されたIP>」コマンドを実行して、yesを入力し、パスワード(HTB_@cademy_student!)を入力後、接続完了。
To get the flag, start the above exercise, then use cURL to download the file returned by ‘/download.php’ in the server shown above.
J:フラグを取得するには、上記の演習を開始し、curl を使用して、上記のサーバーに「/download.php」によって返されたファイルをダウンロードします。
「curl -s -O http://<表示されたIP:Port>/download.php」コマンドを実行し、現在いるディレクトリ(pwdで確認できる)にダウンロードされたファイルの内容を確認する。
-s silent 結果を表示しない(-sなしで試してみるとわかる)
-O 指定した URL の内容をそのままファイルとしてダウンロード
HTB{64$!c_cURL_u$3r}
HyperText Requests and Responses
What is the HTTP method used while intercepting the request? (case-sensitive)
J:リクエストをインターセプトするときに使用される HTTP メソッドは何ですか? (大文字と小文字を区別)
GET
Send a GET request to the above server, and read the response headers to find the version of Apache running on the server, then submit it as the answer. (answer format: X.Y.ZZ)
J:上記のサーバーに GET リクエストを送信し、レスポンス ヘッダーを読んでサーバー上で実行されている Apache のバージョンを見つけ、それを回答として送信します。 (回答形式:XYZZ)
「curl -X GET -I http://<表示されたIP:Port>」コマンドを実行し、Serverの項目を確認
-X HTTP メソッドの指定(GETやPOSTなど)
-I HTTPレスポンスヘッダーの取得
2.4.41
HTTP Headers
The server above loads the flag after the page is loaded. Use the Network tab in the browser devtools to see what requests are made by the page, and find the request to the flag.
J:上記のサーバーは、ページがロードされた後にフラグをロードします。ブラウザの開発ツールの [ネットワーク] タブを使用して、ページによってどのようなリクエストが行われているかを確認し、フラグへのリクエストを見つけます。
ChromeなどのブラウザにTarget(IP:Port)を入力する。画面が表示された後、右クリックして”検証”(Inspect)を選択する。
“Network”タブを選択し、更新をかけるとロードされるファイルが表示される。その中から”flag~”から始まるファイルの中身を確認する。
HTB{p493_r3qu3$t$_m0n!t0r}
GET
The exercise above seems to be broken, as it returns incorrect results. Use the browser devtools to see what is the request it is sending when we search, and use cURL to search for ‘flag’ and obtain the flag.
J:上記の演習は間違った結果を返すため、壊れているようです。ブラウザの devtools を使用して、検索時に送信されているリクエストを確認し、cURL を使用して「フラグ」を検索し、フラグを取得します。
ChromeなどのブラウザでTargetを入力し、ログインする。Devtools(検証)Networkタブを開き、虫眼鏡マークのところに任意のwordを入力する。そうするとsearch.php(検索)のリクエストが新たにできる。
そこを右クリックして Copy > Copy as cURL (bash)を選択する。ヘッダーはAuthorizationの部分以外は削除し、Search=? のところをflagに変更する。
「curl ‘http://IP:Port/search.php?search=flag’ -H ‘Authorization: Basic YWRtaW46YWRtaW4=’ 」コマンドを実行する。
HTB{curl_g3773r}
POST
Obtain a session cookie through a valid login, and then use the cookie with cURL to search for the flag through a JSON POST request to ‘/search.php’
J:有効なログインを通じてセッション Cookie を取得し、その Cookie を cURL とともに使用して、「/search.php」への JSON POST リクエストを通じてフラグを検索します。
ログインして、検証 > Network > リクエスト (IP)> Header > Cookieを取得する。
「curl -X POST -d ‘{“search”:”flag”}’ -b ‘PHPSESSID=mnvo6v82624g68jucbfl4d4p6i’ -H ‘Content-Type: application/json’ http://83.136.251.226:58519/search.php」コマンド実行
-d data
-b Cookie指定
-H ヘッダーの項目指定
json形式のデータを送りたいとき
curl -d ‘{json}’ -H ‘Content-Type: application/json’ https://example.com
HTB{p0$t_r3p34t3r}
CRUD API
First, try to update any city’s name to be ‘flag’. Then, delete any city. Once done, search for a city named ‘flag’ to get the flag.
J:まず、都市の名前を「flag」に更新してみます。次に、都市を削除します。完了したら、「flag」という名前の都市を検索して旗を取得します。
city_nameをflagにupdate:「curl -X PUT http://83.136.251.211:41066/api.php/city/London -d '{“city_name”:”flag”,”country_name”:””}’ -H ‘Content-Type: application/json’」コマンドを実行
cityをdelete:curl -X DELETE http://83.136.251.211:41066/api.php/city/Portland
curl -s http://83.136.251.211:41066/api.php/city/flag
HTB{crud_4p!_m4n!pul4t0r}
まとめ
今回はHack The Box Academyを取り組みました。
HTB Academy は、HTB CTF に挑戦するための最高の準備場所です。段階的に学習を進め、様々な種類の脆弱性に対する対策を学ぶことで、実戦的なスキルを身につけることができます。継続的に学習し、実践を重ねることで、あなたはきっと素晴らしいハッカーへと成長できるでしょう。
学習できたらHacktheBoxにチャレンジしてみてください!
ほかにもたくさんの勉強プラットフォームがあるのでおすすめを紹介したいと思います。
TryHackMe
PortSwigger
VulnHub
注意点
・違法行為は絶対に行わない: 許可なく他人のシステムに侵入することは違法行為です。必ず、合法的な範囲内で実験を行いましょう。
・倫理観を持つ: ハッキングは、倫理的な側面も考慮する必要があります。
・情報漏洩に注意: 実験中に個人情報や機密情報が漏洩しないよう、十分に注意しましょう。