WEB項目SESSIONID固定漏洞

問題場景


訪問一個WEB頁面,會看到有一個JSESSIONID,這是由服務器端在會話開始是通過set-cookie來設置的匿名SessionId


在登錄進入後,再次查看SESSIONID,會發現此值未發生改變,這樣,就產生了SESSIONID固定漏洞


攻擊步驟


第一步,需要獲取被攻擊用戶的JSESSIONID,可以通過給被攻擊用戶一個僞造的JSESSIONID,使其用該JESSIONID登錄,獲取用戶登錄後的JESSIONID。(這裏作爲示範,直接從瀏覽器中獲取)
第二步,等被攻擊用戶登錄,是JESSIONID成爲已登錄狀態。
第三步,僞造請求,訪問登錄後的資源。
在用戶登錄使該JSESSIONID稱爲已登錄的ID後,攻擊者就可以利用這個ID僞造請求訪問登錄後的資源。


漏洞分析處理

出現該問題的主要原因是登錄控制使用的固定的SessionID,登錄前與登錄後的SessionID是一樣的。這樣就使得攻擊者可以簡單的僞造一個SessionID誘使用戶使用該SessionID登錄,即可獲取登錄權限。如果配合XSS漏洞,則更加可以輕易獲取登錄權限。避免這一漏洞的方法主要有兩種:
1.在登錄後重置sessionID
在登錄驗證成功後,通過重置session,是之前的匿名sessionId失效,這樣可以避免使用僞造的sessionId進行攻擊。

request.getSession().invalidate();
這樣登錄前與登錄後的sessionID就不會相同

2.設置httpOnly屬性
httponly是微軟對cookie做的擴展,該值指定 Cookie 是否可通過客戶端腳本訪問, 解決用戶的cookie可能被盜用的問題,減少跨站腳本攻擊
主流的大多數瀏覽器已經支持此屬性。httpOnly是cookie的擴展屬性,並不包含在servlet2.x的規範裏,因此一些javaee應用服務器並不支持httpOnly,針對tomcat,>6.0.19或者>5.5.28的版本才支持httpOnly屬性,具體方法是在conf/context.xml添加httpOnly屬性設置

<Context useHttpOnly="true">
...
</Context>

另一種設置httpOnly的方式是使用Tomcat的servlet擴展直接寫header

response.setHeader( "Set-Cookie", "name=value; HttpOnly");

以上兩種方法就可以避免SESSIONID固定漏洞被利用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章