SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。利用一个可以发起网络请求的服务,当做跳板来攻击其他服务。这里简单总结一下ssrf,并来刷一些CTFshow上的题,还准备找一些案例。推荐一下ctfshow这个平台 可以对某个知识点有针对性的刷题题目质量也是很高的。
指向任意ip的域名:xip.io
可以使用不同的分割符号来代替域名中的.
可以用 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是广播地址)
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请求是相同的。
ctfshow{6c0354a8-eb44-48ce-9fd1-13bc9658bc83}
这个正则并没有起到任何作用。
这题过滤了 本地的ip地址。
但是ip地址还可以以其他进制形式表示 十进制127转换为十六进制是7f。八进制也是可以的。
过滤比较严格 这里直接用302跳转 在我本地服务器开一个web。
SSRF会跟随302进行跳转的。
127.1会被解析成127.0.0.1
在linux中,0也会被解析成127.0.0.1
还是利用302跳转。
他的规定是要以http://ctf.开头 和show结尾 才可以绕过。
中间直接使用@即可
打开题目看看
题目有提示:打无密码的mysql
抓包看一下这个登录框
returl参数去请求一下网址试试看。
gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议
gopher协议的基本格式
gopher://<host>:<port>/<gopher-path>_后接TCP数据流
想要打 MySQL 就需要知道 MySQL 通信时的 TCP 数据流,才能知道要怎么和 MySQL 通信,这里可以通过 Wireshark 抓包来分析。
不过作为一个脚本小子,显然就没有必要了。有个更好用的工具
https://github.com/tarunkant/Gopherus
他包含常见的应用 gopher 数据包的格式构造, 原理也是通过 Wireshark 抓包分析,然后写脚本。
这串payload粘贴到returl参数下面,生成的 POC 里,_ 字符后面的内容还要 进行url编码。因为 PHP接收到POST或GET请求数据,自解码一次。
接下来就是找flag的位置了。
题目提示: 打redis
通过提示感觉 这题就是利用 Gopherus 打 redis
操作是一样的