概要
EggShell は、Python で書かれたポストエクスプロイテーション監視ツールです。ターゲットマシンとの間で、拡張機能を備えたコマンドラインセッションを提供します。ファイルのアップロード/ダウンロード、タブ補完、写真撮影、位置情報追跡、シェルコマンド実行、永続化、権限昇格、パスワード取得など、さまざまな機能を利用できます。このプロジェクトは概念実証であり、自分が所有するマシンでの使用を目的としています。
詳細と使い方については http://lucasjackson.io/eggshell を参照してください。
Twitter でフォローしてください: @neoneggplant
バージョン 3.0.0 の新機能
- SSL を使用したより安全なソケット接続
- Linux サポート
- タブ補完
- セッション処理の全体的な構造と効率の改善
- 64 ビットデバイス向け iOS Python ネイティブサポート
はじめに
macOS/Linux でのインストール
git clone https://github.com/neoneggplant/eggshell
cd eggshell
python eggshell.py
iOS (脱獄済み)
Cydia ソースを追加: http://lucasjackson.io/repo
EggShell 3 をインストール
任意のモバイル端末アプリケーションを使用して、eggshell コマンドを実行してください。
ペイロードの作成
Eggshell ペイロードはターゲットマシン上で実行されます。ペイロードは最初に、デバイスの詳細情報を取得してサーバーに送り返すための指示を送信し、その後、適切な実行可能ファイルを選択して安全なリモートコントロールセッションを確立します。
bash
ペイロードメニューで bash を選択すると、ターゲットマシン上で実行されると EggShell セッションを確立するワンライナーが生成されます。
teensy macOS (USB インジェクション)
Teensy は Arduino IDE でプログラムできる USB 開発ボードです。USB キーボードのキー入力を非常に高速にエミュレートし、わずか数秒で EggShell ペイロードを注入できます。
teensy を選択すると、Teensy ボード用の Arduino ベースのペイロードが生成されます。
Teensy にアップロードした後、そのデバイスを macOS の USB ポートに差し込むことができます。コンピュータに接続されると、ペイロード実行に必要なキー入力を自動的にエミュレートします。
セッションとの対話
セッションが確立された後、EggShell のコマンドラインインターフェースを通じて、そのデバイス上でコマンドを実行できます。
利用可能なすべてのコマンドを表示するには、「help」と入力してください。
写真の撮影
iOS と macOS の両方のペイロードで写真撮影機能が利用できます。picture コマンドを使用すると、macOS では iSight カメラ、iOS では前面または背面カメラで写真を撮影できます。
タブ補完
ほとんどのコマンドラインインターフェースと同様に、EggShell はタブ補完をサポートしています。ディレクトリやファイル名のパスを入力し始めると、タブキーを使って残りのパスを補完できます。
マルチハンドラ
マルチハンドラオプションを使用すると、複数のセッションを処理できます。バックグラウンドで新しい接続を待機しながら、異なるデバイスと対話することを選択できます。
セッションインターフェースと同様に、「help」と入力するとマルチハンドラのコマンドが表示されます。
特集
EverythingApplePro の動画で紹介されました。iOS 9.3.3 の Webkit 脆弱性を利用して EggShell を実行する様子が示されています。

謝辞
- Linus Yang / Ryley Angus: iOS Python パッケージ
- AlessandroZ: LaZagne
免責事項
EggShell を使用することにより、リポジトリに含まれる GNU General Public License v2.0 に同意したものとみなされます。詳細については http://www.gnu.org/licenses/gpl-2.0.html を参照してください。事前の相互同意なしにターゲットを攻撃するために EggShell を使用することは違法です。適用されるすべての地域、州、連邦の法律を遵守するのはエンドユーザーの責任です。開発者は一切の責任を負わず、このプログラムの誤用や損害についても責任を負いません。
コマンド
macOS
- brightness : 画面の明るさを調整する
- cd : ディレクトリを変更する
- download : ファイルをダウンロードする
- getfacebook : Facebook セッションクッキーを取得する
- getpaste : ペーストボードの内容を取得する
- getvol : スピーカーの出力音量を取得する
- idletime : キーボード/カーソルが最後に操作されてからの時間を取得する
- imessage : メッセージアプリを使ってメッセージを送信する
- itunes : iTunes コントローラ
- keyboard : あなたのキーボード = ターゲットのキーボード
- lazagne : Firefox パスワードの取得 | (https://github.com/AlessandroZ/LaZagne/wiki)
- ls : ディレクトリの内容を一覧表示する
- mic : マイクを録音する
- persistence : 接続が切れた後に再接続を試みる
- picture : iSight を通して写真を撮影する
- pid : プロセス ID を取得する
- prompt : ユーザーにパスワード入力を促す
- screenshot : スクリーンショットを撮る
- setvol : 出力音量を設定する
- sleep : デバイスをスリープモードにする
- su : su ログイン
- suspend : 現在のセッションを中断する(ログイン画面に戻る)
- upload : ファイルをアップロードする
iOS
- alert : デバイスにアラートを表示する
- battery : バッテリーレベルを取得する
- bundleids : バンドル識別子を一覧表示する
- cd : ディレクトリを変更する
- dhome : ホームボタンのダブルクリックをシミュレートする
- dial : 電話番号をダイヤルする
- download : ファイルをダウンロードする
- getcontacts : アドレス帳をダウンロードする
- getnotes : メモをダウンロードする
- getpasscode : デバイスのパスコードを取得する
- getsms : SMS をダウンロードする
- getvol : 音量レベルを取得する
- home : ホームボタンの押下をシミュレートする
- installpro : substrate コマンドをインストールする
- ipod : 音楽プレーヤーを制御する
- islocked : デバイスがロックされているか確認する
- lastapp : 最後に開いたアプリケーションを取得する
- locate : デバイスの位置座標を取得する
- locationservice: 位置情報サービスを切り替える
- lock : ロックボタンの押下をシミュレートする
- ls : ディレクトリの内容を一覧表示する
- mic : マイクを録音する
- mute : ミュート状態を更新および表示する
- open : アプリを開く
- openurl : デバイスで URL を開く
- persistence : 接続が切れた後に再接続を試みる
- picture : 前面または背面カメラで写真を撮影する
- pid : プロセス ID を取得する
- respring : SpringBoard を再起動する
- safemode : デバイスをセーフモードにする
- say : テキストを読み上げる
- setvol : デバイスの音量を設定する
- sysinfo : システム情報を表示する
- upload : ファイルをアップロードする
- vibrate : デバイスを振動させる
Linux
- cd : ディレクトリを変更する
- download : ファイルをダウンロードする
- ls : ディレクトリの内容を一覧表示する
- pid : プロセス ID を取得する
- pwd : 現在のディレクトリを表示する
- upload : ファイルをアップロードする