web-dev-qa-db-ja.com

読み取り専用ファイルシステムでシェルからネイティブコードを実行する

Linux、busybox、およびいくつかのカスタムサービスを実行している組み込みデバイスを研究しています。特権のないシェルアクセスを取得する方法を見つけ、特権を昇格させることができるかどうかを確認しようとしました。

カーネルは古く、脆弱であるように見えますが、最大の障害は、ファイルシステム全体が読み取り専用(/tmpおよび/dev/shmを含む)であること、つまり644/755であり、すべてがルートによって所有されていることです。

シェルアクセスのみを持ち、読み取り専用のファイルシステムでカスタムネイティブコードを実行する方法にはどのようなものがありますか?

私が試したいくつかの可能な道:

  • ファイルシステムをマウントするシステムを取得します(ルートまたは物理的なアクセスが必要です)
  • ELFバイナリをファイルシステムのどこかに保存するようにシステムを取得してから、/lib/ld-linux.so.2を実行します(これを行う方法が見つかりませんでした)
  • パイプを使用して/lib/ld-linux.so.2または/proc/self/environを実行します(機能しません。ld-linuxでは、ファイルがmmap- ableである必要があります)
  • dd of=/proc/self/memを使用してddのスタックを破壊します(カーネルは2.6.39より前で、/proc/self/memへの書き込みは無効になっています)
  • コマンドラインまたは環境の引数の処理に脆弱性があるプログラムを見つける(これまでのところ何もない)
  • Syscallを実行できるスクリプト言語を見つけます(スクリプト機能は、busyboxのシェルのみです)。
  • UNIXソケットに書き込み、サービスがそれをリッスンして何かを実行します(UNIXソケットに任意のデータを送信できるユーティリティがファイルシステムに存在しません)

見落としましたか?

6
J. Doe

コマンドラインまたは環境の引数の処理に脆弱性があるプログラムを見つける(これまでのところ何もない)

これはおそらく最も有望な道です。

私の場合、カスタムプロプライエタリユーティリティの文書化されていないパラメータの処理で、バッファオーバーフローを見つけることができました。

1
J. Doe