攻撃者の視点で学ぶ!侵入直後のLinux調査フロー【THM対応】
こんにちは、オレンジ君です!
今回は 「Linux OSに侵入した時に最初にやるべき“権限昇格チェックリスト”」 をテーマに書いていこうと思います。
最近、TryHackMe(THM)でハッキングの勉強を始めてからというもの、「とりあえず侵入できたはいいけど、この後どうしたらいいんだ?」と思うことが増えてきました。
rootが取れるまでの道のりにはいくつか定番のルートがあるのですが、正直最初はそれも分からず、調べながら手探りで進めていました。
そこで今回は、自分がTHMを進める中で実際に行っている“侵入後の基本チェック”を整理してみようと思います。
「まずどこを見ればいいの?」「sudoは?SUIDは?」といった疑問を抱えた方や、「なんとなくやってるけど手順に自信がない…」という方にも、チェックリスト的に使える記事を目指しました。
あくまで自分の知識ベースで書いているので、漏れや改善の余地はあるかもしれませんが、同じように学んでいる方のヒントになればうれしいです!
それではいってみましょう!
侵入が成功した時に考えるべきこと
サーバに侵入できたとき、最初にやるべきことは“権限昇格”の可能性を探ることです!
なぜかというと、一般ユーザーのままではできることがかなり限られているからです。
読み取り専用のファイルしか見られなかったり、重要な設定ファイルや資格情報にアクセスできなかったり、ログの削除・バックドア設置などの“痕跡操作”もできません。
一方で、root(最高権限)を手に入れれば、システム上のほぼすべての操作が可能になります。
たとえば:
- 他ユーザーのパスワードファイルの閲覧・書き換え
- 機密ファイルの奪取(/root/flag.txt など)
- バックドアの仕込みや、ログの消去
- 権限設定やFirewallの無力化
- リバースシェルの常設化、さらなる横展開への足掛かり
つまり、ゴールに辿り着くには root が必要というのが大前提なんですね。
CTFの多くでも、user.txt と root.txt の2段構成になっているのはこのためです。
このあとの章では、その root にたどり着くために必要な情報収集や、よくある昇格パターンについて解説していきます。最初はパターンを覚えるのが大変かもしれませんが、手順をテンプレ化しておくと格段に判断が早くなりますよ👍
最初の情報収集テンプレ
侵入直後にまず確認すべきなのは、「自分がどこにいて、どのような立場なのか」。
rootを目指す前に、足場の把握が非常に大切です。
以下は、最初に叩くべき基本コマンドたちです。
whoami # 現在のユーザー名
id # 所属グループやUIDの確認
pwd # 現在地(カレントディレクトリ)
hostname # ホスト名の確認
uname -a # カーネルやアーキテクチャの情報
cat /etc/os-release # OSの種類とバージョン
このあたりで、
- 一般ユーザーかどうか
- UbuntuかCentOSかなどのOS判断
- 特定のExploitが使えそうか(カーネルバージョンなど)
といった初期判断ができます。
補足:シェルの様子がおかしい時、、
リバースシェルなどで接続できたはいいものの、
- タブ補完が効かない
- 矢印キーを押すと ^[[A と表示される
- Ctrl+C を押すとセッションが切れる
- clear や nano など一部のコマンドが使えない
…そんな「変なシェル」に遭遇したことはありませんか?
これは、擬似端末(PTY)ではなく“rawな標準入出力”でシェルがつながっているからです。
簡単に言えば、"ちゃんとした端末"として認識されていない状態なんですね。
python3 -c 'import pty; pty.spawn("/bin/bash")'
そんな時はこの一行で、今のシェルを“端末らしい振る舞い”ができるシェルに変えることができます。
矢印キーや Ctrl+C、タブ補完などが正常に動くようになり、“まともな対話型シェル”として操作しやすくなるので必要であれば使いましょう👍
チェックすべきポイント一覧
ある程度環境の全体像がつかめたら、次に「権限昇格できそうな穴がないか」を探していきます。
このフェーズで見ておくべきポイントは以下です。
sudo 権限の確認
sudo -l
- このコマンドは、現在のユーザーが
sudo
コマンドを使って実行できるコマンドの一覧を確認するために使用します。 - 特に、パスワードなし(NOPASSWD)で実行できるコマンドや、任意のコマンドを実行できる設定がされていないかを確認することが重要です。
(ALL : ALL) NOPASSWD: /usr/bin/vim
- 例えばこのような表記は
sudo vim
コマンドをパスワードなしで実行できます。 - そしてvimにはシェルコマンドを実行できる機能があるので、root権限でのシェル実行が簡単に行えます。
SUID ビットのあるファイル
find / -user root -perm -u=s -type f 2>/dev/null
- SUID(Set User ID)とは、ファイルを実行したユーザーに関係なく、ファイルの所有者の権限で実行されるという仕組みです。root 所有のファイルに SUID があると、本来 root にしかできない操作が、一般ユーザーでも可能になってしまうことがあります。
- 例えばvim, python, findなどのシェルコマンドを実行することもできるコマンドがSUIDの場合root権限で任意のコードを実行できるので狙い目です。
- どのコマンドが狙い目なのかはGTFOBinsに記載があるかどうかを判断軸にしましょう!
- ※GTFOBinsとは、セキュリティ制限を回避する手法をまとめたオープンソースプロジェクトのことです
cron の確認
crontab -l
- 現在のユーザーに設定されている
cron
ジョブ(定期実行タスク)を表示します。 - ユーザーに
cron
の権限があれば、自動実行されるスクリプトを悪用して特権昇格や情報収集が可能になる場合があります。
ls -la /etc/cron*
-
/etc/crontab
や/etc/cron.d/
,/etc/cron.daily/
などのディレクトリには、rootやシステム全体で実行される cron スクリプトが含まれます。 - ファイルやディレクトリに対して書き込み権限がある場合は、そこに任意のコードを追加することで root権限で自動実行させることができます。
悪用の例(特権昇格)
-
/etc/cron.daily/backup.sh
のようなファイルがroot
によって定期実行されている場合中身を確認し付随して実行されるファイルがないかを確認します。 - 例えば
/tmp/script.sh
を読み込んでいるかつそのファイルが編集可能な場合、対象のクローンが実行されることで間接的に任意コードが実行でき、権限昇格へと繋げることができまる
# ファイル: /etc/crontab
# m h dom mon dow user command
*/2 * * * * root /usr/local/bin/system_backup.sh # ← root権限で2分ごとに実行
*/10 * * * * www-data /usr/bin/php /var/www/cleanup.php
最後に
ここまで読んでくださってありがとうございます!
今回は「Linuxに侵入したあと、まず何を確認すべきか?」という視点から、権限昇格につながる基本チェックポイントを整理してみました。
TryHackMeなどで実際に手を動かしていると、毎回同じような手順で調査をしていることに気づき、それをテンプレ化することで効率よく進められるようになってきました。
もちろん、環境によって有効な昇格手法は異なりますが、
「sudo権限の確認 → SUIDファイルの探索 → cronの設定チェック」
という流れは、どんな場面でも役立つ基本中の基本です。
自分自身、まだまだ試行錯誤の連続ですが、この記事が「次に何をすればいいか分からない…」と立ち止まってしまった誰かのヒントになれば嬉しいです。
今後もCTFや実践演習を通じて気づいたことがあれば、またまとめていく予定です!
一緒に成長していきましょう!🔥
Discussion