Redis是一个键值(key-value)类型的nosql数据库。
为什么需要Redis
可以看出redis和mysql有非常大的区别,主要体现在数据结构和存储方式上。
mysql是关系型数据库,存储数据前必须明确定义表结构和数据类型,数据之间可以存在关联关系,而redis中并不需要提前定义数据模型,随时可以添加新的结构到数据库中,redis也不能维护数据间的关系;
非关系型数据库优势:
前言
传统数据库都是持久化存储到硬盘中,所以执行某些业务时传统数据库并不是很理想。redis等数据存储在内存中的数据库就应允而生了。基于内存的Redis读速度是110000次/s,写速度是81000次/s 。但是基于内存的缺点就是断电即失,如果服务器产生了意外,内存中的数据就会全部丢失,企业使用redis就冒着很大的风险。所以redis支持持久化存储(rbd与aof),在满足一定条件的情况下会自动保存到硬盘或者通过命令手动保存到硬盘。
上面的一切都很美好,直到一群搞安全的人发现redis中的默认配置是空口令(可以远程登录直接读取服务器内存中的数据),然后进入redis中发现可以手动更改持久化存储的路径和文件名(这样就可以在指定的路径写入某些的特殊的内容)--------->redis未授权访问漏洞就诞生了。
漏洞产生条件:
文件写入原理
因为redis-cli远程连接redis之后,除了可以查看内存中的键值对外还可以通过config set dir xxx、config set dbfilename xxx等命令,在权限足够的情况下可以实现在任意路径写入任意内容。如果将dbfilename指定到web网站的某个目录下通过写入特定内容 生成webshell,如果将dbfilename指定为ssh公钥存放的目录,这样就产生了ssh远程登录的漏洞…
漏洞危害:
环境:
靶机:feora
攻击机:kali
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译
make编译时出现找不到cc的情况,
或是出现In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory情况
解决方法:
yum -y install gcc gcc-c++ libstdc++-devel
make MALLOC=libc
cd src/ #进入src目录
cp redis-server /usr/bin/
cp redis-cli /usr/bin/ #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
cd .. # 返回上一级目录
cp redis.conf /etc/ #将redis.conf拷贝到/etc/目录下
redis-server /etc/redis.conf # 使用/etc/目录下的redis.conf文件中的配置启动redis服务
表示redis启动成功,
这里要注意,在后面我们连接靶机的redis是需要注意redis要启动的
检验是否启动成功的命令:
ps -ef|grep redis-server
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar -zxvf redis-2.8.17.tar.gz redis-2.8.17/
cd redis-2.8.17/
make&make install
下载好了之后就可以在kali上面尝试连接靶机的redis了
连接的时候可能会出现不能连接的现象,关闭靶机fedora的防火墙,个人感觉像是在这里就出现了漏洞。(这样就可以两个电脑的redis连接起来了)
su root
cd /bin
systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //关闭防火墙自启动
systemctl status firewalld.service //查看防火墙服务状态
同样,因为ssh是一个可以避免中间人攻击的协议
所以我们需要在fedora上下载ssh
正常下载即可,不在赘述。
(echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt
cat /root/.ssh/key.txt |./redis-cli -h 192.168.10.139 -x set pub
更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
这里会出现一个问题,就是我们需要配置一下靶机的ssh,否则我们将不能更改到.ssh的路径中去。
参考文献
https://blog.csdn.net/sinat_27873735/article/details/120363565
本过程命令请见下图。
然后在攻击机上登录靶机
这里也是需要配置的,参考文献
https://blog.csdn.net/weixin_39568083/article/details/116692444?spm=1001.2014.3001.5506
可能导致敏感信息泄露,丢失所有数据
如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害者服务器
扫描了几个任务,但是还是没有出现漏洞,貌似是gvm的问题?我有点不解。。。。。
类似说当我扫描到漏洞,在gvm的nvt是有对应的一个id的,这样就可以给出现的漏洞进行一个命名了,这个是一个反向表述,正向表述就是,在nvt中有好多的漏洞,我们去扫描,对应到了nvt中的,就是说明存在相应漏洞。