
1. 首先谈一下Redis未经授权的访问漏洞吗?
默认情况下,Redis将绑定到0.0.0.0:6379. 如果未采用相关策略,例如添加防火墙规则以避免来自其他不受信任来源的IP访问,则Redis服务将暴露给公共网络. 如果未设置密码认证(通常为空),则如果任何用户可以访问目标服务器,则将导致任何用户访问Redis并未经授权读取Redis数据. 在未经授权访问Redis的情况下,攻击者可以使用Redis本身提供的config命令来写入文件. 攻击者可以成功地将其ssh公钥写入目标服务器/root/.ssh文件夹中的authotrized_keys中. 在该文件中,您可以使用ssh服务使用相应的私钥直接登录到目标服务器.
简而言之,该漏洞具有以下两个条件:
(1)Redis绑定为0.0.0.0:6379,并且未添加防火墙规则来避免直接在公共网络上公开的其他不受信任的来源(例如ip访问和其他相关的安全策略);
(2)如果没有密码验证(通常为空),则可以不使用密码远程登录Redis服务.
2. 漏洞的危害
(1)攻击者无需身份验证即可访问内部数据,这可能导致敏感信息泄漏,并且黑客还可以恶意执行flushall清除所有数据;
(2)攻击者可以通过EVAL执行lua代码,或通过数据备份功能将后门文件写入磁盘;
(3)在最严重的情况下,如果Redis以root身份运行,则黑客可以将SSH公钥文件写入root帐户,并直接通过SSH登录到受害服务器.
1. SSH无秘密登录原理介绍
在正式介绍重复过程之前,让我解释一下,我再现的最严重的漏洞是以root用户身份登录Redis服务并编写ssh公钥以使用ssh登录到受害主机. 现在,让我们解释一下SSH免密码登录的原理(已经知道孩子们的靴子可以直接跳过hhh):
SSH提供了两种登录验证方法,一种是密码验证,即帐户密码登录,另一种是密钥验证,这是我们想要的无秘密登录. 在这里,我将仅讨论密钥验证. 原理.
所谓的密钥验证实际上是一种基于公共密钥密码学的身份验证,它使用公共密钥加密和私有密钥解密. 公用密钥是公用密钥,可以放在服务器端. 您可以将相同的公用密钥远程放置到要SSH的所有服务器中,并且只有您知道私钥是秘密的,由公用密钥加密的消息只能由私钥解密,一般过程如下如下:
(1)客户端生成一个私钥和一个公钥,并将该公钥复制到服务器;
(2)客户端发起登录请求并发送自己的相关信息;
(3)服务器根据客户端发送的信息,检查是否存储了客户端的公钥. 如果不拒绝登录,它将生成一个随机数,并使用公共密钥对其进行加密以发送给客户端;
(4)客户端从服务器接收到加密后的消息后,使用私钥对其解密,并将解密后的结果发送给服务器进行验证;

(5)服务器从客户端接收解密结果如何入侵服务器,并将其与刚刚生成的随机数进行比较. 如果相同,则允许登录,如果不相同,则拒绝登录.
2. 脆弱的环境建设:
Kali Linux 2016及更高版本
VMware
(1)在官方网站上下载源代码的压缩包
download.redis.io/releases/redis-3.2.11.tar.gz
(2)解压缩压缩包
tar xzf redis-3.2.11.tar.gz
(3)输入解压缩后的目录cd redis-3.2.11,然后输入make执行;
(4)完成make后,进入src目录: cd src,将redis-server和redis-cli复制到/ usr / bin目录(这样就不必输入启动redis-server和redis-cli的目录了)每次安装目录):
cp redis服务器/ usr / bin
cp redis-cli / usr / bin
(5)返回目录redis-3.2.11如何入侵服务器,将redis.conf复制到/ etc /目录:
cp redis.conf / etc
(6)在etc中编辑redis配置文件redis.conf
Vi /etc/redis.conf
(7)删除ip绑定,并允许本地主机以外的主机远程登录redis服务:


关闭保护模式并允许远程连接到Redis服务:

(8)使用/ etc目录中redis.conf文件中的配置来启动redis服务
redis服务器/etc/redis.conf
(9)启动ssh服务
sali服务已安装在Kali中,但默认情况下未启动. 您需要使用service ssh start命令来启动ssh服务.
(10)复制虚拟机,一台作为目标机,一台作为攻击端,因此已经建立了漏洞环境. 此时,可以以root用户身份远程登录redis服务,而无需密码.
将其中一个用作目标计算机A(192.168.227.129),将另一个用作攻击者B(192.168.227.130)
在A中打开redis服务: redis-server /etc/redis.conf;
在主机A上执行mkdir /root/.ssh命令以创建ssh公钥存储目录(A用作ssh服务器);在B中生成ssh公钥和私钥,并将密码设置为空:

输入.ssh目录: cd .ssh /,并将生成的公共密钥保存到1.txt:


将攻击者Ping到目标主机ip或在目标计算机上ping攻击者,以确保两台计算机可以相互通信

将1.txt写入redis(使用redis-cli -h ip命令连接到主机A并写入文件):

远程登录到主机A的redis服务: redis-cli -h 192.168.227.129(目标计算机),并使用CONFIG GET dir命令获取redis备份路径:

将redis备份路径更改为ssh公钥存储目录(通常默认为/root/.ssh):

将上传的公共密钥的备份文件名设置为authorized_keys:

检查更改是否成功(检查是否有authorized_keys文件),将其保存并退出并没有问题,然后将ssh公钥成功写入目标计算机:


启动主机A和主机B的ssh服务(kali的默认ssh服务已关闭),命令为service ssh start
使用ssh使用主机B上的无主机密码登录到主机A: ssh -i id_rsa root@192.168.227.129,成功登录:

这时,我们已经成功地使用redis未经授权的访问漏洞来实现ssh无需密码登录目标服务器,然后我们就可以使用ssh服务来进行下一个渗透工作.
3. 使用搜索引擎查找漏洞
Redis暴露于公共网络(即绑定到0.0.0.0:6379,并且可以访问目标IP公共网络),并且如果未启用它并且添加了相关的安全策略,它可能会受到影响.
ZoomEye搜索结果显示,可以直接在公共网络上访问97707 Redis服务.

根据对ZoomEye的检测,可以直接使用全局Redis分布,而无需进行以下验证:

Redis TOP 10个国家和地区可以直接使用,而无需在世界范围内进行验证:

emmmmmm认为这是一个很好的写作,请竖起大拇指并支持Ang _(: з」∠)_
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-261642-1.html
哦
球员们感觉自己的压力更大了
高速成长的时代已经永远结束