[网络安全] gopher协议原理、语法及利用总结

什么是gopher协议

Gopher协议是一种早期的互联网协议,用于在网络上获取文本信息。它于1991年提出,旨在提供一种简单、高效的方式来浏览和访问文件。

Gopher协议使用类似于文件系统的层次结构来组织数据,其中每个项目都有一个唯一的标识符。通过Gopher客户端软件,用户可以浏览目录并选择下载或查看文件。Gopher服务器可以提供文本文件、图像文件、二进制文件等。

与HTTP相比,Gopher协议具有更简单的设计和较少的功能。它基于传输控制协议(TCP)进行通信,默认端口号为70。然而,随着万维网的崛起和HTTP的普及,Gopher协议逐渐被取代。


利用

利用gopher协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp 等,也可以发送 GET、POST 请求,这可以拓宽 SSRF 的攻击面。


语法

gopher协议的格式通常为:

gopher://hostname:port/请求方法(get、post等)/path

其中,hostname 表示 Gopher 服务器的主机名或 IP 地址,port 表示 Gopher 服务器监听的端口号(默认为 70),而 path 则是资源的路径。

举个例子

  1. 要请求 Gopher 服务器上的 /example/file.txt 文本文件,可以使用以下 URL 格式:
gopher://example.com:端口/example/file.txt
  1. 在本地主机的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 协议版本

  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)

实战

实战参考:

[CTF/网络安全] 攻防世界 very_easy_sql 解题详析(gopher协议+ssrf漏洞sql注入+盲注脚本)


总结

以上为[网络安全] gopher协议原理、语法及利用总结,读者可躬身实践。

我是秋说,我们下次见。

猜你喜欢

转载自blog.csdn.net/2301_77485708/article/details/132052102