gopher协议
Gopher协议是一种早期的互联网协议,用于在网络上获取文本信息。它于1991年提出,旨在提供一种简单、高效的方式来浏览和访问文件。
Gopher协议使用类似于文件系统的层次结构来组织数据,其中每个项目都有一个唯一的标识符。通过Gopher客户端软件,用户可以浏览目录并选择下载或查看文件。Gopher服务器可以提供文本文件、图像文件、二进制文件等。
与HTTP相比,Gopher协议具有更简单的设计和较少的功能。它基于传输控制协议(TCP)进行通信,默认端口号为70。然而,随着万维网的崛起和HTTP的普及,Gopher协议逐渐被取代。
利用
利用gopher协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp 等,也可以发送 GET、POST 请求,这可以拓宽 SSRF 的攻击面。
测试环境条件:
两台虚拟机,centos、ubuntu。
centos发起端口监听。
ubuntu发起请求。
centos:
如果没有nc,那么安装一个
apt-get install -y nc
先查看centos的ip地址,测试ubuntu是否可以ping通。
启动监听,监听9527端口
nc -lp 9527
ubuntu:
发起请求
curl gopher://172.16.129.74:9527/_abcd
centos那边会有abcd的,因为会吞掉第一个字符,所以写一个_。
注意!
如果不成功。可能是防火墙的策略问题,关闭REJECT.
iptables -L INPUT --line-numbers
输入:
iptables -D INPUT 11
11为REJECT的id
然后开启监听,ubuntu进行访问输入。
GET请求
使用gopher协议,环境为:
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写一个文件
touch get.php
在get.php里面输入:
<?php echo "hello".$_GET['name']; ?>
centos启动监听,监听9527端口
nc -lp 9527
ubuntu发起get请求。
书写一个GET的HTTP包,进行URL编码。,并且将回车换行替换为%0d%0a
GET /ssrf/get.php?name=hsj HTTP/1.1
Host:172.16.129.74
url编码后:
GET%20%2Fssrf%2Fget.php%3Fname%3Dhsj%20HTTP%2F1.1%0AHost%3A172.16.129.74
并且将回车换行替换为%0d%0a,结尾也要有。
GET%20%2Fssrf%2Fget.php%3Fname%3Dhsj%20HTTP%2F1.1%0d%0aHost%3A172.16.129.74%0d%0a
GET%20%2Fssrfget.php%3Fname%3Dhsj%20HTTP%2F1.1%0d%0aHost%3A172.16.129.74%0d%0a
提示权限不够。
关闭lamp
docker stop lamp
删除
docker rm lamp
查看是否删除成功
docker ps
开启挂载到root/www目录下面。
docker run -d -p 80:80 -v /root/www:/app --name ssrf docker.io/mattrayner/lamp
创建一个www的目录,写入一个文件
在防火墙里面将root/www设置成白名单。
输入:
成功访问。
然后就和上面步骤一样,在www目录下面设置一个get.php文件,使用vim写入代码
<?php echo "hello".$_GET['name']; ?>
写http包
GET /get.php?name=hsj HTTP/1.1
Host:172.16.129.74
URL编码
GET%20%2Fget.php%3Fname%3Dhsj%20HTTP%2F1.1%0d%0aHost%3A172.16.129.74%0d%0a
输入:
curl gopher://172.16.129.74:80/GET%20%2Fget.php%3Fname%3Dhsj%20HTTP%2F1.1%0d%0aHost%3A172.16.129.74%0d%0a
POST请求
和get前提条件一样。
新建,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-urTencoded%0d%0aContent-Length%3A8%0d%0a%0d%0aname%3DHXB%0d%0a
输入:
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=HXB%0d%0a
curl gopher://172.16.129.74:80/_POST%20/post.php%20HTTP/1.1%0D%0Ahost:192.168.58.131%0D%0AContent-Type:application/x-www-form-urlencoded%0D%0AContent-Length:8%0D%0A%0D%0Aname=HSJ%0D%0A