何爲SSRF,能幹嘛?

SSRF漏洞定義

SSRF(Server-Side Request Forgery:服務器端請求僞造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF是要目標網站的內部系統。(因爲他是從內部系統訪問的,所有可以通過它攻擊外網無法訪問的內部系統,也就是把目標網站當中間人)

  • 形成原因:服務端提供了從其他服務器應用獲取數據的功能,且沒有對目標地址做過濾與限制。比如從指定URL地址獲取網頁文本內容,加載指定地址的圖片,文檔,等等。
  • 主要利用方式:
    • 對外網服務器所在內網,進行本地端口掃描,獲取banner信息
      測試運行在內網或本地的應用程序
      利用file協議讀取本地文件等
      

漏洞可能存在的地方

  1.社交分享功能:獲取超鏈接的標題等內容進行顯示
  2.轉碼服務:通過URL地址把原地址的網頁內容調優使其適合手機屏幕瀏覽
  3.在線翻譯:給網址翻譯對應網頁的內容
  4.圖片加載/下載:例如富文本編輯器中的點擊下載圖片到本地;通過URL地址加載或下載圖片
  5.圖片/文章收藏功能:主要其會取URL地址中title以及文本的內容作爲顯示以求一個好的用具體驗
  6.雲服務廠商:它會遠程執行一些命令來判斷網站是否存活等,所以如果可以捕獲相應的信息,就可以進行ssrf測試
  7.網站採集,網站抓取的地方:一些網站會針對你輸入的url進行一些信息採集工作
  8.數據庫內置功能:數據庫的比如mongodb的copyDatabase函數
  9.郵件系統:比如接收郵件服務器地址
  10.編碼處理, 屬性信息處理,文件處理:比如ffpmg,ImageMagick,docx,pdf,xml處理器等
  11.未公開的api實現以及其他擴展調用URL的功能:可以利用google 語法加上這些關鍵字去尋找SSRF漏洞一些的url中的關鍵字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……
  12.從遠程服務器請求資源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎對象的地方 如wordpress xmlrpc.php)

可能存在ssrf漏洞的php函數

  • file_get_contents()
    在這裏插入圖片描述
  • fsockopen()
    在這裏插入圖片描述
  • curl_exec()
    在這裏插入圖片描述

靶場搭建

  • bwapp有三題ssrf環境,但不推薦使用

  • 這裏使用的是webug4.0虛擬機靶場環境

    • 下載鏈接: https://pan.baidu.com/s/15msVjvX1RZ3vbYxQyy1sUg 提取碼: k415
    • 下載後解壓虛擬機文件(其他的爲cms源碼文件),解壓完成後即可打開虛擬機
      在這裏插入圖片描述
    •  簡潔手冊中有源碼搭建和虛擬機搭建的簡稱
       虛擬機登錄密碼爲空,回車即可登錄。打開後啓動phpstuday環境即運行。
       訪問http://靶機地址,就可以到達網站登錄頁面,用戶密碼默認爲admin/admin
      
    • 在這裏插入圖片描述
  • 如果新環境沒有開啓Apache重寫未開啓,可能導致導致The requested URL /xxxx.html was not found on this server

    • 解決辦法:修改http.conf文件

      • #LoadModule rewrite_module modules/mod_rewrite.so去掉前面的#號

      • AllowOverride None =>改爲 AllowOverride All

      • 在這裏插入圖片描述

    • 修改完之後重啓phpstuday

漏洞利用

  • 啓動靶場
    • ​ 在靶場目錄往下拖動找到ssrf靶場,點擊訪問/也可以直接在右上角搜索ssrf
      在這裏插入圖片描述
    • 打開鏈接之後默認是404頁面
      • 可能是在靶機團隊做的測試忘記刪除了
      • 在這裏插入圖片描述
  • 利用file協議訪問本地文件
    • 讀取系統配置文件
      ?url=file://C:/windows/win.ini
      
      • 在這裏插入圖片描述
    • 讀取任意文件(前提是需要知道路徑,不知道的話可以嘗試爆破目錄)
      ?url=file://C:/phpstudy/www/flag.txt
      
    在這裏插入圖片描述
    • 如果文件存在但又訪問不了,可能就是因爲windows文件路徑坑爹的斜槓反斜槓機制,兩種斜槓都嘗試訪問一下說不定有驚喜。
      

探測內網主機端口是否開放獲取banner信息

  • 探測端口是否開放(需要主機在線),開放的話會返回信息/未開放則是空白頁面
    ?url=http://host:port
    
    • 訪問80端口在這裏插入圖片描述
    • 訪問22端口(直接返回了banner)
      在這裏插入圖片描述

防護措施

  • 禁止跳轉
  • 過濾返回信息,驗證遠程服務器對請求的響應是比較容易的方法。如果web應用是去獲取某一種類型的文件。那麼在把返回結果展示給用戶之前先驗證返回的信息是否符合標準。
  • 禁用不需要的協議,僅僅允許http和https請求。可以防止類似於file://, gopher://, ftp:// 等引起的問題
  • 設置URL白名單或者限制內網IP(使用gethostbyname()判斷是否爲內網IP)
  • 限制請求的端口爲http常用的端口,比如 80、443、8080、8090
  • 統一錯誤信息,避免用戶可以根據錯誤信息來判斷遠端服務器的端口狀態。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章