gopher協議利用

2021-10-10 11:43:40 字數 3271 閱讀 1175

​ gopher是internet上乙個非常有名的資訊查詢系統,它將internet上的檔案組織成某種索引,很方便地將使用者從internet的一處帶到另一處。在www出現之前,gopher是internet上最主要的資訊檢索工具,gopher站點也是最主要的站點,使用tcp70埠。但在www出現後,gopher失去了昔日的輝煌。現在它基本過時,人們很少再使用它;

gopher協議支援發出get、post請求:可以先截獲get請求包和post請求包,在構成符合gopher協議的請求。gopher協議是ssrf利用中最強大的協議

限制:gopher協議在各個程式語言中的使用限制

gopher協議格式

url

:gopher:

//:/_後接tcp資料流

gopher傳送請求http get請求:使用gopher協議傳送乙個請求,環境為:nc起乙個監聽,curl傳送gopher請求

nc啟動監聽,監聽2333埠:nc -lp 2333

使用curl傳送http請求,命令為

root@kali ~# curl gopher:
此時nc收到的訊息為:

root@ubuntu ~# nc -lp 2333

bcd

可以發現url中的a沒有被nc接受到,如果命令變為

root@kali ~# curl gopher:
此時nc收到的訊息為:

root@ubuntu ~# nc -lp 2333

abcd

所以需要在使用gopher協議時在url後加入乙個字元(該字元可隨意寫)

那麼如何傳送http的請求呢?例如get請求。此時我們聯想到,直接傳送乙個原始的http包不就可以嗎?在gopher協議中傳送http的資料,需要以下三步:

1、構造http資料報

2、url編碼、替換回車換行為%0d%0a

3、傳送gopher協議

準備乙個php**

<?php 

echo

"hello "

.$_get

["name"].

"\n"

?>

乙個get型的http包,如下:

url編碼後為:

在轉換為url編碼時候有這麼幾個坑

1、問號(?)需要轉碼為url編碼,也就是%3f

2、回車換行要變為%0d%0a,但如果直接用工具轉,可能只會有%0a

3、在http包的最後要加%0d%0a,代表訊息結束(具體可研究http包結束)

gopher傳送請求http post請求:傳送post請求前,先看下post資料報的格式

那我們將上面的post資料報進行url編碼並改為gopher協議

curl gopher:
ssrf.php的**為

<?php 

echo

"hello "

.$_post

["name"].

"\n"

?>

使用curl發起gopher的post請求後,結果為

這裡有個疑問:為什麼發起了2次請求?為什麼會把引數name=margin當作乙個請求?這個地方我除錯了很久,發現問題出現在post請求頭中,我之前發post請求都是直接用指令碼,但從來沒考慮過哪些引數是post請求必須的,經過排查,發現有4個引數為必要引數(四個引數的含義不再贅述):

發現請求正常,ok,那我們現在就介紹完了gopher協議的get和post請求。

此工具生成gopher鏈結,用於利用ssrf並在各種伺服器中獲取rce

使用方法

安裝:

chmod +x install.sh

sudo ./install.sh

python gopherus.py -h
command

description

gopherus --help

help

gopherus --exploit

arguments can be :

–exploit mysql

–exploit postgresql

–exploit fastcgi

–exploit redis

–exploit zabbix

–exploit pymemcache

–exploit rbmemcache

–exploit phpmemcache

–exploit dmpmemcache

–exploit smtp

參考文章與工具:

gopher協議在SSRF漏洞中的作用

1 什麼是gopher協議?2 如何使用gopher協議 shell?3 在ssrf中如何使用gopher協議 shell?一 什麼是gopher協議?定義 gopher是internet上乙個非常有名的資訊查詢系統,它將internet上的檔案組織成某種索引,很方便地將使用者從internet的一...

利用MSN協議開發

今天化了乙個下午的時間研究了一下msn的協議,對msn的協議注意了有很長的時間了,但是卻一直沒有親自做過什麼程式。前面有開心的msn,後來也給陳銳發過,今天決定自己做乙個程式連帶學習託管c 基於msn的開發其實非常簡單,關鍵是熟悉msn的協議,大家可以在這裡學習到詳細的msn協議的知識,唯一可惜的就...

利用SOAP協議開發web service

web service 使用xml格式為第三方應用程式提供api的一種技術 soap是簡單對像儲存協議 建立web service步驟如下 1 建立wsdl檔案,我用zend studio建的,檢視如下 下面是檢視對應的原始檔,可直接copy。getdatarequest 可以接收更多的輸入引數 g...