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資料報準備乙個php**2、url編碼、替換回車換行為%0d%0a
3、傳送gopher協議
<?php
echo
"hello "
.$_get
["name"].
"\n"
?>
乙個get型的http包,如下:
url編碼後為:
在轉換為url編碼時候有這麼幾個坑
1、問號(?)需要轉碼為url編碼,也就是%3fgopher傳送請求http post請求:傳送post請求前,先看下post資料報的格式2、回車換行要變為%0d%0a,但如果直接用工具轉,可能只會有%0a
3、在http包的最後要加%0d%0a,代表訊息結束(具體可研究http包結束)
那我們將上面的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...