7日間でハッキングをはじめる本をやる
Day 1
最初は環境構築のようだ。
環境構築で1日?と思ったが、やってみると確かに結構大変。
Kali Linuxをインストール
MacのM1を使っているので、UTMをbrew経由でインストールし、公式からKali Linuxのisoをダウンロードして読み込ませる。
無事、Kali Linuxが立ち上がる。
途中いろいろ詰まったりしたが
地味に難しい。
いざKali Linuxを触ってみるも
ウィンドウやフォントなどの調整をしないとデフォルトだと小さすぎて目が痛くなるので調整する。
ここら辺を参考にさせてもらった。
キーボードを本に倣ってjaで設定したが、自分のパソコンはUSキーボードなので操作感が全然異なりまともにURLすら入力できなかったのでUSに変更。
特に問題なくなった。
その工程で以下を参考にさせてもらったが、日本語じゃなくなったので行う必要はなかった。
TryHackMeにログイン
TryHackMeのサイトでアカウントを作成する。
本に倣ってVPNに接続する。
しかし、自分が選んだリージョンが悪かったらしく、最初は接続できなかった(不具合中)
別のリージョンを選択し、接続すると無事connectedされた。
初のルーム
VPNにアクセスして表示されたページのフラグをコピペして完了。
人生初のフラグ取得だった。
地味に大変だった。
しかし、これでやっとスタートラインに立てたと思われるので、ワクワクが止まらない。
Day2へ続く。
Day 2
ポートスキャン
ポートスキャンを行い、フラグ取得を目指すようだ。
nmapを利用して、マシンに空いているポートを検査していく。
nmapのオプションを使いこなすと高度なスキャンが行えるよう。
ここでは以下を使用
- -sV
- -Pn
- -oN <ファイル名>
- -v
nmapの結果から考察し、鍵などの突破口を探す。
dirbを使う
Kali Linuxに搭載されているツールを使ってみる。
webコンテンツスキャナーというもので、隠しオブジェクトを探すツールのようだ。
webサーバに対して辞書攻撃を行い、応答を分析するみたい。
マシンに対して実行してみると、思ったより時間がかかるようだ。
実行している間に本を読み進めるというやり方をすると良さそうだと思った。
結果、5分くらいで特定のディレクトリを見つけることができた。
ちょっとここでハマったのが
本に倣ってやると、コマンドのスペースがないように見えてしまう。
dirb http://XXX.XXX.XX /usr/share/dirb/wordlists/small.txt
としなきゃいけないのが、http://XXX.XXX.XX/usr/share/dirb/wordlists/small.txt
といったようにひとつのURLのように見えてしまい、それで実行すると25分くらいかかってしまった。
非常に無駄な時間だったので、これから本をやる人は気をつけてください。
Samba
Sambeはファイルなどの情報共有ツール。
ここでいろいろなやりとりが行われている可能性があり、その中から攻撃のヒントになりうるものを見つけることで糸口が見つかるかもしれないという見通しが立てた。
パスワード総当たり
Kali Linuxに入っているツールであるhydraを使って、パスワードの総当たり攻撃を行う。
sshのログイン情報を引っ張り出す。
john the ripper
パスワード解析用のツール
これでパスワードを総当たりで見つけ出すという辞書攻撃を行う。感想
HTMLファイルにコメントを残す時も気を付ける必要があるなと思った。
最近はSPAになっていて、直接HTMLを書くことはあんまりなくなっているが、HTMLに書いたコメントが攻撃者のヒントになりうるというのを目の当たりにして、ちょっとビビった。
いくつかKaliのツールを使ってみた感じ
実行自体はすごく地味で、ひたすら待つというのがメインだった。
しかし、情報を引っ張ってくるまでのプロセスが面白く、まだ自分の手法や手持ちのコマが少ないのでまどろっこしいが、このコマを増やしていきたいという気持ちが高まってきた。
Day3
実際にあったwindowsの脆弱性をついたCTFとなる。
nmapを使っていくようだ。
--script vuln
というオプションをつけてnmapを実行する。
これは、脆弱性の検出やブルートフォース攻撃を行うことができる。
リモートコード実行の脆弱性という新しい言葉が出た。
インターネットなどんネットワークを介して、外部から攻撃者がコンピュータやサーバーに不正なコードを送り込み、実行させることができるセキュリティ上の問題のようだ。
RCEと略されるみたい。
そしてもう一つ、新しい言葉が、「エクスプロイト」。
攻撃に使うコードのことや、実際の攻撃のことを言う。
Kaliにある、Metasploit Frameworkを利用する。
Metasploit Framework
立ち上がったら、search CVE-XXXX-XXXX
でCVEを検索し、マッチしたモジュールが列挙されるので
使いたいモジュールを use <番号>
により使用する。
実行は、 exploit
か run
hashdump
ターゲットマシンに存在するすべてのユーザーアカウントの情報をダンプするコマンド。
カンマ区切りで項目を表示してくれる。
LMハッシュ
LAN Manager ハッシュ。
古いwindowsネットワークで使用されていたパスワードのハッシュ化する方法。
最新のwindowsでは、NTLMハッシュ(NT LAN Managerハッシュ)でハッシュ化されている。
レインボーテーブル
ハッシュのテーブルを持っていて、ハッシュが一致するかを総当たりして、マッチすると元の値が分かるというもの。
xfreerdp
リモートでwindowsにアクセスするツール
パスワードが分かったら、windowsにアクセスしてログインすることでLinuxからwindowsを扱うことができる。
感想
いろんな攻撃手法があることを学んだ。
そしてツールも多く、どの場面でどのツールを使うかが難しいなと思った。
本に倣ってやっているからまだなんとかできているが、自分の知識だけでクリアは難しかっただろう。
ただ、プログラミングでも写経が有効なのと同じで、CTFも写経のようにまずは手に馴染むまでは本やいろんな人の方法から手法を学ぶのが良いと思った。
Day4
OWASPとBurp Suiteを使って、HTTPへの攻撃を行う。
FormにSQLを仕込んで、SQLインジェクションを行う手法を学ぶ。
OWASPとBurpについては以下を参照
しかしやってみると、Kaliではブラウザが立ち上がらない問題が発生。
原因は不明だが、Burpのインストールで結構時間かかっていたので、再インストールなどをやる気力はなく、諦めたので自分のメインOSにBurpをbrewでインストールし、vpnを接続し直し、ブラウザを立ち上げOWASP Juice Shopにアクセスをした。
SQLインジェクション
クエリに不正なデータを注入する攻撃。
サービス提供者の意図とは違うSQL文を発行・実行し、データベースを操作するとができる。
OWASP Juice ShopにはSQLインジェクションが仕掛けられるようになっている。
いきなりadmin権限ユーザーを取得できてしまってビックリしたが、世の中にはこういうサイトもあるかもしれないと思うとかなり怖いと感じる。
Burpでの攻撃も行う。
ここでは、RepeaterとIntruderを使う。
Repeaterは、TargetのSite Mapから送り、リクエスト情報を改ざんし、リクエストを送ることができる。
Intruderは、辞書攻撃によりパスワードを洗い出すという機能で、Day2の時のように辞書がKaliに用意されているので、それを利用して攻撃を仕掛ける。
今回は、SecListsのPasswordを使いました。
本書では扱ってないですが、このRoomをクリアするために
以下のXSSでのInjectionを試みます。
- 反射型XSS(Reflected XSS)
- 蓄積型XSS(Stored XSS)
- DOM-based XSS
それぞれJavaScriptのスクリプトを埋め込んで実行することが確認する感じです。
感想
Burpのブラウザが自分の環境のKaliで使えなかったり、OWAS Juice ShopがVPN繋いでて、Burpのブラウザ経由しているからということから重いということもあり
個人的に結構面倒くさい章に感じました。
ただ、BurpもOWASPも今後はセキュリティとして触る機会は多いと思うので、使い方であったり知識という意味では非常に良かった章でした。
Day5
Webフォームからの攻撃を行うRoom。
まずは、nmapでIPに対してscanをかける。
それで洗い出されたPortを元に仮説を立てていく。(そろそろこの流れに慣れてきた)
ftpサーバがあることが確認できたので、そこに対して
anonymousユーザーでログインを試みる。(ftpサーバは使ったことはあったが、anonymousユーザーがあることを初めて知った)
しかし、当然anonymousではログインできなかった。
そこで、再びdirbを使って辞書攻撃を仕掛ける。
書にある通りに書くと、僕の環境ではうまくできなかった。
違いとしては
- hostの最後に / をつける ( 例: http://10.10.119.321:3333/ )
- -Rの位置をhostの後に持っていく(本書だと、hostの前になっているのでうまくいかない)
Roomでは、gobusterというツールを使って調べる。
やっていることは、dirbと同じことと思われる。
small.txtを渡して、該当のIPに対して攻撃を仕掛ける。
dirbではタイムアウトが発生してうまくいかなかったので、gobusterを使うことで見つけることができた。
早さもgobusterの方が早いので、こっちの方がお気に入り。
internalというパスを発見する。
こういった、internalという分かりやすいパスは本来避けた方がいいのだなと気づかせてくれた。
内部的なページだからと油断すると、こういう攻撃を受ける手がかりになってしまうのは怖い。
internal/upload パスにて、ディレクトリインデックス機能が有効になっているため
ディレクトリがブラウザで確認できるようになっている。(非常に状態としては良くない)
internalのパスで画像のアップロードがあるので、試みるも拡張子が合わないとのこと。
該当の拡張子を探すために、Burpを使うことになるのだが、自分はKali上で行えないので、本を読むだけにした。
Day4でもやったように、拡張子の部分をintruderでpayloadを仕込むといった感じで辞書攻撃を行う。
/usr/share/seclists/Fuzzing/extensions-most-common.fuzz.txt
を使うようだ。
.phtmlという拡張子を使うということが、intruderのresponseの大きさで分かるようだ。
リバースシェル
ターゲットマシンから、ローカルマシンに対して接続することで、経路を開き外側からの接続を可能にすること。
今回は、Kaliにあるリバースシェルを使って、アップロードしリバースシェルを動かすようにする。
ファイアウォール
ファイアウォールには、ネットワークファイアウォールとローカルファイアウォールが存在する。
ネットワークフォイアウォールは、異なるネットワーク間の通信を監視する。許可された通信のみがネットワーク間を通過できるように制御するデバイス、もしくはソフトウェア。
ローカルファイウォールは、個々のコンピューターにインストールされるソフトウェアで、そのコンピューターへの不正な通信を制限する役割を持つ。
nc
リバースシェルを動かすために、ポートをリッスンする必要がある。
そのためのツール。
-l: リスニングモードで、接続を待ち受ける
-v: 冗長モード
-n: DNSの解決を行わない IPアドレスで通信したい時に使う
-p: 待ちうけるポート番号を指定する
ターゲットマシンでリバースシェルを実行することで、シェルがとれる。
レピュテーションリスク
ncでポートを待ち受けて、PHPを実行することでターゲットマシンを操作し、改ざんを行なった。
それにより、サイトが書き換わり、評判であったり信頼を失うことにもなる。
そのようなことをレピュテーションリスクと呼ぶ、
SUID
権限昇格のテクニックの一つ。
Set User IDのことを指す。
誰が実行しても所有者権限で実行できる特殊な属性を持つ。
Linuxのディレクトリの分け方
/bin 一般ユーザーでも実行可能な基本的なコマンド
/sbin ルートユーザーまたは特権を持つユーザー専用のコマンド
/usr/bin ユーザーが一般的に扱うコマンドで緊急時のシステム保守に必須ではないもの
/usr/lib プログラムに必要な共有ライブラリ
GTFOBins
特権昇格のために利用できるテクニックを検索できるサイト。
これで、systemctlがSUIDの権限がついてる時の対応を確認する。
それにより、rootユーザーでしか見れない情報をtmpファイルに書き込んで確認することができた。
感想
今回もBurpは少し出たが、Intruderの使い方を学んでいたので、何をしたかだけ確認して実際は行わずに済ませた。
いろんなツールを使って、さらには権限昇格というのを目指してやったことでいろんな知識が入ってきた。
まだまだ使いこなすとかまではいかないけど、ツールの存在を知っているだけでも何をしたら良いか、深掘りしていくことができるので、やはりこういう本で薄くでも触れておくのはいいなと感じた。
Day6
Active Directoryについて扱う章。
情報を管理する範囲のことを、ドメインと呼ぶ。
ドメイン情報を持っているサーバーのことを、ドメインコントローラー(DC)と呼ぶ。
いつものようにnmapでポート検索。
Kerberos認証
AS-REP Roasting攻撃をされると、クライアントのなりすましによりデータを取り出される可能性がある。
今回は、この攻撃を行ってみる。
kerbrute
kerbruteというツールを使ってユーザー名を列挙することをやります。
しかし、どうも自分のパソコンはM1のMacの上にKaliをUMTで入れてるからか、適切なアーキテクチャのバイナリがなく実行できるものがなかったようです。
Mac上でバイナリを実行した時は実行できたんですが、Kali上ではうまくできませんでした。
これはもうしょうがないので、ここで何時間も潰す訳にもいかず、実行はせずに次に進めます。
これにより、見当がつくユーザーが2つほど見つかるのが想定のようです。
Impacket
AS_REPを要求するためのツール。
通信を行う際に使用されるプロトコルをPython製のプログラムから操作しやすくするためのライブラリやツールの集まり。
Kaliにはデフォルトで入ってるので、それを利用する。
hashcat
ローカル環境でパスワードのハッシュを解析するツール。
ユーザーのパスワードが判明。
ターミナルだと見えにくい場合は、以下のようなサイトで見るのもあるらしい。
ログインする
smbのポートが空いているので、ストレージサーバにアクセスする。
smbclientを使って、spookysec.localにアクセス。
ユーザーはsvc-adminを利用。
backupというディレクトリを発見するので、ログインして中身を見てみる。
再びsmbclientを使って、今度はsvc-adminユーザーでログインし、ファイルを確認する。
backup_credentials.txt というファイルを発見する。
getコマンドでローカルに落としてくる。
エンコード化されたファイルの中身を確認できた。(アルファベットと数字しか使われていないことでBase64でエンコードされているというのを知ることができると初めて知った。)
それをbase64を-dオプションを使ってデコードすると、ユーザーIDとパスワードが確認できた。
DCSync攻撃
バックアップユーザーを利用して、その権限を悪用することをDCSync攻撃という。
secretsdupm.py を用いてダンプする。
Pass the Hash攻撃
盗んだターゲットのパスワードのハッシュ値を認証情報としてそのまま使用することでなりすます攻撃。
値を解析してパスワードを割り出すことはしない。
NTLM認証が有効な環境でユーザー名とパスワードハッシュを持っている時に使える攻撃。
Evil-WinRMを使う
Windowsリモート管理(WinRM)サービスを利用して、リモートのWIndowsにアクセスするためのツール。
これによって、Administratorユーザーでログインすることができ、無事権限昇格となる。
あとは、各ユーザーのDesktopにあるフラグを回収して終了。
感想
WindowsのActive Directoryを攻撃するというのは初めてだった。
ADは何か小難しそうなイメージがあるし、終わった後もまだ難しいと思っている。
しかし、特に日本の機関や組織ではよく使われているイメージもあり、CTFの中では避けては通れない項目の一つともなっているようなので、ここで1回触ることができてよかった。
さらには、攻撃手法も多種に渡って権限昇格を試みていたので、かなり難しいと思った。
レベルもMediumだったのもあり、このレベルをクリアするためのスキルや知識レベルも少し解像度が上がった。
Day7
WordPressへの攻撃を行う章。
早速、ターゲットマシンを立ち上げたら、nmapでScanをかける。
smbがポート開いてるので、smbclientで確認する。
ステガノグラフィ
あるデータを他のデータの中に隠す技術。
画像、音声、動画などのファイルに情報を埋め込むことが知られている。
steghideという、隠された情報を解析するためのツールがある。
しかし、これは間違いのルートを辿ったようだ。
WPScan
WordPressに対してScanをかけるツール。
--enumerate u のオプションをつけてWPScanを使ってみると
二人ほどユーザーが見つかる。
今度はこのユーザーに対して、パスワードの辞書攻撃を仕掛ける。
パスワードが割れたら、ログインしてみる。
アプリケーションにはログインできたが、サーバーの管理者権限を得ることなので、ここまででは何も得られていない。
WordPress 5.0が使われているので、脆弱性を調べてみると、CVE-2019-8942とCVE-2019-8943が該当するようだ。
これらは、任意のPHPのコードを実行できるようなので、リバースシェルを実行することでシェルをとることができる。
msfconsole を使って、エクスプロイトを試してみる。
search CVE-2019-8942 で調べて、PoCと呼ばれる概念実証のコードを実行して試してみる。
exploitにより、サーバーに侵入したはいいが、bjoelのユーザーではダメのようだ。
LinPEAS
ターゲットの初期侵入が終わったあとに実行することで権限昇格できそうな設定ミスを教えてくれる、強力で便利なシェルスクリプト。
Pythonでwebサーバを立てて、ターゲットマシンからwgetなどでLinPEASをwebサーバにとりにいかせ、遠隔操作を行う。
感想
WordPressは一番身近に感じる対象だったので頑張って取り組んだが、どうもexploitがタイムアウトになってしまったり、うまく接続ができなく環境の問題で終わることができなかった。
悔しいが、一通り読み終えて、いろいろとCTFのはじめの1歩といったところを把握できた気がする。
まだまだこれからCTFの長い道のりが続くかもしれないが、一先ずはKali LinuxをWindowsに入れるなりで、まともに動く環境を作るのを頑張ろうと思う。
Macでやっても、できなくはなかったが、なかなか厳しいところはあるというのが感想。