网络安全——利用ssrf操作内网redis写入计划任务反弹shell

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 今天的内容是ssrf漏洞的利用,环境选择的是discuz含有ssrf漏洞的版本,通过该漏洞来写入redis计划任务反弹shell,直接看操作

都在这里面了,有需要的自取即可

链接:https://pan.baidu.com/s/1suQgMYN_Z8yOJFKgditnKQ 
提取码:75cv

这个服务我只能说顶级

今天的内容是ssrf漏洞的利用,环境选择的是discuz含有ssrf漏洞的版本,通过该漏洞来写入redis计划任务反弹shell,直接看操作


一:搭建基于centos的discuz+redis服务

1.discuz简介

Discuz是一套通用的社区论坛软件系统。自2001年6月面世以来,Discuz!已拥有15年以上的应用历史和200多万网站用户案例,是全球成熟度最高、覆盖率最大的论坛软件系统之一。而这个discuz在历史上的一个版本中存在ssrf漏洞,这个版本也是今天我们要用到的版本

2.discuz下载

1.LAMP

lamp就是搭建discuz的前提,有了lamp才能开始搭建discuz

LAMP中,L代表linux系统,A代表apache中间件,M代表mysql数据库,P代表PHP 

LAMP的安装也是有顺序的,首先要安装的就是apache,执行下面的语句就行了

安装apache命令:

1、安装 Yum install -y httpd httpd-devel

2、启动 Service httpd.service start

3、查看状态  Service httpd.service status

启动后访问127.0.0.1,如果像我一样能回显页面就是成功了

第二个要安装的就是mysql数据库了

这里因为单纯的mysql数据库安装很麻烦,我们又是只需要靶场环境,所以这里就安装mysql的另一个版本mariadb,指令如下:

1、安装 Yum -y install mariadb mariadb-server mariadb-libs mariadb-devel

2、启动mariadb服务 Service mariadb.service start

3、查看状态 Service mariadb.service status

Netstat -an 查看端口

如果查看端口开启情况能看到3306端口就是成功了

第三个要安装的就是php

1、安装PHP Yum -y install php

2、将php与mysql关联起来 Yum -y install php-mysql

2.discuz的安装

然后关闭防火墙,在物理机上就能访问centos的ip加上upload来安装discuz了 ,无脑下一步,直到开始设置数据库这里

注意这里的数据库密码要留空,因为刚才设置mysql并没设置数据库密码,再点下一步,就可以访问下面这个页面了

到这里discuz就安装好了

3.搭建redis服务

1.下载redis压缩包

这里就要用到网盘里的redis那个压缩包了,同样需要把他放在centos里面,但是不需要放到centos的根目录了,随便放哪都可以(不可以放回收站哈),这边建议放桌面,我这就跳过步骤了,


同样对这个文件解压即可,但是这里不是用unzip语句了,因为这个是tar格式,所以这里用 tar zvxf命令

解压完之后就会生成一个redis-3.0.4的文件,这就是我们要的

2.安装redis服务

1.cd 到刚才解压的文件里面,直接源码安装即可(就是输入make即可)

2.进入到src文件夹中,找到里面存在的redis-cliredis-server文件,这就是redis服务的客户端和服务端

3.打开redis服务

1.开启服务端

在刚才的src文件夹中输入下面的代码来打开redis服务的服务端

./redis-server    

成功开启后便是下面这样的界面,这便是开启成功了

2.连接客户端

连接客户端只需要新开一个终端,同样进入到src目录下,输入redis-cli即可成功连接 ,出现我线面这个画面就是连接成功了

到这里redis和discuz就全部搭建好了

二:ssrf操作内网redis写入计划任务反弹shell

1.discuz的ssrf漏洞

1.漏洞点

http://你的centos的ip/upload/forum.php?mod=ajax&action=downremoteimg&message=[img]漏洞点/?data=helo.jpg[/img]

2.漏洞验证

可以先检验一下这个漏洞是否存在,可以在漏洞点的位置输入kali的ip和和一个端口号,例如(192.168.1.111:6666),再在kali用nc监听端口,看是否能获取到信息

可以看到确实收到了信息,所以漏洞存在

3.漏洞利用方式

因为刚刚的http协议测试了没问题,说明存在ssrf漏洞,所以我们尝试下其他的伪协议,比如用ftp协议探测centos的3306端口,但是并没有探测到,说明大概率屏蔽了这些伪协议,这时候我们就可以直接利用http协议做操作,那么具体应该怎样做呢?

因为我们想用的协议被过滤了,所以我们用http协议远程请求我们的文件,而文件内容做一个重定向到我们想用的协议即可达到想要的效果

比如下面这样.打开kali的apache服务,在根目录创建一个aa.php,内容如下

此时用http协议访问kali的这个aa.php即可利用ftp协议来探测3306端口,把漏洞点换成http://kali的ip/aa.php,可以看到页面加载很慢,即检测到了3306端口,这样就可以绕过伪协议检测

2.实操反弹shell

探测到存在ssrf漏洞,并且目标存在一个redis服务,所以就可以尝试操作内网写入计划任务反弹shell

1.socat端口转发工具

功能就是将某个端口的数据转到另一个端口,并且抓包记录下转发的数据

2.制作payload

1.抓取数据包

因为目标是centos7,所以用同样的系统制作payload最好,但是我只有一台centos,所以就新开一个终端来做吧,这里就需要一个aa.sh的脚本(在博客开头的文件里面也有),

注意:这里要把我划线的ip改成自己kali的ip,要让shell反弹到指定位置

其实就是写入计划任务的那几个命令给他集成化到一个脚本里面,构成一个快捷写入计划任务反弹shell的脚本,现在就要想办法让目标(centos)执行这个脚本,来反弹shell到kali里面

这里最好用的方法就是通过抓取centos7的redis服务写入计划任务反弹shell的数据包,再通过http协议利用ssrf漏洞执行这个数据包的内容,即可达到效果

输入下列命令即可开启端口转发

socat -v tcp-listen:2345,fork tcp-connect:localhost:6379

这个命令的意思就是将2222端口和6379端口进行绑定,任何经过2222端口的数据都会转发到6379,并且转发的数据会被记录下来,再利用aa.sh写入计划任务,就可以抓到包了

注意:这样抓取数据包是为了保证目标centos能用这个数据包,所以模拟我们也有一台centos机器,并且在该机器执行了这个脚本抓的包,这样才不会有冲突,最大限度的保证能用

此时在2345端口执行这个脚本

如图所示,第一个终端在socat命令后的所有内容都是抓取的数据包

2.转换数据包格式

此时已经抓取到数据包了,但是并不能直接传输(因为不能识别),所以我们要把他换成其他格式,这里也准备了一个py脚本给你们,也在网盘中,自行取用即可

新建一个日志文件(即log后缀),把上面抓取的数据放进去保存,

注意 :此时文件的格式一定要是unix,可以用vi的底部命令行set ff查看

再利用准备好的py脚本,转换格式

此时拿到的数据包就是我们要用的数据包

3. 利用payload拿shell

在攻击机kali的根目录(var/www/html)创建一个gopher.php文件, 内容和我下面的相同,但是要把127.0.01:6379/后面的内容换成你自己刚抓的数据包,保存退出

此时再用物理机登录到漏洞点,利用discuz的ssrf漏洞的http协议发起对gopher文件的请求,使文件在目标机器(centos中执行)

注意:你如果和我一样,做准备工作时用的同一台centos,那此时你的计划任务里面已经可以反弹shell了,因为前面抓包时已经写入了,如果要看到效果就先把那个计划任务删了

4.接收shell ,复现成功

访问gopher后仍然没有回显,那怎么验证呢 ,

第一个就是开启6666端口的监听,因为aa.sh那个集成化语句我用的6666端口写的计划任务

第二个,因为我们这是靶机环境,也可以直接到centos上看计划任务是否成功写入即可

可以看到,不论是反弹shell还是检查计划任务成功写入,都已经成功了,到这里漏洞就算全部复现完了

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
NoSQL 网络协议 Linux
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
60 6
|
6月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
89 0
|
6月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
103 0
|
2月前
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网络组件
redis,memcached,nginx网络组件
22 0
|
2月前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
36 0
|
4月前
|
缓存 负载均衡 NoSQL
【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败
【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败
|
4月前
|
缓存 NoSQL Java
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
|
4月前
|
SQL 网络协议 安全
【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题
【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题
|
4月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
|
4月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)