SSRF - Pikachu
概述:
SSRF(Server-Side Request Forgery:伺服器端請求偽造)
其形成的原因大都是由於服務端提供了從其他伺服器應用獲取資料的功能,但又沒有對目標地址做嚴格過濾與限制
導致攻擊者可以傳入任意的地址來讓後端伺服器對其發起請求,並返回對該目標地址請求的資料
資料流:攻擊者----->伺服器---->目標地址
根據後臺使用的函式的不同,對應的影響和利用方法又有不一樣
PHP中下面函式的使用不當會導致SSRF: file_get_contents() fsockopen() curl_exec()
如果一定要通過後臺伺服器遠端去對使用者指定("或者預埋在前端的請求")的地址進行資源請求,則請做好目標地址的過濾。
靶場一:(SSRF - curl)
1.進入靶場頁面,這句話是一個連結,點選如圖所示
2.檢視一波原始碼
3.檢視URL可知跳轉路徑,
4.修改URL,比如:http://www.baidu.com
5.我們可以把URL後面的內容換成同一網路的其他伺服器上地址和埠,探測內網的其他資訊,比如埠開放情況,也可以訪問某一個資料夾,這種get型別的資料我們通過修改URL的內容就可以了。我們看一下後臺的程式碼,如果沒有做好過濾,就可以通過curl這個方法獲取到內網的其他伺服器上的資訊,也可以對網路上的進行讀取(路徑如下圖所示):
靶場二:(SSRF - file_get_content)
補充:file()與file_get_content()的區別
PHP中file()函式和file_get_contents() 函式的作用都是將整個檔案讀入某個介質,其主要區別就在於這個介質的不同。file() 函式是將檔案讀入一個數組中,而file_get_contents()是將檔案讀入一個字串中。
file() 函式是把整個檔案讀入一個數組中,然後將檔案作為一個數組返回。陣列中的每個單元都是檔案中相應的一行,包括換行符在內。如果失敗,則返回 false。
file_get_contents() 函式是把整個檔案讀入一個字串中。和 file() 一樣,不同的是file_get_contents()
1.進入靶場依然是
2.檢視url
3.檢視一波原始碼
4.file_get_contents() 函式把整個檔案讀入一個字串中。其實和file()函式一樣,不同的是 file_get_contents() 把檔案讀入一個字串。
file_get_contents() 函式是用於將檔案的內容讀入到一個字串中的首選方法。如果作業系統支援,還會使用記憶體對映技術來增強效能。
//讀取PHP檔案的原始碼:php://filter/read=convert.base64-encode/resource=ssrf.php
//內網請求:http://x.x.x.x/xx.index
意味著file_get_contents裡面帶有php:// filter 我們用這個就可以來讀取php原始碼,所以我們來構造URL:
http://localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php
5.然後網頁出現了亂碼,
6.利用解碼工具,
https://base64.us/
<?php /** * Created by runner.han * There is nothing new under the sun */ $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1); if ($SELF_PAGE = "ssrf.php"){ $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''); } $PIKA_ROOT_DIR = "../../"; include_once $PIKA_ROOT_DIR.'header.php'; ?$根據"SSRF"裡面的專案來搞懂問題的厙f肂ٚ]KKH˜YًXۛ[KOٚ]ٚ]KKH˛XZ[Xۛ[KOܚ[YWۛو RЗԓӕђT ٛ\ ς