安小琪's blog

少年有梦,不应止于心动

SSRF基础:Gopher协议

本文转载自: https://blog.csdn.net/weixin_45887311/article/details/107327706

为了调试方便,我在win10下安装curl的工具

下载地址:https://curl.haxx.se/download.html

img

但目前提供的版本已经不支持gopher协议了,所以我千辛万苦找到了7.60的win64版本,支持发送gopher,dict协议

img

7.60地址:https://wws.lanzous.com/iaV55ekyfjc 点击即可下载

解压img后把bin目录加入windows环境变量

一、什么是gopher协议?

定义:Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;

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

限制:gopher协议在各个编程语言中的使用限制

img

–wite-curlwrappers:运用curl工具打开url流
curl使用curl –version查看版本以及支持的协议

Gopher协议格式

1
URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
  • gopher的默认端口是70
  • 如果发起post请求,回车换行需要使用%0d%0a,如果多个参数,参数之间的&也需要进行URL编码

二、测试网页:

1、get请求的发送,一个简单的php网页:

1
2
3
<?php
$name = $_GET['name'];
echo "Hello " . $name . "<br>";

img

用burpsuite抓包复制整体的http请求

img

可以删除些信息,然后来用curl来测试一下,首先需要对http请求转码,添加%0d%0a

1
2
3
4
5
GET /ssrf/get.php?name=yanshu HTTP/1.1
Host: 192.168.0.111

gopher请求: (gopher的请求体前一定不能漏了_)
curl gopher://192.168.0.111:80/_GET%20/ssrf/get.php%3Fname%3Dyanshu%20HTTP/1.1%0D%0AHost%3A%20192.168.0.111%0D%0A

附上PY脚本,可以直接使用

1
2
3
4
5
6
7
8
9
10
import urllib
test =\
"""GET /ssrf/get.php HTTP/1.1
Host: 192.168.0.111
"""
#注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(test)
new = tmp.replace('%0A','%0D%0A')
result = '_'+new
print(result)

请求成功:img

2、post请求

测试页面:

1
2
3
<?php
$name = $_POST['name'];
echo "Hello " . $name . "<br/>";

但是如果只是简单地把GET包改成POST包发送,会出现大问题:

1
2
3
4
5
6
7
POST /ssrf/post.php HTTP/1.1
Host: 192.168.0.111

name = yanshu

gopher请求:
curl gopher://192.168.0.111:80/_POST%20/ssrf/post.php%20HTTP/1.1%0D%0AHost%3A%20192.168.0.111%0D%0A%0D%0Aname%20%3D%20yanshu%0D%0A

浏览器会无法识别你的请求;

img

所以想发送一个完整的POST数据包,这四个字段是不可缺少的

1
2
3
4
5
6
POST /ssrf/post.php HTTP/1.1
Host: 192.168.0.111
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

name=yanshu

注意一点:使用脚本转的时候,每次不同的content-length都是不一样的,需要修改

imgimg

img

这样就成功疗,SSRF的学习刚刚开始,开始记录一下