忍者ブログ

プログラミングの練習

プログラミングの問題やプログラミング関連知識、ソフトウェアのテストについてのブログです

【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