gopher 協議初探

Konmu發表於2020-05-29

Gopher 協議初探

  • 最近兩天看到了位元組脈搏實驗室公眾號上有一篇《Gopher協議與redis未授權訪問》的文章,其中對gopher協議進行了比較詳細的介紹,所以打算跟著後面復現學習一下,順便記錄一些身為菜雞的我所遇到的比較蠢得坑

Gopher協議

  • gopher協議是一種資訊查詢系統,他將Internet上的檔案組織成某種索引,方便使用者從Internet的一處帶到另一處。在WWW出現之前,GopherInternet上最主要的資訊檢索工具,Gopher站點也是最主要的站點,使用tcp70埠。但在WWW出現後,Gopher失去了昔日的輝煌。現在它基本過時,人們很少再使用它。
  • 它只支援文字,不支援影像

協議訪問學習

  • 我們現在最多看到使用這個協議的時候都是在去ssrfredis 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資料流}
    gopher
    gopher

傳送http get請求

  • 在gopher協議中傳送HTTP的資料,需要以下三步
  • 構造HTTP資料包
  • URL編碼、替換回車換行為%0d%0aHTTP包最後加%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"?>
  • 此外自己本地測試時要注意將防火牆關掉
    gopher

傳送http post請求

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

小結

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

參考連結

相關文章