CSRF 攻擊場景分析與重現學習

【技術分享】CSRF 攻擊場景分析與重現學習

2017-07-06 10:29:17 閱讀:154次 收藏(0) 來源: 安全客


學習概要


通過本篇文檔我們可以更為接近實戰的去學習和了解什麼是CSRF漏洞、CSRF漏洞是到底如何產生的、在實際場景中被利用是如利用,以及一些在web安全測試用常用插件與工具的使用和技巧。本篇文稿中給出了兩個場景的CSRF漏洞的利用過程復現:

(1)密碼修改過程中產生的CSRF漏洞和利用

(2)後台管理添加過程中產生的CSRF漏洞和利用

文稿最近簡單的羅列了下當前常用的避免csrf漏洞產生的方法和措施。

1、CSRF 基本概念


CSRF(Cross-site requestforgery)跨站請求偽造,黑客利用已經登錄的用戶,誘使其訪問或者登錄某個早已構造好的惡意鏈接或者頁面,然後在用戶毫不知情的情況下,以用戶的名義完成了非用戶本意的非法操作。這種攻擊我們也被稱為"OneClick Attack"或者SessionRiding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用行為。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。

2、CSRF 學習理解


其實一個CSRF漏洞攻擊的實現,其需要由「三個部分」來構成。

(1) 有一個無需後台驗證的前台或後台數據修改或新增請求的漏洞存在;

(2) 偽裝數據操作請求的惡意鏈接或者頁面;

(3) 誘使用戶主動訪問或登錄惡意鏈接,觸發非法操作;

2.1 第一部分:漏洞的存在

關鍵字:跨站請求漏洞存(CSR:Cross Site Request)

如果需要CSRF攻擊能夠成功,首先就需要目標站點或系統存在一個可以進行數據修改或者新增操作,且此操作被提交後台后的過程中,其未提供任何身份識別或校驗的參數。後台只要收到請求,就立即下發數據修改或新增的操作;

以上漏洞情況的存在,出現比較多的場景有用戶密碼的修改、購物地址的修改或後台管理賬戶的新增等等操作過程中。

2.2 第二部分:漏洞利用的偽裝

關鍵字:偽裝請求(F:forgery)

CSRF漏洞存在了,如果需要真正的被利用,還需要對「修改或新增」數據操作請求的偽裝,此時惡意攻擊者只要將偽裝好的「數據修改或新增」的請求發送給被攻擊者,或者通過社工的方式誘使被攻擊者在其cookie還生效的情況下點擊了此請求鏈接,即可觸發csrf漏洞,成功修改或新增當前用戶的數據信息,如修改當前用戶的密碼、又或者是當前用戶為後台管理員,觸發漏洞后新增了一個後台管理員。

2.3 第三部分:用戶非本意的操作

關鍵字:非本意操作

當前用戶在不知情的情況下,訪問了黑客惡意構造的頁面或在鏈接,即在非本意的情況下完成黑客想完成的「非法操作」,實現了對當前用戶個人信息的惡意操作。

2.4 CSRF 漏洞理解小結

小結:構造一個惡意鏈接或者html頁面

說一千道一萬,我們要明白「CSRF漏洞的目的」是什麼,其實就是利用已存在的漏洞構造了一個「惡意鏈接」或「html頁面」,然後誘使用戶點擊觸發此漏洞。

那麼說的再明白點,就是被檢測的目標站點存在一個漏洞(CSRF),攻擊者利用此類漏洞偽裝了一個鏈接或者html頁面,誘使被攻擊者在登錄的情況下(即當前cookie有效的情況下)點擊了此偽裝請求,隨後在用戶不知情的情況下完成了對當前用戶數據的修改或者新增操作,而被修改的信息可能是用戶的密碼、關鍵信息又或者新增後台管理員等。

3、CSRF 場景重現


以上說了這麼多,都是在說基本概念的理解,接下來我會帶著大家一起在實際中看看CSRF漏洞比較容易出現的地方,我們是如何一步一步發現這個漏洞和怎麼利用它的,請大家屏住呼吸跟我來吧...

注:本篇文檔主要給大家帶來兩個場景利用分析與學習。

3.1 密碼修改之 CSRF 漏洞場景重現

有關於CSRF漏洞特別容易出現的地方就是有關用戶信息數據修改的地方了,其中在一些商城網站平台出現最多的有用戶密碼的修改、郵寄地址的修改和賬戶轉賬等處,這裡我們以用戶密碼修改為例,帶著大家一起看看CSRF漏洞的產生過程以及怎麼構造惡意鏈接和html頁面。

為了大家自己動手練習,這以DVWA演練平台為演示環境,來跟大家一起學習下CSRF之用戶密碼修改漏洞的始末。

3.1.1 DVWA 漏洞環境搭建

有關於DVWA漏洞平台的搭建,這裡不做過多的說明,具體內容大家可以參加網上的文章,參考搭建,這裡給出相關參考鏈接。

參考鏈接:http://www.freebuf.com/sectool/102661.html

DVWA環境準備好后,我們即可直接輸入用戶名密碼登錄平台進行演練。(默認賬號密碼:admin/passowrd)

3.1.2 CSRF 漏洞之密碼修改過程

我這裡使用DVWA 的low級別中的CSRF漏洞之密碼修改,帶著大家一起看看漏洞到底是什麼樣子的,首先先我們先看看存在CSRF漏洞環境下,密碼的修改過程是怎樣的。

(1) 進入密碼修改界面

我們直接登錄DVWA平台後,設置當前演練等級security=low級別,點擊CSRF來到修改密碼的操作界面;

(2) 修改當前用戶admin密碼

來到用戶名密碼修改界面后,我們發現當前修改頁面操作很簡單,直接輸入新密碼,做兩次確認輸入提交即可,無任何其他限制和要求;

(3) 密碼修改後登陸確認

我在修改完用戶名密碼后,直接登出平台,做一次重新登陸,驗證下用戶密碼是否修改成功。(這裡我把表單passowrd欄位的類型「password」去掉后,可以直接看到當前用戶名密碼的明文為123,點擊提交后成功登陸,說明密碼修改成功。)

3.1.3 CSRF 漏洞之發現分析

接下來我們通過專業的抓包工具,分析下密碼修改過程中,數據的請求與提交過程,我們具體做了哪些動作。

3.1.3.1 burpsuite 抓包分析

(1)工具準備

•firefox 瀏覽器

•代理插件foxyproxy

•burpsuite 工具箱

firefox火狐瀏覽器沒什麼可說,burpsuite抓包工具,同樣大家肯定都是耳熟能詳的,如果有不太了解的,建議大家還是找些資料去學習下,此工具應該是搞web安全人員的隨身必備工具。

(2) foxyproxy 代理插件配置

這裡只簡單的說下有關foxyproxy插件配置,我們直接去firefox插件擴展中進行搜索,下載安裝即可,配置也比較簡單。只要右擊菜單欄中foxyproxy圖標,選擇「選項」- 選擇工作模式「為全部URLs啟用代理伺服器」 - 選中「默認代理」 - 點擊「編輯選中項目」 -添加代理的「IP地址」與「埠」即可。

以後每次使用代理時,只需要簡單選擇下配置選項即可,簡單好用,推薦使用。

(3) burpsuite 抓包詳解

OK,廢話不多說,工具準備好了,咱們進入正題吧。

首先我們開啟代理配置,打開burpsuite抓包工具,開啟攔截模式,正式進行抓包模式。

通過burpsuite的抓包分析,我們可以發現整個修改密碼的過程中,請求數據包中只攜帶了兩個關鍵性的參數:

密碼修改的3對 key:value值:password_new、password_conf、Change

當前用戶的cookie值:PHPSESSID、Security

除此以外,整個密碼修改的請求數據包中再也沒有任何其他可以證明或者校驗客戶端請求的內容了,也就是因為沒有任何其他的校驗的存在,為黑客後續「跨站請求偽造」提供了可乘之機,也是漏洞產生的主要原因。

3.1.3.2 tamper data 抓包分析

當然除了是使用burpsuite抓包工具以為,我也可以使用其他的工具進行web請求內容的抓包與分析,這裡簡單在給大家分享一個使用tamper data插件抓包改包的分析工具。

(1) 工具準備

firefox 瀏覽器

tamper data 擴展插件

(2) tamper data 改包插件安裝

tamper data 抓包改包工具,也是firefox瀏覽器擴展插件之一,故我們只要去擴展插件中搜索下載安裝即可。

(3) tamper data 抓包分析

3.1.4 CSRF 漏洞利用

3.1.4.1 惡意鏈接偽造

對於挖掘目標站點存在密碼修改的csrf漏洞后,我們如何利用它就是關鍵了,最簡單的方法就是使用burpsuite抓包后,提取密碼修改操作的GET請求的URL,然後通過相應的處理后,結合社工的方法誘騙他人點擊鏈接,修改他人的賬號密碼信息,有關具體操作參見如下。

(1) 截斷請求包,提取URL請求

URL提取值:http://www.dvwa.com/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change

(2)URL 鏈接偽裝

在提起到存在csrf漏洞的URL請求后,我們可以直接把此URL進行縮短處理,進行簡單的偽裝處理后,結合社工的方法誘使被攻擊對象點擊觸發漏洞利用。

3.1.4.2 惡意html表單偽造

偽造一個html頁面相對上面簡單的偽裝一個鏈接來說,相對就更顯高高級了,使用起來也更專業了,相對成功率也更高。這裡收簡單的描述下偽造html也的過程,後面會貼出每一步的具體操作。

•第一步:提取密碼修改的URL請求;

•第二步:依照URL請求的格式,偽造一個form表達;

•第三步:誘使被攻擊者點擊惡意的html連接;

(1) 提取密碼修改的URL請求

我們可以藉助抓包工具burpsuite抓取密碼修改操作的數據包,分析數據包的請求內容。

(2) 偽造form 表單

在分析修改密碼數據請求內容后,我們可以手動構造一個簡單的html表單頁面,為csrf攻擊做好準備;

(3) 誘使被攻擊者點擊惡意html鏈接

我們將構造好的html表單頁面放到一個網上,然後通過社工的方式發送給被攻擊者,誘使他訪問此惡意頁面出發「賬號密碼修改操作」。

3.1.5 CSRF 密碼修改漏洞小結

CSRF密碼修改漏洞小結:通過上面的分析與學習的展開,我們可以發現這種場景漏洞的存在,其實比較好發現。其他特點就是「用戶密碼的修改無任何的條件限制與校驗機制」。

3.2 後台管理員新增之 CSRF 漏洞重現

我們在做滲透測試時,也會經常進行一些CMS系統的「黑盒測試」,就是自己搭建目標系統的CMS系統,然後本地進行前台和後台的所有功能安全測試,挖掘可能存在的漏洞。其中我們對於「後台賬號的添加系統管理員」一項操作,進行csrf漏洞的挖掘就很有必要,如果我能夠挖掘出此漏洞,我們就可以構造惡意的html表單頁面對真是的目標「CMS系統」進行攻擊,為我們在真實的目標系統上添加一個後台管理員,拿下其後台管理許可權,為進一步的滲透打開大門。接下來的漏洞復現,就以一個小眾的CMS系統進CSRF添加後台管理賬號漏洞的復現。

3.2.1 環境準備

phpstudy web容器環境準備

burpsuite 抓包工具

lvyecms 系統下載

3.2.2 phpstudy web容器環境

有關於phpstudy web容器環境的搭建,這裡不做過多的說明,因為真的很簡單,大家直接下載默認安裝即可使用。

下載地址:

3.2.3 burpsuite 抓包工具

burpsuite 抓包工具與代理插件的使用,可參加上面的3.1章節的內容,這裡也不在重複說明了。但是多說一句burpsuite工具箱真的很強大,強烈建議大家擁有,後面還還給大家演示怎樣使用burpsuite進行一鍵構造一個csrf的POC表單,我也是剛剛學會的,後面演示復現時會分享給大家。

3.2.4 lvyecms 環境搭建

3.2.4.1 解壓源碼包

在phpstudyweb容器環境準備好后,我們直接將lvyecms源碼包解壓重新命名(lvyecms),然後將解壓包複製到phpstudy主目錄下的WWW文件夾下即可。

3.2.4.2 站點域名設置

為了後續的對測試環境的訪問,我簡單的設置下「站點域名設置」,具體設置如下。

選擇「其他選項菜單」 - 「站點域名管理」 - 添加「網站域名」 www.lvye.com - 設置「網站目錄」E\phpstudy\www\lvyecms,然後點擊新增,最後保存設置重啟服務。

3.2.4.3 配置hosts主機解析文件

我直接進入目錄「C:\Windows\System32\drivers\etc」找到hosts文件,在文件中添加一條解析記錄

127.0.0.1 www.lvye.com ,然後保存即可。(注意以管理員許可權打開文件才能修改成功)

3.2.5 後台管理添加過程測試

(1) 進入添加後台管理員界面

(2) 添加後台管理員test

(3) 確認管理員添加情況

3.2.6 CSRF 漏洞發現分析

通過以上三步簡單的操作,我們即可完成一個後台管理員賬號的授權添加,並沒發現什麼異常,接下來我們將使用burpsuite進行抓包分析下正添加管理賬號的請求過程中是否存在未對用戶做除cookie以外的有效身份驗證操作。

(1) 配置好firefox 代理設置安全漏洞。

(1) 配置好firefox 代理設置

有關firefox瀏覽器中foxyproxy代理設置插件的使用,請參加3.1章節內容。

(2) 開啟burpsuite 數據包代理截斷

(3) 請求包抓包分析

通過抓包分析可以看到,在我們進行後台超級管理員添加的過程發送出去的請求只包兩類關鍵信息:

包含了當前用戶的cookie值

添加管理員相關信息參數;

除去以上兩個信息再無其他任何對當前用戶身份進行有效校驗的信息。因此,推斷此處添加管理員的操作可能存在csrf漏洞。

(4) 直接構造get類型的csrf惡意鏈接

構造方法比較簡單,我們直接在burpsuite 截斷數據出右擊滑鼠,選擇「」,隨後右擊滑鼠「copyurl」即可獲取一個完整的get類型的「添加管理操作」的URL請求;

通過驗證,發現構造的get類型csrf惡意鏈接並不能添加管理員,由此可以推斷index.php腳本中可能對於數據請求的類型做了限制,只接受post類型的數據提交。

(5) 構造post類型的html頁面

這裡分析給大家一個我也是剛剛學習到一個使用burpsuite直接構造csrf表單poc的方法。我們直接右擊數據包截斷頁面,選擇「Engagementtools」-「Generate CSRF PoC」,即可獲取一個csrf的表單poc。

(6) 構造csrf html表單驗證

隨後我們將獲取的表單內容複製到一個csrf.html文檔中保存,並將此csrf.html發布到站點中(這裡我就直接將poc房子lvye.com站點主目錄中),隨後就是想辦法通過社工的方式誘使管理員訪問此惡意頁面,觸發管理添加的操作。(當然我們這裡只是簡單的給大家演示了利用過程,實際的社工內容是怎樣的,大家各自打開腦洞吧...)具體漏洞利用過程,基本演示如下。

4、CSRF 漏洞防護


其實現在有關CSRF漏洞防護已經是比較成熟了,其主要防護的思路就是需要在進行後台數據修改操作的過程中,添加對當前用戶身份的有效驗證措施,而不能僅限於cookie的識別,這裡簡單的羅列了下防護措施如下。

(1) 來源校驗

使用http請求頭中referer來源,對客戶端源進行身份校驗,此方法早期使用比較多,但是仍然容易被繞過,所以這裡並不建議使用。

(2) 用戶token 校驗

添加基於當前用戶身份的有效tokens隨機驗證機制,即在向後端提交數據操作請求時,添加基於當前用戶的隨機token校驗值,此種校驗方法當前使用比較多;

(3)當前用戶密碼驗證

在修改關鍵信息時,要錢當前用戶輸入其自身的密碼,以驗證當前用戶身份的真偽,防止未授權的惡意操作;

(4)添加驗證機制

在請求數據的提交前,需填寫驗證碼信息提交,以增加對用戶來源的有效驗證,防止惡意未授權的操作產生。

你可能會喜歡