gopher协议

gopher协议

一、目标

  1. 什么是gopher协议
  2. 在SSRF中如何使用gopher协议反弹shell

二、定义

Gopher是Internet的一个信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议(万金油协议)。默认使用tcp70端口。

gopher在各种变成语言中的使用限制

image-20230917141615667

三、gopher协议的格式

URL:gopher://host:port/gopher-path_TCP数据流(反弹shell等命令)

注意

  • gopher的默认端口号是70
  • 如果发起post请求,回车换行需要使用%0d%0a,如果含有多个参数,连接符&也需要进行url编码
  • gopher-path后需要加一个字符,防止tcp数据流改变,默认使用下划线_

四、gopher协议发送http请求

步骤
1.构造http数据包
2.url编码、替换回车换行为%0d%0a
3.发送gopher协议
服务器端curl功能代码
<?php
//	ssrf_curl.php

if(isset($_REQUEST['url'])){
	$link = $_REQUEST['url'];
	$fileName = './curled/'.time().".txt";
	$curlObj = curl_init($link);
	$fp = fopen($fileName,'w');
	
	curl_setopt($curlObj,CURLOPT_FILE,$fp);
	curl_setopt($curlObj,CURLOPT_HEADER,0);
	curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);
	
	curl_exec($curlObj);
	curl_close($curlObj);
	fclose($fp);
	
	if(getimagesize($fileName)){
		header("Content-Type:image/png");
	}
	
	$fp = fopen($fileName,'r');
	$result = fread($fp,filesize($fileName));
	fclose($fp);
	echo $result;
}else{
	echo "?url=[url]";
}
?>
①get请求
?url=gopher://192.168.232.173:2333/_abcd

image-20230917152658022

kali端nc响应

image-20230917152808908

②post请求
url=gopher://192.168.232.173:2333/_abcd

image-20230917152958743

kali端nc响应

image-20230917153036481

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值