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%0a
get.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
引數不能被接受的情況要想辦法找一下問題原因和解決辦法。 - 有師傅知道原因的也希望能指點一下