关于SSRF的总结

SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。利用一个可以发起网络请求的服务,当做跳板来攻击其他服务。这里简单总结一下ssrf,并来刷一些CTFshow上的题,还准备找一些案例。推荐一下ctfshow这个平台 可以对某个知识点有针对性的刷题题目质量也是很高的。

image-20220324094537351

SSRF的几种绕过形式

IP的进制转换

xip.io

指向任意ip的域名:xip.io

.分割符号替换

可以使用不同的分割符号来代替域名中的.

https://www.baidu.com

可以用 https://www。baidu。com来代替去绕过一些限制。

解析特性绕过

127.1会被解析成127.0.0.1
在linux中,0也会被解析成127.0.0.1,而在windows中0会被解析成0.0.0.0
127.0.0.0/8是一个回环地址网段,从127.0.0.1~127.255.255.254都表示
localhost(127.255.255.255是广播地址)

302跳转

SSRF中有个很重要点是请求可能会跟随302跳转

<?php
header(“Location:http://127.0.0.1/flag.php");

然后用http://访问这个文件所在地址

“@”符号绕过

http://www.baidu.com@10.10.10.10与http://10.10.10.10请求是相同的。

web 351

img

ctfshow{6c0354a8-eb44-48ce-9fd1-13bc9658bc83}

web 352

img

这个正则并没有起到任何作用。

web 353

img

这题过滤了 本地的ip地址。

但是ip地址还可以以其他进制形式表示 十进制127转换为十六进制是7f。八进制也是可以的。

web 354

img

过滤比较严格 这里直接用302跳转 在我本地服务器开一个web。

img

img

SSRF会跟随302进行跳转的。

web 355

img

127.1会被解析成127.0.0.1

web 356

img

在linux中,0也会被解析成127.0.0.1

web 357

还是利用302跳转。

web 358

img

他的规定是要以http://ctf.开头 和show结尾 才可以绕过。

中间直接使用@即可

web 359

打开题目看看

img

题目有提示:打无密码的mysql

抓包看一下这个登录框

img

returl参数去请求一下网址试试看。

img

Gopher协议

gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议

gopher协议的基本格式

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

想要打 MySQL 就需要知道 MySQL 通信时的 TCP 数据流,才能知道要怎么和 MySQL 通信,这里可以通过 Wireshark 抓包来分析。

不过作为一个脚本小子,显然就没有必要了。有个更好用的工具

https://github.com/tarunkant/Gopherus

他包含常见的应用 gopher 数据包的格式构造, 原理也是通过 Wireshark 抓包分析,然后写脚本。

img

这串payload粘贴到returl参数下面,生成的 POC 里,_ 字符后面的内容还要 进行url编码。因为 PHP接收到POST或GET请求数据,自解码一次。

img

img

接下来就是找flag的位置了。

img

img

web 360

题目提示: 打redis

通过提示感觉 这题就是利用 Gopherus 打 redis

img

操作是一样的

img

img

img