TryHackMe「Linux Fundamentals Part 2 + Part 3」

================================================== PART 2 Linux Fundamentals Part 2 ================================================== 1. TryHackMe環境への接続 TryHackMeのターゲットマシンへ接続するためにOpenVPNを使用した。 OpenVPNは、 自分のKali ↓ TryHackMeのVPNネットワーク ↓ TryHackMeのターゲット という安全な経路を作る。 ================================================== 2. OpenVPN設定ファイル TryHackMeから取得したVPN設定ファイル: .ovpn を使って接続する。 例: sudo openvpn ファイル名.ovpn OpenVPN接続中はターミナルをそのまま動かしておく。 ================================================== 3. OpenVPNを切る方法 OpenVPNを起動しているターミナルで: Ctrl + C 意味: 現在フォアグラウンドで動いているOpenVPNプロセスを終了する。 VPN接続も切断される。 ================================================== 4. tun0 OpenVPNへ正常接続すると、 tun0 という仮想ネットワークインターフェースが作られる。 確認: ip addr または: ifconfig tun0が存在すれば、VPN接続ができていることを確認できる。 ================================================== 5. ip addr ip addr 意味: LinuxマシンのネットワークインターフェースとIPアドレスを確認する。 確認できるもの: lo eth0 tun0 など。 ================================================== 6. ifconfig ifconfig 意味: ネットワークインターフェースやIPアドレスを確認する。 古くから使われるコマンド。 現在は: ip addr が標準的。 ================================================== 7. ping ping IPアドレス 意味: 相手のマシンとネットワーク通信できるか確認する。 例: ping 10.x.x.x 返答: 64 bytes from ... があれば通信できている。 停止: Ctrl + C ================================================== 8. pingで確認できること ping成功: 自分 ↓ ネットワーク ↓ 相手 まで通信できる。 ただしpingに応答しない設定のマシンもあるため、 ping失敗 = 必ず相手が停止 ではない。 ================================================== 9. TryHackMe用ディレクトリ整理 学習ファイルを整理するため、 TryHackMe を短縮して: thm というディレクトリを使用。 例: ~/thm 各ルームごとにサブディレクトリを作る。 ================================================== 10. mkdir mkdir ディレクトリ名 意味: 新しいディレクトリを作る。 例: mkdir thm mkdir vpn ================================================== 11. ディレクトリ階層 例: ~/thm/vpn 意味: ホームディレクトリ ↓ thm ↓ vpn という階層。 ================================================== 12. ~ の意味 ~ は現在のユーザーのホームディレクトリ。 例: Kaliなら: /home/kali TryHackMeのtryhackmeユーザーなら: /home/tryhackme ================================================== 13. cd cd ディレクトリ名 意味: ディレクトリを移動する。 例: cd thm 一つ上: cd .. ホーム: cd ~ または: cd ================================================== 14. pwd pwd 意味: 現在いるディレクトリを表示する。 例: /home/tryhackme または: /home/kali/thm ================================================== 15. ls ls 意味: 現在のディレクトリの中身を表示する。 ================================================== 16. ls -l ls -l 意味: ファイルやディレクトリを詳細表示する。 確認できるもの: 権限 所有者 グループ サイズ 日時 ファイル名 ================================================== 17. ls -a ls -a 意味: 隠しファイルも含めて表示する。 Linuxでは: .ファイル名 は隠しファイル。 ================================================== 18. ls -lah ls -lah -l → 詳細表示 -a → 隠しファイルも表示 -h → サイズを人間が読みやすい形にする 例: 52K 4.0K 20 ================================================== 19. ls --help ls --help 意味: lsコマンドの使い方やオプション一覧を見る。 例: -a --all -l 詳細表示 -h 読みやすいサイズ表示 ================================================== 20. --help 多くのLinuxコマンドで: コマンド --help とすると簡単な使用方法を確認できる。 例: ls --help ================================================== 21. man man コマンド名 意味: Linuxのマニュアルを開く。 例: man ls man cat man chmod コマンドの詳細な説明やオプションを確認できる。 ================================================== 22. cat cat ファイル名 意味: テキストファイルの中身を表示する。 例: cat test cat task3 ================================================== 23. touch touch ファイル名 意味: 空のファイルを作る。 例: touch test.txt 既存ファイルなら更新時刻を変更する用途もある。 ================================================== 24. nano nano ファイル名 意味: ターミナル上でテキストファイルを編集する。 例: nano test ================================================== 25. nanoの保存 Ctrl + O 意味: Write Out ファイルを保存する。 ================================================== 26. nanoの終了 Ctrl + X 意味: nanoを終了する。 ================================================== 27. cp cp コピー元 コピー先 意味: ファイルをコピーする。 例: cp file1.txt file2.txt ================================================== 28. cpと元ファイル cpはコピーなので、 元ファイルは残る。 例: file1.txt ↓ cp file2.txt 結果: file1.txt file2.txt 両方存在する。 ================================================== 29. cp -R cp -R ディレクトリ コピー先 意味: ディレクトリとその中身を再帰的にコピーする。 -R → Recursive ================================================== 30. mv mv 元 移動先 意味: ファイルやディレクトリを移動する。 または名前変更にも使う。 例: mv old.txt new.txt 意味: old.txtをnew.txtへ名前変更。 ================================================== 31. rm rm ファイル名 意味: ファイルを削除する。 基本的にゴミ箱には入らない。 ================================================== 32. rm -r rm -r ディレクトリ 意味: ディレクトリと中身を削除する。 -r → Recursive ================================================== 33. 切り取りとの違い mvはGUIの「切り取り→貼り付け」に近い。 cpはGUIの「コピー→貼り付け」に近い。 mvを使うと元の場所からなくなる。 cpなら元が残る。 ================================================== 34. Linuxのルートディレクトリ / Linuxのファイルシステムの一番上。 すべてのディレクトリは/の下に存在する。 ================================================== 35. /home /home 一般ユーザーのホームディレクトリが置かれる。 例: /home/tryhackme /home/kali ================================================== 36. /root /root rootユーザー専用のホームディレクトリ。 一般ユーザーの: /home/ユーザー名 とは別。 ================================================== 37. /etc /etc Linuxの設定ファイルが多く置かれる重要ディレクトリ。 例: /etc/passwd /etc/sudoers /etc/ssh /etc/apt ================================================== 38. /etc/passwd /etc/passwd ユーザーアカウント情報が記録されるファイル。 ユーザー名 UID GID ホームディレクトリ ログインシェル などの情報を持つ。 現在のLinuxでは通常、実際のパスワードそのものはここには保存されない。 ================================================== 39. /etc/sudoers /etc/sudoers sudoを使えるユーザーやグループ、許可されたコマンドなどを定義する重要な設定ファイル。 ================================================== 40. /var /var 変化するデータが置かれる場所。 例: ログ キャッシュ メール バックアップ Web関連データ ================================================== 41. /var/log /var/log Linuxの各種ログが保存される。 後のPart 3でも使用した。 ================================================== 42. /tmp /tmp 一時ファイルを保存するためのディレクトリ。 多くのユーザーが書き込み可能なことが多い。 再起動時などに内容が消える場合がある。 ================================================== 43. rootユーザー root Linuxの最高権限を持つ管理者ユーザー。 ほぼすべてのファイルや設定を操作できる。 ================================================== 44. sudo sudo コマンド 意味: 許可されたユーザーが、一時的に管理者権限などでコマンドを実行する。 ================================================== 45. sudoers sudoを使えるかどうかはsudoers設定で管理される。 今回後に: tryhackme is not in the sudoers file も確認した。 ================================================== 46. Linuxのファイル権限 例: rwxr-xr-- 3つに分ける: rwx | r-x | r-- 所有者 | グループ | その他 ================================================== 47. r r = read 読み取り権限。 ================================================== 48. w w = write 書き込み権限。 ================================================== 49. x x = execute 実行権限。 ================================================== 50. 権限の数字表記 r = 4 w = 2 x = 1 組み合わせる。 ================================================== 51. chmod 755 755: 7 → rwx → 4 + 2 + 1 5 → r-x → 4 + 1 5 → r-x つまり: rwxr-xr-x ================================================== 52. 755がよく使われる理由 実行ファイルやスクリプト、ディレクトリなどでよく見られる。 所有者: 読み・書き・実行 その他: 読み・実行 という形。 ================================================== 53. ファイル所有者 ls -lで表示される: 所有者 は、そのファイルを所有するユーザー。 ================================================== 54. グループ Linuxではユーザーをグループに所属させることができる。 ファイルには: 所有者 グループ の両方が設定される。 ================================================== 55. 所有者・グループ・その他 パーミッション: rwxr-xr-- は: 所有者 グループ その他 の3種類に対して権限を指定している。 ================================================== 56. Permission denied Permission denied 意味: 現在のユーザーに必要な権限がない。 後のApacheログでも実際に遭遇した。 ================================================== 57. ファイルかディレクトリか 例: cd task3 結果: Not a directory 意味: task3はディレクトリではなくファイル。 cdはディレクトリ移動用なのでファイルには入れない。 ================================================== 58. No such file or directory 意味: 指定したファイルまたはディレクトリが存在しない。 スペルミスや現在地の間違いも確認する。 ================================================== 59. Tab補完 Tabキーを押すと、 ファイル名 ディレクトリ名 コマンド名 などを補完できる。 SSH先でも基本的に使用可能。 候補が複数ある場合: Tabを2回 で候補一覧が表示される場合がある。 ================================================== 60. SSH先でもシェル機能が使える SSHで入った先でも、 Tab補完 履歴 bash操作 などは基本的にリモート側のシェル機能として使える。 ================================================== PART 3 Linux Fundamentals Part 3 ================================================== 61. wget wget URL 意味: Webサーバーなどからファイルをダウンロードする。 例: wget http://10.49.185.209:8000/.flag.txt ================================================== 62. wgetの保存先 wgetは基本的に、 wgetを実行した現在のディレクトリ へ保存する。 ================================================== 63. HTTP URLの読み方 例: http://10.49.185.209:8000/.flag.txt 分解: http:// → HTTP通信 10.49.185.209 → サーバーIP 8000 → ポート番号 .flag.txt → 要求するファイル ================================================== 64. Python簡易HTTPサーバー python3 -m http.server 意味: 現在のディレクトリを簡易Webサーバーとして公開する。 標準: 8000番ポート ================================================== 65. python3 Python 3を実行する。 ================================================== 66. -m Pythonのモジュールを実行する。 ================================================== 67. http.server Python標準の簡易HTTPサーバーモジュール。 ================================================== 68. Serving HTTP on 0.0.0.0 port 8000 意味: 8000番ポートでHTTPサーバーが待ち受けている。 ================================================== 69. 今回のサーバー側 TryHackMeターゲット: tryhackme@linux3 で: python3 -m http.server を実行。 ターゲット側がファイルを提供するサーバーになった。 ================================================== 70. 今回のクライアント側 自分のKali。 別ターミナルから: wget を使ってターゲットからファイルを取得した。 ================================================== 71. SSH接続は維持する ターゲットで: python3 -m http.server を起動したSSHターミナルは閉じない。 別のKaliターミナルを開いてwgetする。 ================================================== 72. SSHを切るとどうなるか 通常、SSHセッション内でフォアグラウンド実行しているプロセスはSSH切断とともに終了する可能性がある。 今回のHTTPサーバーもSSHを維持したまま使用した。 ================================================== 73. 今回のファイル転送構造 Kali ↓ SSH TryHackMeターゲット ターゲット上: /home/tryhackme/.flag.txt ↓ python3 -m http.server ↓ HTTP公開 ↓ Kaliで: wget http://ターゲットIP:8000/.flag.txt ↓ Kaliへ保存 ================================================== 74. .flag.txt 今回の対象ファイル: .flag.txt 先頭に「.」があるため隠しファイル。 ================================================== 75. flag.txtと.flag.txtの違い flag.txt と .flag.txt は完全に別のファイル名。 Linuxでは先頭の.もファイル名の一部。 ================================================== 76. 404 File not found 最初: wget http://IP:8000/flag.txt としたため: 404 File not found になった。 意味: Webサーバーへは接続成功。 しかし指定したファイルが存在しない。 ================================================== 77. 200 OK 正しく: wget http://IP:8000/.flag.txt とすると: 200 OK になった。 意味: HTTPリクエスト成功。 ================================================== 78. サーバー側のGETログ HTTPサーバー側: GET /.flag.txt HTTP/1.1" 200 意味: クライアントが.flag.txtを要求し、正常に返した。 ================================================== 79. HTTPサーバー停止 Ctrl + C で: python3 -m http.server を停止した。 ================================================== 80. SCP SCP: Secure Copy SSHを使って別マシンとの間でファイルをコピーする。 ================================================== 81. SCP基本形 scp SOURCE DESTINATION ================================================== 82. ローカルからリモート 例: scp important.txt ubuntu@192.168.1.30:/home/ubuntu/transferred.txt 意味: 自分のimportant.txtを相手へ送る。 ================================================== 83. リモートからローカル 例: scp ubuntu@192.168.1.30:/home/ubuntu/documents.txt notes.txt 意味: 相手のdocuments.txtを自分へ取得する。 ================================================== 84. wgetとscp wget → HTTPなどから取得 scp → SSHを使ってファイルコピー ================================================== 85. プロセス プロセス: 現在Linux上で動いているプログラム。 ================================================== 86. PID PID: Process ID 各プロセスに付く識別番号。 ================================================== 87. PIDの教材上の基本 前のPIDが300なら、 次のプロセスは: 301 という基本概念を学習した。 ================================================== 88. ps ps 現在のセッション周辺のプロセスを表示する。 ================================================== 89. ps aux ps aux 他ユーザーやシステムプロセスを含め、幅広く表示する。 ================================================== 90. ps auxの主な列 USER → 実行ユーザー PID → プロセスID %CPU → CPU使用率 %MEM → メモリ使用率 COMMAND → 実行コマンド ================================================== 91. grep grep 文字列 指定した文字列を含む行を探す。 ================================================== 92. パイプ | | 左のコマンド結果を右のコマンドへ渡す。 例: ps aux | grep THM 意味: 全プロセス一覧からTHMを含む行だけ探す。 ================================================== 93. top top プロセスやCPU、メモリをリアルタイム表示する。 ps aux → 一回の一覧 top → 継続更新 ================================================== 94. top終了 q ================================================== 95. kill kill PID 指定したPIDへシグナルを送る。 ================================================== 96. SIGTERM 正常終了要求。 プロセスに後片付けをさせて終了する。 教材の: cleanly kill の答え。 ================================================== 97. SIGKILL 強制終了。 例: kill -9 PID ================================================== 98. SIGSTOP プロセスを停止・一時停止する。 ================================================== 99. killとサービス停止の違い kill PID → 個別プロセスを直接止める systemctl stop サービス名 → systemd管理下のサービスを正式に停止 ================================================== 100. systemd Linuxのサービスや起動処理を管理する仕組み。 ================================================== 101. systemctl systemdを操作するコマンド。 ================================================== 102. systemctl start systemctl start myservice 今すぐサービスを起動。 ================================================== 103. systemctl stop systemctl stop myservice サービスを停止。 ================================================== 104. systemctl enable systemctl enable myservice OS起動時に自動起動する設定。 ================================================== 105. systemctl disable 自動起動設定を無効化。 ================================================== 106. systemctl status サービス状態を確認。 ================================================== 107. startとenable start → 今すぐ起動 enable → OS起動時に自動起動 ================================================== 108. フォアグラウンド ターミナルの前面で動いているプロセス。 例: python3 -m http.server ================================================== 109. バックグラウンド 裏でプロセスを動かす。 例: command & ================================================== 110. & コマンド末尾に: & を付けるとバックグラウンド実行。 ================================================== 111. Ctrl + Z 現在のフォアグラウンド処理を一時停止。 ================================================== 112. Ctrl + CとCtrl + Z Ctrl + C → 終了 Ctrl + Z → 一時停止 ================================================== 113. fg fg バックグラウンドまたは停止状態のジョブをフォアグラウンドへ戻す。 ================================================== 114. cron 決めた時刻・周期で処理を自動実行する仕組み。 ================================================== 115. crontab cronの実行予定を書く設定。 ================================================== 116. crontab -l 設定されているcronジョブを一覧表示。 ================================================== 117. crontab -e cron設定を編集。 ================================================== 118. cron書式 MIN HOUR DOM MON DOW COMMAND 分 時 日 月 曜日 コマンド ================================================== 119. * cronの* その項目はすべて対象。 ================================================== 120. */12 例: 0 */12 * * * 12時間ごと。 ================================================== 121. @reboot @reboot OS起動時に実行。 ================================================== 122. 実際に見たcron設定 @reboot /var/opt/processes.sh 意味: Linux起動時に: /var/opt/processes.sh を実行。 ================================================== 123. cronと権限昇格 root権限で定期実行されるスクリプトに一般ユーザーが書き込めると、 権限昇格につながる可能性がある。 ================================================== 124. apt Debian系Linuxのパッケージ管理ツール。 ================================================== 125. パッケージ Linuxでインストールしやすい形にまとめられたソフトウェア。 ================================================== 126. リポジトリ ソフトウェア配布元。 ソフトウェア倉庫のようなもの。 ================================================== 127. apt update パッケージ一覧情報を更新。 ================================================== 128. apt upgrade インストール済みパッケージを更新。 ================================================== 129. apt updateとupgrade update → 最新版の情報を取得 upgrade → 実際にソフトを更新 ================================================== 130. apt install apt install パッケージ名 パッケージをインストール。 ================================================== 131. apt remove apt remove パッケージ名 パッケージを削除。 ================================================== 132. /etc/apt apt関連設定。 ================================================== 133. sources.list aptが参照するリポジトリ設定。 ================================================== 134. sources.list.d 追加した外部リポジトリなどを個別管理。 ================================================== 135. add-apt-repository リポジトリを追加するコマンド。 ================================================== 136. dpkg Debian系のパッケージを直接扱うツール。 ================================================== 137. GPGキー ソフトウェアやリポジトリの提供者・署名の信頼確認に使われる。 ================================================== 138. TryHackMe環境ではapt実習なし 今回のTaskではTryHackMeインスタンスにインターネット接続がないため、 実際の外部リポジトリ追加・インストールはせず、説明を読むだけだった。 ================================================== 139. ログ Linux上で起きた出来事を記録するファイル。 ================================================== 140. /var/log 多くのログが置かれる。 ================================================== 141. 今日確認したログ類 auth.log syslog kern.log dpkg.log apache2/ apt/ journal/ wtmp btmp ================================================== 142. Apache2 Webサーバー。 Webアクセスの記録などを残す。 ================================================== 143. /var/log/apache2 Apacheのログディレクトリ。 ================================================== 144. access.log Webアクセス記録。 ================================================== 145. error.log Apacheエラー記録。 ================================================== 146. access.log.1 1世代前のアクセスログ。 ================================================== 147. ログローテーション 古いログを別ファイルへ移し、必要に応じて圧縮する仕組み。 例: access.log access.log.1 access.log.2.gz ================================================== 148. .gz gzip圧縮されたファイル。 ================================================== 149. Apacheログを読む 今回: cat access.log ↓ Permission denied ================================================== 150. sudoで読む試行 sudo cat access.log ↓ tryhackme is not in the sudoers file ================================================== 151. 権限確認 ls -lah で確認。 ================================================== 152. access.logの権限 -rw-r----- 所有者: root グループ: adm tryhackmeユーザーには読み取り権限なし。 ================================================== 153. access.log.1の権限 -rwxrwxrwx 所有者: tryhackme グループ: tryhackme だったため読めた。 ================================================== 154. access.log.1を表示 cat access.log.1 ================================================== 155. Apacheアクセスログ 実際のログ: 10.9.232.111 - - [04/May/2021:18:18:16 +0000] "GET /catsanddogs.jpg HTTP/1.1" 200 ... ================================================== 156. ApacheログのIP 10.9.232.111 → WebサイトへアクセスしたユーザーのIP。 ================================================== 157. GET HTTPメソッド。 サーバーからリソースを取得する要求。 ================================================== 158. /catsanddogs.jpg アクセスされたファイル。 ================================================== 159. HTTP/1.1 使用されたHTTPプロトコルのバージョン。 ================================================== 160. 200 HTTPステータスコード。 200 → 成功。 ================================================== 161. 今日出た主なエラー Permission denied → 権限不足 404 File not found → サーバーには到達したがファイルがない 200 OK → HTTP成功 No such file or directory → 指定先が存在しない Not a directory → 対象がディレクトリではない not in the sudoers file → sudo権限なし ================================================== 162. 今日使った主なコマンド総一覧 openvpn ip addr ifconfig ping mkdir pwd cd ls ls -l ls -a ls -lah ls --help man touch nano cat cp cp -R mv rm rm -r chmod ssh wget scp python3 -m http.server ps ps aux grep top kill systemctl crontab -l crontab -e apt update apt upgrade apt install apt remove add-apt-repository dpkg sudo ================================================== 163. 今日使った主なキー操作 Ctrl + C → 実行中処理を終了 Ctrl + Z → 処理を一時停止 Ctrl + O → nano保存 Ctrl + X → nano終了 Tab → 補完 Tabを2回 → 候補一覧表示 ================================================== 164. 今日学んだ確認の基本 今どのマシンか 今どのユーザーか 今どのディレクトリか ファイル名は正しいか 隠しファイルではないか 権限はあるか 所有者は誰か グループは何か プロセスは動いているか サービスは動いているか IPは正しいか ポートは正しいか HTTPステータスは何か ログには何が残っているか ================================================== 165. ペンテストに直接関係する今日の内容 VPN接続 → TryHackMe等の演習環境へ接続 SSH → リモートLinux操作 Linuxファイル操作 → 侵入後の調査 パーミッション → 権限昇格調査 wget → ファイル取得 scp → SSH経由転送 python3 -m http.server → 簡易ファイル配布 ps aux → プロセス列挙 grep → 必要な情報抽出 kill → プロセス管理 systemctl → サービス調査・管理 cron → 自動実行・権限昇格調査 apt → ソフト・リポジトリ管理 /var/log → ログ調査 Apache access.log → Webアクセス調査

一覧へ戻る