SSRF从外网到内网靶场演练
感谢国光做靶场,学习一些的思路以及多种利用姿势
靶场演练
首先是存在SSRF漏洞的web站点,我们尝试服务端去获取到百度的robots.txt内容
获取内网信息
|
获取主机名查询静态表,可以看到当前机器ip是172.72.23.21
|
查看arp缓存列表
|
内网端口探测
配合DICT协议对内网端口进行探测,一般只能探测TCP回显端口
尝试使用Burp进行爆破,可以看到从21-29都有主机存活,并且有端口开放
除了DICT协议探测端口外,我们可以使用HTTP协议获取到内网的web信息
我们现在当前是172.72.23.21,先尝试访问下172.72.23.22的80端口,可以看到这里是一个codeexec的页面
内网目录扫描
尝试对目录进行爆破
敏感信息泄漏
代码注入
shell.php
由于我们只能通过ssrf访问,尽可能的对其收集我们需要的信息
查看当前文件
可以看到这里请求失败,是因为空格的问题,我们需要%20代替空格,实际到burp编码是%2520
查看根路径
可以看到当前路径下有个flag文件
SQL注入
尝试访问主机,可以看到这个是存在sql注入的站点
尝试对其注入进行访问,尝试访问
|
尝试的payload
|
尝试将shell写入
|
成功获取到flag
命令执行
尝试对下一个172.72.23.24进行访问
可以看到功能是一个网络测试功能的接口,这个功能有点高深,其他的注入与代码注入都是get请求,但是我们遇到post请求无法对其进行访问
这也就延伸到gopher协议,协议请求格式如下:
|
gopher 协议是一个古老且强大的协议,从请求格式可以看出来,可以传递最底层的 TCP 数据流,因为 HTTP 协议也是属于 TCP 数据层的,所以通过 gopher 协议传递 HTTP 的 POST 请求也是轻而易举的。
首先来抓取正常情况下 POST 请求的数据包,删除掉 HTTP 请求的这一行:
|
如果不删的话,打出SSRF请求会乱码,会被两次gzip编码
接着在 Burpsuite 中将本 POST 数据包进行两次 URL 编码:
抓包
对其进行编码
最终 SSRF 完整的攻击请求的 POST 数据包如下:
|
尝试进行访问
XXE实体注入
访问172.72.23.25站点
可以看到是一个登录的时候用户提交的 XML 数据
尝试构造payload,对其进行二次编码
对其进行加密,不知道为什么就是无法执行,可以看到这边有xml的返回结果,最终无果
CVE-2017-12615
Tomcat 中间件,存在 CVE-2017-12615 任意写文件漏洞
尝试传入jsp,利用/进行绕过
不知道为什么可以写jsp文件,但是无法把内容写入
Redis未授权
内网的 172.72.23.27 主机上的 6379 端口运行着未授权的 Redis 服务,系统没有 Web 服务(无法写 Shell),无 SSH 公私钥认证(无法写公钥),所以这里攻击思路只能是使用定时任务来进行攻击了。常规的攻击思路的主要命令如下:
切记需要在burp上空格换成%20,这边&符号要换成%26
|
我们可以尝试使用dict或者是gopher来进行构造
|
成功反弹
Redis认证
我们可以从前面信息搜集看到6379以及80是开着的
可以看到Redis是需要认证的
80端口是一个存在文件包含的站点
我们思路就是获取到redis的配置文件中的密码,再进行写马,如果没有的话我们可以尝试进行爆破
常见的redis配置文件
|
|
成功认证,下面步骤则是一样的
Mysql未授权
我认为这个思路还是很鸡肋,大概记录下思路
大体就是抓取到3389的数据包,执行我们查看数据的操作,之后将数据流转换为gopher数据流,再去发起ssrf请求,执行我们想要的指令