# 十七、服務端請求偽造
> 作者:Peter Yaworski
> 譯者:[飛龍](https://github.com/)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
## 描述
服務端請求偽造,或者 SSRF,是一種類型,它允許攻擊者使用目標服務器來代表攻擊者自己執行 HTTP 請求。這和 CSRF 類似,因為兩個漏洞都執行了 HTTP 請求,而不被受害者察覺。在 SSRF 中,受害者是漏洞服務器,在 CSRF 中,它是用戶的瀏覽器。
這里的潛力非常大,包括:
+ 信息暴露,其中我們欺騙服務器來暴露關于自身的信息,在示例 1 中使用 AWS EC2 元數據描述。
+ XSS,如果我們讓服務器渲染遠程 HTML 文件,其中帶有 JavaScript。
## 示例
### 1\. ESEA SSRF 和 AWS 元數據請求
難度:中
URL:`https://play.esea.net/global/media_preview.php?url=`
報告鏈接:`http://buer.haus/2016/04/18/esea-server-side-request-forgery-and-querying-aws-meta-data/`
報告日期:2016.4.18
獎金:$1000
描述:
電子運動娛樂聯盟 (ESEA) 是一個電子運動視頻競技比賽的社區,由 ESEA 建立。最近他們啟動了一個漏洞獎勵計劃,Brett Buerhaus 在上面發現了一個不錯的 SSRF 漏洞。
使用 Google Dorking,Brett 搜索`site:https://play.esea.net/ ext:php`。這讓 Google 在`play.esea.net`域中搜索 PHP 文件。查詢結果包括`https://play.esea.net/global/media_preview.php?url=`。
看看這個 URL,似乎 ESEA 從外部站點渲染內容。在尋找 SSRF 的時候,這是一個危險標志。像他描述的那樣,Brett 嘗試它自己的域名:`https://play.esea.net/global/media_preview.php?url=http://ziot.org`。但是沒有作用,結果,ESEA 尋找圖片文件,所以它嘗試包含圖片的載荷。首先使用 Google 作為域名,之后是它自己的,`https://play.esea.net/global/media_preview.php?url=http://ziot.org/1.png`。
成功了。
現在,這里真實的漏洞是,欺騙服務器渲染其它內容,而不是預設的圖片。在他的博文中,Brett 描述了通常的技巧,例如使用空字符(`%00`),額外的斜杠以及問號來繞過或欺騙后端。在它的例子中,它向 URL 添加了`?`:`https://play.esea.net/global/media_preview.php?url=http://ziot.org/?1.png`。
它所做的就是將前面的文件路徑,`1.png`轉換為參數,并且不是實際要渲染的 URL 的一部分。因此,ESEA 渲染了它的頁面。換句話說,它繞過了第一個測試的額外檢查。
現在,這里你可以嘗試執行 XSS 載荷,像他描述的那樣。只需創建一個帶有 JavaScript 的簡單 HTML 頁面,讓站點渲染它,就這么簡單。但是它更進了一步。使用來自 Ben Sadeghipour 的輸入(在我的 YouTUbe 頻道和 Polyvore RCE 的 Hacking Pro Tips Interview #1 中提到過),它測試了 AWS EC2 實例元數據的查詢。
EC2 是 Amazon 的彈性計算云。它們提供了查詢自身的功能,通過它們的 IP,來拉取關于實例的元數據。權限很明顯限制為實例自身,但是由于 Brett 能夠控制服務器從哪里加載內容,它能夠使其調用自身并拉取元數據。
EC2 的文檔在這里:`http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2instance-metadata.html`。這里是一些你可以抓取的敏感信息。
> 重要結論
> Google Dorking 是一個不錯的工具,它能在發現所有類型的可能利用時,節省你的時間。如果你正在尋找 SSRF 漏洞,要留意任何在遠程內容中拉取的目標 URL。這里,它的標志是`url=`。
> 其次,不要僅限于你的第一想法。Brett 完全能夠報告 XSS 載荷,但是這不太深入。通過深入挖掘,它就能發現漏洞的真正價值。但是這樣做的時候,要小心不要越界。
## 總結
服務端請求偽造在服務器可悲利用來代表攻擊者執行請求時出現。但是,并不是所有請求最終都能利用。例如,由于站點允許你提供圖片的 URL,但它會復制并在自己站點上使用(就像上面的 ESEA 示例),并不意味站點存在漏洞。發現它們只是第一步,隨后你需要確認它們的潛能。對于 ESEA,雖然站點尋找圖片文件,它并不驗證收到的東西,并且可以用于渲染惡意 XSS,以及對自己的 EC2 元數據執行 HTTP 請求。