11211 - Pentesting Memcache
プロトコル情報
wikipediaから:
Memcached(発音: mem-cashed、mem-cash-dee)は、一般的な分散メモリキャッシングシステムです。データとオブジェクトをRAMにキャッシュして外部データソース(データベースやAPIなど)を読み取る回数を減らすことで、動的なデータベース駆動型のウェブサイトの高速化によく使用されます。
MemcachedはSASLをサポートしていますが、ほとんどのインスタンスは認証なしで公開されています。
デフォルトポート: 11211
列挙
手動
Memcacheインスタンスに保存されているすべての情報を外部に持ち出すには、次の手順が必要です:
アクティブなアイテムを持つスラブを見つける
以前に検出したスラブのキー名を取得する
キー名を取得して、保存されたデータを外部に持ち出す
このサービスは単なるキャッシュであるため、データが現れたり消えたりする可能性があります。
マニュアル2
自動
Memcacheキーのダンプ
Memcacheの世界では、データをスラブで整理するプロトコルであるmemcacheには、格納されたデータを調査するための特定のコマンドが存在しますが、注目すべき制約があります。
キーはスラブクラスごとにダンプすることができます。これは、コンテンツサイズが類似しているキーをグループ化します。
1つのスラブクラスごとに1ページの制限があり、これは1MBのデータに相当します。
この機能は非公式であり、コミュニティフォーラムで議論されているように、いつでも廃止される可能性があります。
潜在的にギガバイトのデータから1MBしかダンプできないという制限は特に重要です。ただし、この機能は、特定のニーズに応じてキーの使用パターンに関する洞察を提供することができます。メカニクスにあまり興味がない人のためには、ツールセクションを訪れると、包括的なダンプのためのユーティリティが見つかります。また、memcachedセットアップとの直接対話のためにtelnetを使用するプロセスが以下に概説されています。
動作原理
Memcacheのメモリ構成は重要です。メモリキャッシュを"-vv"オプションで初期化すると、生成されるスラブクラスが表示されます。
現在存在するすべてのスラブを表示するには、次のコマンドを使用します:
memcached 1.4.13に単一のキーを追加することで、スラブクラスがどのように作成および管理されるかが示されます。たとえば:
以下は、キーの追加後に "stats slabs" コマンドを実行すると、スラブの利用状況に関する詳細な統計情報が得られます:
以下の出力は、アクティブなスラブタイプ、利用されているチャンク、および操作統計を示し、読み取りおよび書き込み操作の効率に関する洞察を提供します。
もう1つの便利なコマンド、「stats items」は、エビクション、メモリ制約、およびアイテムのライフサイクルに関するデータを提供します。
キーのダンプ
1.4.31より前のバージョンでは、スラブクラスを使用してキーをダンプします。
例えば、クラス#1でキーをダンプするには:
このメソッドはスラブクラスを反復処理し、キーの値を抽出してオプションでダンプします。
MEMCACHEキーのダンプ(VER 1.4.31+)
memcacheバージョン1.4.31以降では、リリースノートで詳細に説明されている非同期モードを利用して、本番環境でキーをダンプするための新しい、安全な方法が導入されました。このアプローチは広範な出力を生成するため、「nc」コマンドを効率的に使用することを推奨しています。例は次のとおりです:
ダンピングツール
表はこちらから。
プログラミング言語 | ツール | 機能 | ||
---|---|---|---|---|
PHP | キー名を表示します。 | |||
Perl | キーと値を表示します。 | |||
Ruby | キー名を表示します。 | |||
Perl | CPANモジュール内のツール | ached/) | ||
PHP | キーをダンプすることも可能なMemcacheモニタリングGUI | |||
libmemcached | あなたのmemcachedプロセスをフリーズさせます!!! 本番環境で使用する際は注意してください。それでも、1MBの制限を回避し、本当にすべてのキーをダンプすることができます。 |
トラブルシューティング
1MBデータ制限
memcached 1.4以前では、デフォルトの最大スラブサイズのため、1MBを超えるオブジェクトを保存することはできません。
タイムアウトを30日を超える値に設定しないでください!
許可された最大値よりも大きなタイムアウトでキーを「set」または「add」しようとすると、memcachedは値をUnixタイムスタンプとして扱うため、期待通りの結果が得られない可能性があります。また、タイムスタンプが過去の場合は何も行いません。コマンドは静かに失敗します。
したがって、最大の有効期限を使用したい場合は2592000を指定してください。例:
オーバーフロー時のキーの消失
ドキュメントには64ビットを超える値を「incr」を使用してオーバーフローさせると値が消えると記載されています。再度「add」/「set」を使用して作成する必要があります。
レプリケーション
memcached自体はレプリケーションをサポートしていません。本当に必要な場合は、以下のようなサードパーティーのソリューションを使用する必要があります:
repcached: マルチマスター非同期レプリケーション(memcached 1.2パッチセット)
Couchbase memcached interface: CouchBaseをmemcachedの代替として使用
yrmcds: memcached互換のマスター・スレーブキー値ストア
twemproxy(別名nutcracker): memcachedサポート付きのプロキシ
コマンドチートシート
pageMemcache CommandsShodan
port:11211 "STAT pid"
"STAT pid"
参考文献
Last updated