會話固定攻擊(session fixation attack)


什么是會話固定攻擊?

會話固定攻擊(session fixation attack)是利用應用系統在服務器的會話ID固定不變機制,借助他人用相同的會話ID獲取認證和授權,然后利用該會話ID劫持他人的會話以成功冒充他人,造成會話固定攻擊。

會話固定也是會話劫持的一種類型。會話劫持是攻擊者偷走受害者與服務器建立鏈接的會話,而會話固定是攻擊者事先建立一個會話,然后誘使受害者使用此會話進行登錄,如圖10-7所示。

看下面Session Fixation攻擊的一個簡單例子:

整個攻擊流程是:

1、攻擊者Attacker以一個合法的用戶身份登錄www.website.com。

2、服務器與攻擊者Attacker建立了一個會話,sessionid為1234567(這里只是一個示例,大家不要在乎sessionid的位數對不對)。應用網站服務器返回一個會話ID給他;

3、攻擊者Attacker用該會話ID構造了一個URL:http://www.website.com/login.jsp?sessionid=1234567,發給了受害者Alice

4- 受害者Victim點擊該鏈接,進行了登錄;

5、受害者Victim輸入她的合法用戶名和密碼,正常登錄了該網站,會話成功建立(注意,由於此時的sessionid預先已經被Bob設置為1234567了);

6、攻擊者Attacker用該會話ID成功冒充並劫持了受害者Victim的會話,這時攻擊者Attacker如果輸入http://www.website.com/viewprofile.jsp?sessionid=1234567,就可以看到受害者Victim的個人信息(profile)了,因此sessionid此時就是代表了Victim;

更多攻擊例子參考:https://owasp.org/www-community/attacks/Session_fixation

一般來說,會話固定可以通過下面幾種方式實現。

(1)在URL中注入Session ID,這是最簡單的一種方式,當然也最容易被檢測到。

(2)用隱藏的表單字節。攻擊者可以構造一個很像登錄方式的登錄表單並設定Session ID,然后誘惑用戶登錄。

(3)通過跨站腳本用客戶端腳本來設定Cookie,如攻擊者可以構造一個鏈接如下:http://www.buybook.com/viewprofile.jsp?p=30

(4)通過跨站腳本用標簽進行設定,如攻擊者可以構造一個鏈接如下:http://www. buybook.com/viewprofile.jsp?p=30。

會話ID(SID):由服務器產生並返回給瀏覽器的請求,並且在瀏覽器中存儲(通常來說是Cookie),它用來標識瀏覽器與服務器會話的唯一值。

攻擊分析

攻擊的整個過程,會話ID是沒變過的,所以導致此漏洞。

攻擊修復

1、登錄重建會話

每次登錄后都重置會話ID,並生成一個新的會話ID,這樣攻擊者就無法用自己的會話ID來劫持會話,核心代碼如下。

2、禁用客戶端訪問Cookie

此方法也避免了配合XSS攻擊來獲取Cookie中的會話信息以達成會話固定攻擊。在Http響應頭中啟用HttpOnly屬性,或者在tomcat容器中配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM