从CSRF原理到CMS漏洞利用
文章目錄
- 0x01 基礎知識:
- 1、CSRF漏洞簡介:
- 2、與XSS的區(qū)別:
- 3、攻擊的細節(jié):
- 4、常見的攻擊類型:
- 4.1、GET類型的CSRF:
- 4.2、POST類型的CSRF:
- 0x02 CSRF漏洞檢測:
- 1、手動測試:
- 2、使用CSRF檢測工具:
- 2.1、CSRFTester:
- 2.2、BurpSuite:
- 0x03 CSRF漏洞利用實例:
- 1、MetInfo CMS:
- 2、騎士CMS:
- 0x04 如何防御CSRF攻擊:
- 1、驗證HTTP Referer字段:
- 2、添加Token,并驗證:
- 3、關鍵請求添加驗證碼:
- 最后:
0x01 基礎知識:
1、CSRF漏洞簡介:
CSRF全稱:Cross-site request forgery,即,跨站請求偽造,也被稱為 “One Click Attack” 或 “Session Riding”,通常縮寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。舉個生活中的例子:就是某個人點了個奇怪的鏈接,自己什么也沒輸,但自己的qq號或其他的號就被盜了。即該攻擊可以在受害者不知情的情況下以受害者名義偽造請求,執(zhí)行惡意操作,具有很大的危害性。
2、與XSS的區(qū)別:
CSRF聽起來很像跨站腳本攻擊(XSS),但它與XSS有很大區(qū)別,XSS 利用的是用戶對指定網(wǎng)站的信任,CSRF 利用的是網(wǎng)站對用戶網(wǎng)頁瀏覽器的信任。兩者的攻擊流程如下圖:
3、攻擊的細節(jié):
跨站請求攻擊,簡單地說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個用戶曾經(jīng)認證過的網(wǎng)站并執(zhí)行一些操作(如發(fā)郵件,發(fā)消息,甚至財產(chǎn)轉(zhuǎn)賬和購買商品)。由于瀏覽器曾經(jīng)認證過,所以被訪問的網(wǎng)站會認為是真正的用戶操作而去運行。這利用了Web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發(fā)自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發(fā)出的。
CSRF攻擊流程如下:
舉個例子:
場景需求:壞人小黑想要修改小明在購物網(wǎng)站www.xx.com上填寫的會員地址。
小黑想要修改小明的信息,他需要擁有:1、登錄權限 2、修改個人信息的請求。
但是小明又不會把自己的賬號密碼告訴小黑,那小黑怎么辦?于是小黑自己跑到www.xx.com上注冊了一個賬號,然后修改了一下自己的個人信息(比如email地址),他發(fā)現(xiàn)修改的請求是:http://www.xxx.com/edit.php?email=xiaohei@qq.com&Change=Change
然后,他進行了這樣一個操作:把這個鏈接偽裝一下,在小明登錄xxx網(wǎng)站后,欺騙他進行點擊,小明點擊這個鏈接后,個人信息就被修改了,小黑就完成了攻擊目的。
這種惡意的網(wǎng)址可以有很多種形式,藏身于網(wǎng)頁中的許多地方。此外,攻擊者也不需要控制放置惡意網(wǎng)址的網(wǎng)站。例如他可以將這種地址藏在論壇,博客等任何用戶生成內(nèi)容的網(wǎng)站中。這意味著如果服務端沒有合適的防御措施的話,用戶即使訪問熟悉的可信網(wǎng)站也有受攻擊的危險。
通過例子能夠看出,攻擊者并不能通過CSRF攻擊來直接獲取用戶的賬戶控制權,也不能直接竊取用戶的任何信息。他們能做到的,是欺騙用戶的瀏覽器,讓其以用戶的名義運行操作。
CSRF的攻擊過程需要滿足以下兩個條件:
目標用戶已經(jīng)登錄了網(wǎng)站,能夠執(zhí)行網(wǎng)站的功能。
目標用戶訪問了攻擊者構造的URL。
4、常見的攻擊類型:
CSRF原理很簡單,一般來說,常見的攻擊類型有以下2 種:
-
GET型
-
POST型
下面就以pikachu靶場為例,演示下這幾種類型的攻擊流程。靶場下載
4.1、GET類型的CSRF:
GET類型的CSRF利用很簡單,只需要構造一個HTTP請求就可以完成。
示例:
某網(wǎng)站的個人信息頁面如下:
修改個人信息并抓包:
從提交的請求可以看到,系統(tǒng)并沒有對用戶設置 Token,而且是通過GET請求來提交修改信息。那么我們拿到這個URL之后,就可以改成自己想要修改的數(shù)據(jù),如把受害者的郵箱修改為自己的郵箱:
然后通過各種手段讓已經(jīng)登錄的用戶訪問這個鏈接,攻擊就完成了。
當受害者點擊鏈接后,可以看到受害者的郵箱地址已經(jīng)變成我們自己設置的了,如圖:
當然,直接訪問上面這個鏈接太可疑了,因此可以利用短鏈接生成器進行偽裝,例:
訪問生成的短鏈接同樣執(zhí)行成功。
常用短鏈接網(wǎng)站:
http://tool.chinaz.com/tools/dwz.aspx
https://www.985.so/
4.2、POST類型的CSRF:
還是和上面一樣,修改個人信息,抓包:
可以看到是POST類型,參數(shù)是在請求體中提交的,我們就不能通過偽造URL的方式進行攻擊了。
這種類型的 CSRF 利用起來通常使用的是一個自動提交的表單;攻擊者可以在自己的公網(wǎng)服務器上搭建一個站點,在站點上做一個表單,誘導受害者點擊這個鏈接,當用戶點擊時,就會自動向存在CSRF的服務器提交POST請求修改個人信息。
編寫一個html 頁面,代碼如下,然后把此頁面放到攻擊者自己的Web服務器上(這里為了演示方便,放在虛擬機上了)
post.html:
<html> <head> <script> window.onload = function() {document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php"><input id="sex" type="text" name="sex" value="boy" /><input id="phonenum" type="text" name="phonenum" value="1367676776" /><input id="add" type="text" name="add" value="nab 76" /><input id="email" type="text" name="email" value="hacker@pikachu.com" /><input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html>目標服務器:127.0.0.1
攻擊者服務器:192.168.50.130
把上面的構建好的頁面放在kali上的var/www/html目錄下(別忘開啟apache服務),訪問鏈接為:
http://192.168.50.130/post.html然后把該URL發(fā)送給受害者,只要受害者一點擊這個鏈接,就會自動發(fā)送POST請求,修改其郵箱地址。
點擊鏈接是這個頁面,然后會自動提交數(shù)據(jù)。
修改成功。( ̄︶ ̄)↗
0x02 CSRF漏洞檢測:
1、手動測試:
常用的辦法是:尋找站內(nèi)增刪改的地方,抓取一個正常請求的數(shù)據(jù)包,修改鏈接或表單的參數(shù),再用驗證過的瀏覽器打開鏈接或提交表單,如果操作可以成功執(zhí)行就代表存在CSRF漏洞。
手動測試CSRF漏洞比較麻煩,因此可以選擇使用工具來進行高效的檢測。下面簡單介紹下幾個常用的CSRF檢測工具。
2、使用CSRF檢測工具:
常用的CSRF檢測工具有CSRFTester、Burpsuite、CSRF Request Builder等,這里介紹下前兩個工具的使用方法。
2.1、CSRFTester:
CSRFTester測試流程:使用代理抓取我們在瀏覽器中訪問過的所有的連接以及表單等信息,然后在CSRFTester中修改相應的表單參數(shù)等信息,重新提交,相當于一次偽造客戶端請求,如果修改后的測試請求成功被目標服務器接受,則說明存在CSRF漏洞。同理 CSRFTester也可作為攻擊工具。最新下載鏈接
使用注意事項:
-
需要java環(huán)境,并更改 run.bat中的 jre路徑為你自己的:
-
設置HTTP代理,端口為8008。
雙擊 run.bat文件啟動,頁面如下:
像這樣就是正常啟動了。
點擊Start Recording,開啟CSRFTester檢測工作,執(zhí)行添加管理員操作,抓取到數(shù)據(jù)包:
修改管理員用戶名(也可以在下面生成的表單中修改),點擊 Generate HTML 會生成一個 HTML 測試腳本:
使用同一瀏覽器打開此文件
可以看到,成功添加了賬號,說明網(wǎng)站存在CSRF漏洞。
2.2、BurpSuite:
Burpsuite中 Engagement tools 的 Generate CSRF PoC 模塊也可以作為CSRF的測試工具。
還是同樣執(zhí)行添加管理員操作,抓包,然后右鍵選擇 Engagement tools 找到Generate CSRF PoC。
修改參數(shù),生成測試表單
右下角的 Test in browser 是在本地測試用的(Copy HTML 可以復制下來HTML,保存到攻擊者服務器,用來攻擊),點擊會生成一個測試鏈接,內(nèi)容就是生成的測試頁面,打開鏈接(這里瀏覽器必須開著bp的代理):
點擊提交按鈕并在bp中放包。
可以看到成功執(zhí)行了測試,證明存在著CSRF漏洞。
0x03 CSRF漏洞利用實例:
說了這么多,不實際操作下還是紙上談兵;下面就以這兩個本地CMS為例,復現(xiàn)一下CSRF漏洞的實際利用過程。
1、MetInfo CMS:
cms版本:MetInfo5.3.1
環(huán)境:phpStudy集成環(huán)境
cms下載:https://pan.baidu.com/s/1ZgKx3BE3hmJkflJxundYSA 提取碼:pek6
解壓到www目錄下,訪問目錄開始安裝
按照提示一步一步完成配置,進入網(wǎng)站
訪問 /網(wǎng)站首頁/admin 進入后臺管理頁面,并登錄,找到添加管理員模塊,添加一個管理員。
瀏覽器開啟代理后,使用我們的 CSRFTester工具抓取數(shù)據(jù)包
找到對應的請求,修改參數(shù)。這里用戶名改為hacker,然后點擊Generate HTML 保存表單。
刪除多余的請求表單后,放到攻擊者的服務器上,訪問鏈接為(這里放本地了):http://127.0.0.1/Me/index.html
然后誘導網(wǎng)站管理員訪問鏈接
成功添加。
使用添加的用戶登錄,賬號:hacker 密碼:admin
登陸成功,攻擊完成
2、騎士CMS:
cms版本:74cms_v4.1.24
環(huán)境:phpStudy集成環(huán)境
cms下載:https://pan.baidu.com/s/1U-I28J2DDTZkY1esQr9H4A 提取碼:75sx
解壓后訪問 upload目錄開始安裝:
按照提示一步一步完成配置,進入網(wǎng)站
進入后臺管理頁面,找到添加管理員頁面
使用bp抓包,使用 Generate CSRF PoC 構造攻擊頁面
點擊 Copy HTML 保存到本地,為誘惑管理員點擊,可以添加一些具有誘惑性的東西,舉個例子:(忽略這個很丑的頁面→_→)
然后放到攻擊者的服務器上(這里就放到本地了),訪問鏈接為:http://127.0.0.1/74/lol.html
然后誘導管理員點開鏈接并提交,成功執(zhí)行。
使用剛才創(chuàng)建的賬號密碼進行登錄測試,賬號 hacker 密碼 admin
登錄成功,攻擊完成。
0x04 如何防御CSRF攻擊:
CSRF通常從第三方網(wǎng)站發(fā)起,被攻擊的網(wǎng)站無法防止攻擊發(fā)生,只能通過增強網(wǎng)站對CSRF的防護能力來提升安全性。
在服務器端防御CSRF攻擊主要有三種策略:
1、驗證HTTP Referer字段:
Referer字段存在于 HTTP請求頭中,它記錄了該 HTTP請求的來源地址。正常情況下請求的 Referer 值是 請求發(fā)出所在頁面的URL,當檢測到 Referer 是其他網(wǎng)站的話,則有可能是黑客的 CSRF 攻擊,拒絕該請求。
例如黑客要對銀行網(wǎng)站實施 CSRF 攻擊,他只能在他自己的服務器構造請求,當用戶點擊黑客的鏈接發(fā)送請求到銀行時,該請求的 Referer 是指向黑客自己的網(wǎng)站,就會拒絕該請求。
2、添加Token,并驗證:
Token介紹:
- token是服務端生成的一串隨機數(shù),作為客戶端進行請求的一個令牌,當?shù)谝淮蔚卿浐?#xff0c;服務器生成一個Token并返回給客戶端。
Token驗證:
- 在 HTTP請求中以參數(shù)的形式添加一個隨機產(chǎn)生的 token,并在服務器端建立一個攔截器來驗證這個 token,假設請求中沒有token 或者 token 內(nèi)容不對,則可能是 CSRF 攻擊而拒絕該請求。
3、關鍵請求添加驗證碼:
當進行一些敏感操作時,如修改密碼、添加管理員等操作,可以通過增加網(wǎng)站的驗證手段,例如增加圖形驗證碼或短信驗證碼等,只有通過驗證的請求才算合法。
最后:
🆗,本次的CSRF學習就到這了,本次學習 收獲頗豐,繼續(xù)加油!最后提醒大家,一定不要隨便點別人發(fā)的鏈接!
參考文章:
https://cloud.tencent.com/developer/article/1586164
https://www.jianshu.com/p/4152a4947cdc
https://blog.csdn.net/kzadmxz/article/details/92076837
https://www.cnblogs.com/54chensongxia/p/11693666.html
https://www.secpulse.com/archives/78792.html
https://shu1l.github.io/2020/04/03/csrf-lou-dong-xue-xi/
https://shu1l.github.io/2020/04/03/csrf-lou-dong-xue-xi/
總結
以上是生活随笔為你收集整理的从CSRF原理到CMS漏洞利用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 渗透测试之信息收集篇
- 下一篇: 分离图片中的隐藏文件方法总结