Gopher 協議初探
- 最近兩天看到了字節脈搏實驗室公眾號上有一篇《Gopher協議與redis未授權訪問》的文章,其中對gopher協議進行了比較詳細的介紹,所以打算跟着后面復現學習一下,順便記錄一些身為菜雞的我所遇到的比較蠢得坑
Gopher協議
gopher協議是一種信息查找系統,他將Internet上的文件組織成某種索引,方便用戶從Internet的一處帶到另一處。在WWW出現之前,Gopher是Internet上最主要的信息檢索工具,Gopher站點也是最主要的站點,使用tcp70端口。但在WWW出現后,Gopher失去了昔日的輝煌。現在它基本過時,人們很少再使用它。- 它只支持文本,不支持圖像
協議訪問學習
- 我們現在最多看到使用這個協議的時候都是在去
ssrf打redis shell、讀mysql數據的時候,由於之前對這個協議了解不是很熟,所以這次看到這篇文章后打算借此學習一下他的通信方式 - 首先最基礎的看一下它如何發送
get請求
復現環境
win10 + kali 2018 +
- 在
win10主機使用nc監聽端口,nc -lvp 192.168.109.1:6666 - 然后用
kali使用curl gopher://192.168.109.1:6666/_abcd發送gopher get請求,可以發現_不會被顯示 gopher協議格式:gopher://IP:port/_{TCP/IP數據流}


發送http get請求
- 在gopher協議中發送HTTP的數據,需要以下三步
- 構造
HTTP數據包 URL編碼、替換回車換行為%0d%0a,HTTP包最后加%0d%0a`代表消息結束- 發送
gopher協議, 協議后的IP一定要接端口 curl gopher://192.168.109.166:80/_GET%20/get.php%3fparam=Konmu%20HTTP/1.1%0d%0aHost:192.168.109.166%0d%0aget.php中寫入<?php echo "Hello"." ".$_GET['param']."\n"?>- 此外自己本地測試時要注意將防火牆關掉

發送http post請求
POST與GET傳參的區別:它有4個參數為必要參數- 需要傳遞
Content-Type,Content-Length,host,post的參數 post.php中寫入<?php echo "Hello".$_POST['name']."\n";?>- 我這里復現的時候不知道什么原因一直無法將
post的參數傳入,最終只有這種效果

小結
- 本次對於文章的學習基本對
gopher協議有了一定的了解,對於文中后續的使用gopher實現redis未授權訪問和ssrf還未進一步實現,這將是后續將要完成的任務,此外還有就是復現過程中出現post參數不能被接受的情況要想辦法找一下問題原因和解決辦法。 - 有師傅知道原因的也希望能指點一下
