什么是gopher协议
Gopher协议是一种早期的互联网协议,用于在网络上获取文本信息。它于1991年提出,旨在提供一种简单、高效的方式来浏览和访问文件。
Gopher协议使用类似于文件系统的层次结构来组织数据,其中每个项目都有一个唯一的标识符。通过Gopher客户端软件,用户可以浏览目录并选择下载或查看文件。Gopher服务器可以提供文本文件、图像文件、二进制文件等。
与HTTP相比,Gopher协议具有更简单的设计和较少的功能。它基于传输控制协议(TCP)进行通信,默认端口号为70。然而,随着万维网的崛起和HTTP的普及,Gopher协议逐渐被取代。
利用
语法
gopher协议的格式通常为:
gopher://hostname:port/请求方法(get、post等)/path
其中,hostname 表示 Gopher 服务器的主机名或 IP 地址,port 表示 Gopher 服务器监听的端口号(默认为 70),而 path 则是资源的路径。
举个例子
- 要请求 Gopher 服务器上的 /example/file.txt 文本文件,可以使用以下 URL 格式:
gopher://example.com:端口/example/file.txt
- 在本地主机的80端口上使用Gopher协议的GET方法访问一个资源:
gopher://127.0.0.1:80/_GET /index.php HTTP/1.1
/_GET /index.php HTTP/1.1 表示使用 GET 方法请求位于 /index.php 的资源,并且使用 HTTP 1.1 协议版本
- 对于POST请求,可以抓包后使用以下脚本将数据包转换为gopher协议格式:
import urllib.parse payload = """ POST /被渗透页面.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 36 key/cookie等等=xxx #用于身份验证或授权 """ # 对payload中的特殊字符进行编码 tmp = urllib.parse.quote(payload) # 将换行符%0A替换为回车换行符%0D%0A,以利用CRLF漏洞 new = tmp.replace('%0A','%0D%0A') # 构建Gopher URL result = 'gopher://127.0.0.1:80/'+'_'+new # 对新增的部分继续编码 result = urllib.parse.quote(result) print(result)
总结
以上为gopher协议原理、语法及利用总结,读者可躬身实践。
我是秋说,我们下次见。