
豆包 Doubao Image API 价格全面解析
Gopher协议是一种早期的互联网协议,用于在网络上获取文本信息。虽然它在现代互联网中的使用已经相对较少,但其仍然具有一些独特的应用价值,尤其是在特定环境下的资源获取和信息传输中。本文将深入探讨Gopher协议的应用,包括如何利用其API Key进行数据获取,并结合实际案例进行分析与演示。
Gopher协议于1991年提出,旨在提供一种简单、高效的方式来浏览和访问文件。其设计类似于文件系统的层次结构,每个项目都有一个唯一的标识符。通过Gopher客户端软件,用户可以浏览目录并选择下载或查看文件。Gopher服务器可以提供文本文件、图像文件、二进制文件等。
与HTTP协议相比,Gopher协议具有更简单的设计和较少的功能,主要基于传输控制协议(TCP)进行通信,默认端口号为70。然而,随着万维网的崛起和HTTP的普及,Gopher协议逐渐被取代。尽管如此,Gopher协议在某些特定的网络环境中仍然具有一定的实用性。
利用Gopher协议可以攻击内网的Redis、Mysql、FastCGI、FTP等,也可以发送GET、POST请求,这可以拓宽SSRF的攻击面。通过构建特定的网络请求,可以在内网环境中执行一些特定的操作,例如获取API Key或进行数据库探测等。
在进行Gopher协议的安全测试时,通常需要搭建一个测试环境。一般使用两台虚拟机,一台运行CentOS,另一台运行Ubuntu。CentOS用于发起端口监听,而Ubuntu用于发起请求。
首先,需要确保CentOS上安装了nc
,如果没有可以通过以下命令安装:
apt-get install -y nc
接着,查看CentOS的IP地址,并确保Ubuntu可以ping通。然后启动监听,监听特定端口,例如9527端口:
nc -lp 9527
在Ubuntu上,通过curl命令发起Gopher请求:
curl gopher://:9527/_abcd
在CentOS端,会收到abcd的响应,因为Gopher协议会吞掉第一个字符,所以需要在请求前添加一个下划线:
如果请求不成功,可能是由于防火墙策略的问题。可以通过以下命令查看并关闭REJECT规则:
iptables -L INPUT --line-numbers
iptables -D INPUT 11
其中11为REJECT的ID。
使用Gopher协议进行GET请求需要特定的环境配置。一般情况下,CentOS发起端口监听,Ubuntu发起请求,前提是两者可以互相ping通,并关闭防火墙中的ICMP协议。
在CentOS上,开启Docker并启动LAMP环境(设置根目录为app):
docker run -d --name=lamp -p 80:80 -p 3306:3306 -v /app:/app docker.io/mattrayner/lamp
进入app目录,创建一个PHP文件:
touch get.php
在get.php中输入以下代码:
CentOS启动监听后,在Ubuntu上书写一个GET的HTTP包,并进行URL编码。需要注意的是将回车换行替换为%0d%0a
:
GET /ssrf/get.php?name=hsj HTTP/1.1
Host:172.16.129.74
编码后:
GET%20%2Fssrf%2Fget.php%3Fname%3Dhsj%20HTTP%2F1.1%0d%0aHost%3A172.16.129.74%0d%0a
在执行请求时,可能会遇到权限不足的问题。此时,可以通过以下步骤解决:
docker stop lamp
docker rm lamp
docker run -d -p 80:80 -v /root/www:/app --name ssrf docker.io/mattrayner/lamp
与GET请求类似,POST请求也需要在特定的环境下进行配置。创建post.php文件并插入以下代码:
构造POST请求的数据包如下:
POST /post.php HTTP/1.1
host:172.16.129.74
Content-Type:application/x-www-form-urlencoded
Content-Length:8
name=HXB
URL编码后:
POST%20%2Fpost.php%20HTTP%2F1.1%0d%0ahost%3A172.16.129.74%0d%0aContent-Type%3Aapplication%2Fx-www-form-urlencoded%0d%0aContent-Length%3A8%0d%0a%0d%0aname%3DHXB%0d%0a
通过curl命令发起请求:
curl gopher://172.16.129.74:80/_POST%20%2Fpost.php%20HTTP%2F1.1%0d%0ahost%3A172.16.129.74%0d%0aContent-Type%3Aapplication%2Fx-www-form-urlencoded%0d%0aContent-Length%3A8%0d%0a%0d%0aname%3DHXB%0d%0a
尽管Gopher协议在现代互联网中的使用已经减少,但其简单的设计和特定的应用场景仍然为其保留了一席之地。在某些情况下,Gopher协议可以作为一种较为隐蔽的通信方式,在不被注意的情况下完成数据传输和信息获取。
然而,随着网络安全的不断加强,Gopher协议的使用也面临着新的挑战。例如,现代网络防火墙和入侵检测系统可能会对Gopher协议的流量进行严格的监控和过滤。因此,在实际应用中,需要对其进行更为细致的配置和测试,确保其能够在特定环境下有效运行。
Gopher协议作为一种早期的互联网协议,尽管在现代应用中使用较少,但其仍具有一定的技术价值。通过合理的配置和使用,Gopher协议可以在特定的网络环境中发挥独特的作用,尤其是在信息获取和数据传输方面。本文通过实际案例和代码演示,展示了如何利用Gopher协议进行GET和POST请求,同时探讨了其在现代网络中的应用与挑战。
问:Gopher协议在现代互联网中的主要用途是什么?
问:如何在Gopher协议中实现GET请求?
问:Gopher协议与HTTP协议有何区别?
问:在Gopher协议中遇到权限问题如何解决?
问:Gopher协议的安全利用有哪些注意事项?