微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Redis 未授权访问漏洞

文章目录

Redis未授权访问漏洞

简介
利用redis配置不当,或弱密码(反正就是能拿到redis的权限),然后利用redis做一系列操作。

利用

文件

知识点
命令:CONfig GET dir
获取数据库的存储路径(文件将会保存的地方,当然可以使用SET进行设置,如果有权限的话)

命令:CONfig GET dbfilename
获取数据库文件名,认是dump.rdb(通过SET设置为webshell.PHP等任意文件格式,然后利用)

命令:SAVE
保存当前数据库(将数据库内的内容写到文件中,上面给出了文件的路径和名称

示例

  1. 配置文件保存路径
    查看命令:CONfig GET dir
    设置命令:CONfig SET dir <新的文件路径>
    (配置新的文件路径时,确保redis对其有相关的访问权限,这里使用的便是redis认的文件保存路径)

    请添加图片描述

    @H_502_10@
  2. 配置文件
    查看命令:CONfig GET dbfilename
    设置命令:CONfig SET dbfilename <新的文件名称>

    请添加图片描述

    @H_502_10@
  3. 设置数据
    命令:SET <需要保存的数据>

    请添加图片描述

    @H_502_10@
  4. 保存
    命令:SAVE
    (这里保存失败,有可能是redis对设置的文件路径没有访问权限,具体可以查看redis的日志文件观察错误信息)

    开始时配置了自定义路径,redis没有访问权限,导致保存失败,查看日志发现了问题,改回认路径后解决了。
    自定义访问路径

    请添加图片描述

    失败日志(日志认路径/var/log/redis/redis-server.log

    请添加图片描述

    修改认路径后保存成功

    请添加图片描述

    目录下出现了对应文件

    请添加图片描述

    @H_502_10@

上传文件

知识点
采用的是Metasploit中redisupload模块
其原理是和文件上传一样的

示例

  1. 搜索并采用upload模块

    请添加图片描述

    @H_502_10@
  2. 配置相关的属性
    RHOSTS:目标IP
    RPORT:目标服务端口
    RemoteFile:目标机器保存文件绝对路径
    LocalFile:需要上传文件
    FLUSHALL:是否清空数据库(一般不要,这里只是为了测试)

    请添加图片描述

    @H_502_10@
  3. 执行
    成功

    请添加图片描述


    请添加图片描述


    失败,很大可能是路径访问权限问题

    请添加图片描述

    @H_502_10@

写计划任务(没有成功)

知识点
命令:flushall
清空所有key,一般不使用,清空key是为了写计划任务时防止破坏文件格式

命令:CONfig SET dir [path]
设置文件保存路径,一般计划任务文件存储路径为/var/spool/cron

命令:SET key "..."
设置键值,也是将写入文件内容

命令:CONfig SET dbfilename ...
设置文件名(需要什么写什么,木马、计划任务、网页等等)

命令:SAVE
保存数据库内容(自己写的内容

Linux定时计划任务
命令:sudo crontab [-u user] [-i] {-e|-l|-r}
计划任务文件格式:

# 执行命令使用额shell,认是sh
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

启动Syslog日志服务,记录定时任务计划执行状态
命令:sudo /etc/init.d/rsyslog start

示例
文件成功写入,但是运行时出现了报错,提示文件格式不对

请添加图片描述


于是简单了解下Linux中Crontab计划任务 Link

遇到的问题

  1. 没有目录权限@H_502_10@
  2. 格式不对@H_502_10@
  3. shell不对
    认是sh,但需要的是bash@H_502_10@

额外遇到的问题

Bind多个IP失败

简述
认只允许127.0.0.1的本地连接,想要让外部机器访问,需要设置配置文件redis.conf中的bind <ip>
它允许设置多个IP,如bind ip1 ip2 [ip...]
但我其中一个环境ok,另一个环境不行,在出问题的环境下采用了端口映射的方法绕过。

环境
Windows 10(服务端)
WSL ubuntu-18.04(redis服务需要环境)
Redis-4.0.9

kali(访问端)

过程

  1. 配置Windows端口映射
    由于只允许回环地址127.0.0.1:6379进行访问,我们将本地IP端口映射到回环地址上
    命令:netsh interface protproxy add v4tov4 listenaddress=<本地IP> listenport=<监听的端口> connectaddress=127.0.0.1 connectport=6379

    @H_502_10@
  2. 校验是否成功
    第一次校验,校验端口是否成功映射
    命令:netsh interface protproxy show all

    第二次校验,校验是否能连接上
    命令:redis-cli -h <本地IP> -p <监听的端口>

    @H_502_10@
  3. 防护墙设置
    第二步完成后表示映射已经可以使用了,但使用另一台机器访问redis时可能还是不行,这是由于防火墙拦截了,这里列出两种解决方法

    1. 关闭防火墙
      一劳永逸,但大大降低了安全性。@H_502_10@
    2. 配置入站设置
      只针对特定IP或IP组开放特定端口,安全性有一定保障。(出入站规则配置请自行百度)@H_502_10@
    @H_502_10@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐