【PicoCTF】sudoの特権昇格を見抜け!「SUDO MAKE ME A SANDWICH」の攻略アプローチ
今回は、Linuxのアクセス権限と特権昇格(sudo)の仕組みが問われる問題「SUDO MAKE ME A SANDWICH」に挑戦しました!
一般ユーザーではアクセスできない保護されたファイルに対し、システムに許可された正当な権限(sudo設定)をどのように探し出し、アクセス権を突破したのか。そのアプローチとコマンドラインの操作手順をまとめておきます。
1. 現状の調査とパーミッションの確認
まずはリモート環境にログインし、自分自身のユーザー権限と、ターゲットとなるファイルの属性を調査します。
・ユーザー権限の確認(id): 現在のセッションが特権を持たない一般ユーザー(例:ctf-player)であることを確認。
・ファイルのパーミッション確認(ls -l): ホームディレクトリにあるターゲットファイル(flag.txt)を確認すると、オーナーであるroot以外からのアクセスが一切拒否(-r--r-----)されていることが判明。
一般ユーザーの権限のままでは直接中身を読むことができないため、システム上で許可された特権昇格のパスを探す必要が生じます。
2. sudo -l による実行可能コマンドの特定
Linux環境において、現在のアカウントに許可されている `sudo` 権限を調べるためには以下のコマンドを使用します。
特権リストの照会sudo -l
出力結果を確認すると、パスワードの入力を必要とせず(NOPASSWD)、最高権限(ALL)で特定のプログラム(例:/bin/emacs)を実行できる設定が組み込まれていることが分かります。
3. 許可されたツールを用いたファイルの安全な閲覧
許可されたパスのプログラムを sudo 経由で呼び出すことで、root権限でファイルを直接読み込みます。
root権限でのエディタ起動sudo /bin/emacs flag.txt
システム管理者が許可した正規のコマンドルートを通り、root権限でテキストエディタを起動してターゲットファイルをオープンします。
【ポイント】
「システム上の権限設定(sudoers)を読み解き、許可されたバイナリを通じて制限されたデータにアクセスする」というアプローチは、脆弱性診断やペネトレーションテストにおいて基本かつ非常に重要なスキルです。パーミッションと設定の不備(あるいは意図された許可設定)がいかにシステム挙動に影響するかを学ぶ好例となりました。
4. まとめ
・idおよびls -lによる環境の初期偵察と、アクセス制御の仕組みの把握
・sudo -lを用いた、一般ユーザーに許可されている特権コマンドの精査
・許可されたプログラムパスを正確に指定したroot権限でのファイルオープン手法の確立
Linuxの権限周りの仕組みを体系的に実感できる素晴らしい問題でした。次回のチャレンジも、一歩ずつロジカルに攻略していきたいと思います!
PR