1.了解CSRF
"Cross-site request forgery": 簡稱為“CSRF”,在CSRF的攻擊場景中攻擊者會偽造一個請求(這個請求一般是一個鏈接),然后欺騙目標用戶進行點擊,用戶一旦點擊了這個請求,整個攻擊就完成了。所以CSRF攻擊也成為"one click"攻擊。
CSRF,江湖人亦稱:"跨站請求攻擊"。簡單的說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己以前認證過的站點並運行一些操作(如發郵件,發消息,甚至財產操作(如轉賬和購買商品)),因為瀏覽器之前認證過,所以被訪問的站點會絕點是這是真正的用戶操作而去運行。
在這里,就是利用了web中用戶身份驗證的一個漏洞,"攻擊者盜用了你的身份,以你的名義發送惡意請求",CSRF能夠做的事情包含:"以你的名義發送郵件;發消息;盜取你的賬號;甚至於購買商品、虛擬貨幣轉賬......造成的問題包含個人隱私泄露以及財產安全。"
總結起來一句話:程序員開發的時候,未對相關頁面進行token和REFERER判斷,造成攻擊者可構造自己的URL地址欺騙目標用戶進行點擊。
2.CSRF原理:
從上圖可以看出,要完成一次完整的CSRF攻擊,用戶(受害者)必須經歷兩個步驟:
登錄受信任站點銀行網站,並在本地生成Cookie。
在不登出銀行網站的情況下,訪問美女鏈接釣魚站點。
3.CSRF分類:
CSRF漏洞一般分為站外和站內兩種類型:
3.1站外
CSRF站外類型的漏洞本質上就是傳統意義上的外部提交數據問題。通常程序員會考慮給一些留言或者評論的表單加上水印以防止SPAM問題(這里,SPAM可以簡單的理解為垃圾留言、垃圾評論,或者是帶有站外鏈接的惡意回復),但是有時為了提高用戶的體驗性,可能沒有對一些操作做任何限制,所以攻擊者可以事先預測並設置請求的參數,在站外的Web頁面里編寫腳本偽造文件請求,或者和自動提交的表單一起使用來實現GET、POST請求,當用戶在會話狀態下點擊鏈接訪問站外Web頁面,客戶端就被強迫發起請求。
3.2站內
CSRF站內類型的漏洞在一定程度上是由於程序員濫用$_REQUEST類變量造成的。在一些敏感的操作中(如修改密碼、添加用戶等),本來要求用戶從表單提交發起POST請求傳遞參數給程序,但是由於使用了$_REQUEST等變量,程序除支持接收POST請求傳遞的參數外也支持接收GET請求傳遞的參數,這樣就會為攻擊者使用CSRF攻擊創造條件。一般攻擊者只要把預測的請求參數放在站內一個貼子或者留言的圖片鏈接里,受害者瀏覽了這樣的頁面就會被強迫發起這些請求。
4.CSRF漏洞檢測:
抓取一個正常請求的數據包,去掉Referer字段后再重新提交,如果該提交還有效,那么基本上可以確定存在CSRF漏洞。
以CSRFTester工具為例,CSRF漏洞檢測工具的測試原理如下:使用CSRFTester進行測試時,首先需要抓取我們在瀏覽器中訪問過的所有鏈接以及所有的表單等信息,然后通過在CSRFTester中修改相應的表單等信息,重新提交,這相當於一次偽造客戶端請求。如果修改后的測試請求成功被網站服務器接受,則說明存在CSRF漏洞,當然此款工具也可以被用來進行CSRF攻擊。
5.CSRF漏洞之快速托庫(Discuz)
5.1以管理員身份登錄discuz;
5.2看一下discuz網站的數據庫備份目錄;
5.3在管理員身份狀態下,備份數據庫
默認備份到網站當前目錄,我們在BurpSuite中抓包看它的請求頭部信息
現在我們把備份好的數據庫文件刪除,來模擬一個用戶正常發帖,在discuz中創建一個test普通用戶,登錄后訪問發帖頁面
從這個步驟開始,便是發帖釣魚攻擊的開始,比如,我們模擬的用戶向網站管理員發一份投訴的信箱,而管理員對這一類的信息比較關心,當管理員點擊模擬用戶構造的釣魚帖子之后,模擬用戶便完成了釣魚攻擊,實現數據庫托取。
在上面的步驟當中,我們看到網站默認講數據庫備份到:C:\phpStudy\PHPTutorial\WWW\discuz\data目錄下,我們要讓網站將數據庫備份在:C:\phpStudy\PHPTutorial\WWW\discuz\uc_server\data\backup目錄下
我們構造自己的備份地址:
將此地址填入網絡圖片路徑,上傳到地方服務器中
下一步登錄管理員賬號,並且點擊模擬用戶發送的釣魚帖子,
管理員用戶界面,已經收到模擬用戶發的帖,點擊了之后
到了帖子的正文,這個時候,釣魚地址已經悄悄的將網站數據庫托到了指定的位置,在前面,我們設置的數據庫備份文件夾名為myself,數據庫名為aaaa
以上是數據庫文件夾和備份路徑
以上是數據庫名aaaa,經過以上幾個步驟,成功托庫,這也是CSRF漏洞典型的利用方法之一,
以上釣魚實現的前提是admin用戶必須與服務器是連接狀態,與管理中心要保持連接。另外一個需要注意的是,如果這里釣魚不成功,還有一個地方也需要做一下修改,因為我們是將數據庫備份路徑換為我們自己的路徑,當IP更改之后,需要在UCenter訪問的IP緩存中進行更新。
6.BurpSuite更改數據包
除了以上釣魚攻擊之外,我們依然能夠利用BurpSuite的數據抓包,更改它的備份文件夾名稱,包括以上構造的釣魚地址,都是在BurpSuite請求頭抓包之后進行更改構造
6.1設置好代理后,訪問UCenter模塊,
6.2同樣的,我們選擇數據庫備份,BP抓包修改請求頭
6.3修改backdir=yourself
下圖可以看到已經將yourself的數據庫備份到默認目錄下
以上就是CSRF漏洞的一個典型應用,
7.MySQL備份數據庫特點(題外)
可以觀察到,MySQL數據庫備份的時候,數據庫名后面緊隨序號,
這是MySQL備份的一個規律和特性,主要是為了解決當數據庫文件相當大的時候,進行分段壓縮或者分段備份,以減輕服務器處理壓力和避免有些壓縮解壓軟件因壓縮文件太大,無法執行解壓的情況,再者避免了因解壓軟件解壓大文件時產生額外的解壓費用。