SSRF服務端請求偽造(外網訪問內網)
SSRF(Server-Side Request Forgery:伺服器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF是要目標網站的內部系統。(因為他是從內部系統訪問的,所有可以透過它攻擊外網無法訪問的內部系統,也就是把目標網站當中間人)
其實也就相當於一箇中間人攻擊(主要目的就是:由外網攻擊者利用SSRF漏洞攻擊內網)
一般來說基本都是透過指令碼去掃內網的ip、埠點到為止
1、SSRF形成原因SSRF 形成的原因大都是由於服務端提供了從其他伺服器應用獲取資料的功能,且沒有對目標地址做過濾與限制。比如從指定URL地址獲取網頁文字內容,載入指定地址的圖片,文件,等等。
即也就是說伺服器端的驗證並沒有對其請求如獲取圖片的引數(image=)做出嚴格的過濾以及限制,從而導致A網站可以從其他伺服器的獲取資料
(預設網站webserver192.168.1.5的引數指定訪問內網中的某臺機器的內部資源地址,如果沒有對其指定地址嚴格限制,那麼就可能造成由webserver192.168.1.5這太機器訪問內部的任意一臺機器的資源。)——>>如:www.xxx.com/xx.php?image=URL,一般像分享、線上翻譯這些功能地址。
即我們要對目標網站的架構瞭解,腦子了要有一個架構圖。比如 : A網站,是一個所有人都可以訪問的外網網站,B網站是一個他們內部的OA網站,我們普通使用者只可以訪問a網站,不能訪問b網站。但是我們可以同過a網站做中間人,訪問b網站,從而達到攻擊b網站需求。
主要標誌就是:xx.php?url=.....
(也可以命令執行,需要條件。甚至指令碼執行。。。。)
2、利用SSRF漏洞的目的SSRF漏洞就是透過篡改獲取資源的請求傳送給伺服器,但是伺服器並沒有檢測這個請求是否合法的,然後伺服器以他的身份來訪問其他伺服器的資源。
3、SSRF漏洞的用途可以對外網伺服器所指向的內網、伺服器本地進行埠掃描,獲取一些服務的banner資訊攻擊執行在內網或伺服器本地的應用程式(比如溢位)對內網web應用進行指紋識別,透過訪問預設檔案實現攻擊內外網的web應用,主要是使用get引數就可以實現的攻擊(比如struts2,sqli等利用file協議讀取本地檔案等4、SSRF漏洞的特性SSRF的強大和成功機率由函式本身功能決定
即程式碼中是什麼函式其功能有多強大,那麼存在SSRF漏洞的話,漏洞利用的機率和影響力就有多大。比如下面的兩個函式curl_init、file_get_contents:一個能達到執行指令碼的地步,一個能達到讀檔案的地步。
例項對於curl_init函式,利用這個遠端包含的特性,使用埠掃描指令碼http://192.168.18.62:86/bwapp/evil/ssrf-1.txt去掃描內網ip開放的埠
注意:這裡為什麼txt被執行了,因為這裡有個包含漏洞才執行了
對於file_get_content函式:(不支援https,支援http,支援php://內建協議)
讀檔案需要base64編碼(php://filter/read=convert.base64-encode/resource=xxx.php)
http://192.168.18.23/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=../../index.php
這裡我得總結一下,上面為什麼我需要用檔案包含去實現我SSRF的目的?,而且為什麼要用內建函式去讀檔案?,如果是這樣我直接用檔案包含不就行了麼,簡直跟我檔案包含沒有任何區別嘛。
其實這裡檔案包含是檔案包含,SSRF是SSRF,二者之間是本質的不同,一個主要目的是包含檔案,一個主要目的是透過中間伺服器探測內網資訊,這裡只是藉助了檔案包含的能力舉得例子,實際的例子多得很並不都涉及到檔案包含,並不能混淆。就好比檔案上傳利用檔案包含開啟一句話一樣。
以上只是對兩個例項的說明。
其本質是:檔案包含了站點web伺服器上的東西,而ssrf的目的是打進內網,搞內網的東西。
不懂可以去wooyun看例子,ssrf是藉助站點web伺服器進入內網進行資訊蒐集。
5、如何挖掘SSRF漏洞分享:透過URL地址分享網頁內容轉碼服務線上翻譯圖片載入與下載:透過URL地址載入或下載圖片圖片、文章收藏功能未公開的api實現以及其他呼叫URL的功能從URL關鍵字中尋找sharewapurllinksrcsourcetargetu3gdisplaysourceURlimageURLdomain...
6、常用SSRF去做什麼事利用執行指令碼進行埠探測任意地址訪問內網訪問任意檔案讀取內網攻擊7、繞過方法(繞開一般ssrf的防護)1、更改IP地址寫法一些開發者會透過對傳過來的URL引數進行正則匹配的方式來過濾掉內網IP,如採用如下正則表示式:
^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$
對於這種過濾我們可以採用改編IP的寫法的方式進行繞過,例如192.168.0.1這個IP地址我們可以改寫成:
(1)、8進位制格式:0300.0250.0.1(2)、16進位制格式:0xC0.0xA8.0.1(3)、10進位制整數格式:3232235521(4)、16進位制整數格式:0xC0A80001還有一種特殊的省略模式,例如10.0.0.1這個IP可以寫成10.1
2、利用解析URL所出現的問題
在某些情況下,後端程式可能會對訪問的URL進行解析,對解析出來的host地址進行過濾。這時候可能會出現對URL引數解析不當,導致可以繞過過濾。
http://[email protected]/
當後端程式透過不正確的正則表示式(比如將http之後到com為止的字元內容,也就是www.Jeromeyoung.com,認為是訪問請求的host地址時)對上述URL的內容進行解析的時候,很有可能會認為訪問URL的host為www.Jeromeyoung.com,而實際上這個URL所請求的內容都是192.168.0.1上的內容。
8、防護SSRF措施(1)(黑名單)過濾10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
(2)(黑名單)過濾file:///、dict://、gopher://、ftp:// 危險schema
(3)使用地址白名單
(4)內網服務開啟鑑權(Memcached, Redis, Elasticsearch and MongoDB)
(5)對回顯內容進行識別,採取限制措施
(6)需要使用網際網路資源(比如貼吧使用網路圖片)而無法使用白名單的情況:首先禁用 CURLOPT_FOLLOWLOCATION;然後透過域名獲取目標ip,並過濾內部ip;最後識別返回的內容是否與假定內容一致
CSRF跨站請求偽造(也叫點選攻擊)Cross-site request forgery 簡稱為“CSRF”,在CSRF的攻擊場景中攻擊者會偽造一個請求(這個請求一般是一個連結),然後欺騙目標使用者進行點選,使用者一旦點選了這個請求,整個攻擊就完成了。所以CSRF攻擊也成為"one click"攻擊。 很多人搞不清楚CSRF的概念,甚至有時候會將其和XSS混淆,更有甚者會將其和越權問題混為一談,這都是對原理沒搞清楚導致的。
1、CSRF攻擊原理程式設計師開發的時候,未對相關頁面進行token和referer判斷,造成攻擊者可構造自己的URL地址欺騙目標使用者進行點選。(點選後因為未對相關頁面進行token和referer判斷,即連結中沒得帶token或者資料包中沒得referer這類的操作,所以連結地址沒得校驗操作直接執行了)其實也就是像下面的重要頁面的防範措施沒有做到位
以例子進行說明:
當我們開啟網站或者登陸某個網站後,就會產生一個會話(這裡指使用者登陸後),這個會話可能是SESSION,Cookie控制,但是這是無關緊要的。唯一的重點是瀏覽器與伺服器之間是在會話之中,在這個會話沒有結束時候,你可以利用你的許可權對網站進行操作,如進行發表文章,發郵件,刪除文章等操作。當這個會話結束後,你在進行某些操作時候Web應用程式通常會來提醒你,您的會話已過期,或者是請重新登陸等提示。
這非常好理解,就像我們登陸網上銀行後,Web瀏覽器已經跟可信的站點建立了一個經認證的會話。之後,只要是透過該Web瀏覽器這個認證的會話所傳送的請求,都被視為可信的動作,例如轉賬,匯款等操作。當我們在一段時間內不進行操作後,在來重新做轉賬,或者匯款操作,那麼這個站點可能會提示你:您的身份已過期,請重新登陸或者會話結束等訊息。
而CSRF攻擊則是建立會話之上的攻擊。比如當你登陸了網上銀行,正在進行轉賬業務,這時你的某個QQ好友(攻擊者)發來一條訊息(URL),這條訊息是攻擊者精心構造的轉賬業務程式碼。而且與你所登入的網站是同一個銀行,你可能認為這個網站是安全的,並不是什麼釣魚網站之類的,然後打開了這條URL,那麼你的賬戶的錢可能就在你的這一次小小點選上全部丟失。
http://www.taobao.com/pay.jsp?user=spisec&money=1000
而攻擊者僅僅是改變一下user引數與money引數即可完成一次“合法”的攻擊,如:
http://www.taobao.com/pay.jsp?user=hack&money=10000
當你訪問了這條URL之後,就會自動向hack這個賬戶裡面轉入10000元。而這是你親手造成的,並沒因為有人去破解你的密碼或者是Web伺服器被入侵所導致的你的金錢丟失。下面以CSRF攻擊原理圖給大家形象總結:
使用者C開啟瀏覽器,訪問受信任網站A,輸入使用者名稱和密碼請求登入網站A;
在使用者資訊透過驗證後,網站A產生Cookie資訊並返回給瀏覽器,此時使用者登入網站A成功,可以正常傳送請求到網站A;
使用者未退出網站A之前,在同一瀏覽器中,開啟一個TAB頁訪問網站B;
網站B接收到使用者請求後,返回一些攻擊性程式碼,併發出一個請求要求訪問第三方站點A;
瀏覽器在接收到這些攻擊性程式碼後,根據網站B的請求,在使用者不知情的情況下攜帶Cookie資訊,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據使用者C的Cookie資訊以C的許可權處理該請求,導致來自網站B的惡意程式碼被執行。
2、達成CSRF攻擊的條件攻擊建立在瀏覽器與Web伺服器的會話之中會話期間需要受害者進行訪問或者說是點選如果以上任意一個不滿足都不能達成跨站請求偽造攻擊。即目標必須處於會話狀態,且需要點選
說白了,CSRF攻擊也就是所謂的釣魚攻擊。
3、CSRF分類站內站外4、檢測方法手工檢測CSRF漏洞是一項比較繁瑣的工作,最簡單的方法就是抓取一個正常請求的資料包,去掉Referer欄位後再重新提交,如果該提交還有效,那麼基本上可以確定存在CSRF漏洞。
工具burp
CSRF Request Builder
CSRFTester
工具檢測的原理:
以CSRFTester工具為例,CSRF漏洞檢測工具的測試原理如下:使用CSRFTester進行測試時,首先需要抓取我們在瀏覽器中訪問過的所有連結以及所有的表單等資訊,然後透過在CSRFTester中修改相應的表單等資訊,重新提交,這相當於一次偽造客戶端請求。如果修改後的測試請求成功被網站伺服器接受,則說明存在CSRF漏洞,當然此款工具也可以被用來進行CSRF攻擊。
5、如何挖掘CSRF漏洞掃描器(注意並不是每個頁面爆沒有token漏洞都是對的,因為前端的進行CSRF有毛用,主要就是對後臺管理那一層的,所以不要盲目認為。),修改密碼的地方新增使用者的地方資料庫備份的地方資料交易、支付等其他一些對話方塊的釣魚頁面CSRF一般與XSS結合使用注意頁面是否帶token或者包中有沒得Referer,Referer在包中刪除是否依然可以訪問url目標等。光靠一個Referer來說也沒用,Referer也能偽造注意可能有預測的token,即有規律的token,如果是隨機的就放棄吧。
6、常用攻擊手段例項一般的攻擊思路:(首先,開源的web原始碼,攻擊者瞭解網站的框架,搭建環境構造攻擊url,例如資料備份的,下面實驗中有過程。
去目標網站建立普通使用者,發帖插入url等待目標管理會話線上狀態瀏覽帖子,中招,攻擊者訪問備份下來的資料庫,脫褲,完事。
)
1)、dz網站資料庫備份(快速脫庫)兩個ip:192.168.18.56:82攻擊者自己的ip、192.168.18.62:86管理員的ip
整體思路:
實驗步驟:攻擊者自己搭建環境,以管理員身份登入,建立普通賬戶,以管理員身份進行資料備份,抓包,修改包的post資料,構造url為自己要求的。(這裡url的IP地址為目標的IP地址)
攻擊者訪問構造的url,脫庫。
攻擊者環境配置url(建立賬號忽略,直接上關鍵步驟):
原本應該這是樣的:
當攻擊者重構備份的資料夾名稱和檔名的時候:
注意:這裡構造是抓到包的時候抓了改,再放包,不是重發器裡發一次。
找到攻擊url,構造成目標的地址:
http://192.168.18.62:86/dz/upload/uc_server/admin.php?m=db&a=operate&t=export&appid=0&backupdir=Jerome%26backupfilename%3Dtest
在目標網站上建立使用者、發帖。
發帖成功:
現在當管理員登入之後檢視帖子,會發現是正常的帖子:
這裡得說明一下這個路徑,在上面攻擊者搭建的環境中,一定會去模擬攻擊才知道最後的結果在哪個路徑下,上面省卻了這個步驟,這裡直接在目標機器上看結果。
2)、修改密碼修改密碼的前提是:利用CSRF漏洞
以dvwa的低階為例,直接抓包:
http://192.168.18.62:86/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change
說一下中級的:
中級的發現無法直接執行再改密碼,先看原始碼:
但透過觀察資料包發現,其沒有referer資訊,那麼對其進行了一個偽造Referer:
Referer:http://192.168.18.62:86/dvwa/vulnerabilities/csrf/
加入資料包中,發現密碼被修改了。
3)、新增賬號下面利用一個網站進行新增賬號操作:
首先,利用自建網站進行新增賬號操作,抓包將包生成為poc,建立test.html,廢掉此包。
攻擊者的效果成功達成。
4)、自解壓縮包配置方式如下:
一旦解壓就會開啟百度,自行嘗試吧。
7、防範方法驗證HTTP Referer欄位在請求地址中新增token並驗證在HTTP頭中自定義屬性並驗證在服務端嚴格區分好POST和GET的資料請求使用驗證碼或者密碼確認方式進行白名單