如何解決web系統session劫持

2021-07-03 08:14:55 字數 2312 閱讀 5855

session劫持是一種比較複雜的攻擊方法。大部分網際網路上的電腦多存在被攻擊的危險。這是一種劫持tcp協議的方法,所以幾乎所有的區域網,都存在被劫持

可能。兩台主機要想進行tcp通訊,必須經過乙個三次握手的過程。三次握手過程中服務端和客戶端一般會協商乙個序列號。這個序列號一般是乙個長整數。用來標記

每個資料報本來的順序。服務端或者客戶端使用這個序列號來重組在網路傳輸過程中亂序了的資料報。服務端和客戶端在三次握手過程中還會協商其他的內容

比如window

size用來通知對方自己可以快取多少個資料報,以防止某一方過快傳送資料報導致丟包。

下面簡述一下三次握手的過程:

假設a想要和b進行通訊。

a會先發給b乙個tcp資料報。這個資料報中的syn標誌被置位,因此又將這個資料報叫做syn資料報。在這個資料報中會包含a的window

size資訊,並且會包含乙個isn(initial sequence

number)號,就是初始序列號isna。好像最初的isn號碼固定從乙個數字開始,這樣更容易被人劫持,所以後來這個數字變為了乙個偽隨機數。這個值的取值範

是0到2^32-1。這個資料報中不帶負載資料。

b在收到syn資料報後會返回乙個syn+ack資料報,這個syn+ack資料報用來告訴a:

"我收到了你的syn資料報"。同時b會將a發過來的isna號,原封不動地插入這個ack資料報。並且將自己的isnb號碼放入這個ack資料報中返回給a。這個資料報

同樣不會帶任何的負載資料。

a收到b的ack資料報時,同樣會返回給b乙個ack資料報表示成功收到對方的資料報。同時a也會將b傳送來的isna資料+1,放入這個ack資料報返回給b。這個資料

包中可以攜帶負載資料,也可以不攜帶負載資料。(因為這時連線已經建立了)

通過上面的三次握手之後,乙個完整的tcp連線就建立好了。

之後的序列號都是主機收到的資料報中的序列號+收到包中的資料大小。第三次握手中,如果ack資料報中攜帶資料,那麼isna就不再是+1了。而是+資料大小。

session hiject

tcp協議在設計之初並沒有考慮太多安全的因素。session都是通過客戶端ip,客戶端port,服務端ip,服務端port來驗證的。

session劫持一般發生在a和b建立連線之後的通訊過程中。hacker一般會首先監聽網路上的通訊資料報。在某次通訊過程中,hacker在b傳送資訊給a之前,假冒

b發給a乙個資料報。這個資料報中使用b的ip和埠,並且將上次b收到的序列號+此資料報的資料大小作為序列號。在a收到這個資料報時,就會以為這個資料

是b發給他的。同時a會根據hacker發給他的資料報修改自己的序列號。如果真正的b嘗試傳送資料報給a時,a會因為序列號不正確拋棄這個資料報(這時因為b沒

有收到a的響應,所以會重發這個資料報,而這個資料報在傳送到a之後又被拋棄)從此hacker就可以代替b和a通訊了。

完成這個過程一般需要一下3個步驟:

1、監控,跟蹤某個session通訊過程。

2、破壞session同步通訊。

3、劫持這個session。

下面簡述一下實現以上三個步驟的過程。

1、通過簡單的sniff就可以監聽網路上的資料報。

2、要想破壞session同步,我們需要**資料報的序列號。如果我們有許可權訪問網路,那就可以sniff到網路通訊過程,並且從資料報中可以計算出下個序列號

。這就是本地session劫持。如果我們沒有許可權,不可以sniff到客戶端和服務端的通訊過程,那就比較麻煩了。**序列號是很不可能的,因為可選範圍太大

。(2^32中可能性)

在如法**序列號的時候,可以通過arp欺騙的方法對客戶端和服務端來個中間人攻擊。這樣就可以使兩者之間的通訊都在hacker的監控之下。

3、在上面兩個步驟完成之後,就只剩下重組資料報,並且傳送給通訊的某一端了。重組資料報有很多中方法和現成的工具。這裡就不說了。

有很多任務具可以用來做session劫持,有商業的,也有開源的。

這裡只提供一些大概的思路:

資料庫設計:

logininf表(登入狀態表)要有userid, sessionid, workstation(ip), agent(request), hashticket.

1, 在登入成功後,把登入時request的ip, agent,並把sessionid+ip+agent的hash記入logininf表 

2,在每次頁面訪問時,獲取request的ip,agent,利用sessionid+ip+agent hash的結果同logininf表裡的hashticket比較,如果相同則表明該session是合法的,不同則表示該session和登入時的 session要麼不在同一臺機器上,要麼瀏覽器等其他因素改變,極有可能是session篡改。

SqlServer中如何解決session阻塞問題

簡介 對於資料庫運維人員來說建立session或者查詢時產生問題是常規情況,下面介紹一種很有效且不借助第三方工具的方式來解決類似問題。最近開始接觸運維工作,所以自己總結一些方案便於不懂資料庫的同事解決一些不太緊要的資料庫問題。類似方法很多理論也很多,我就不做深究,就是簡單寫乙個方案,便於菜鳥使用的。...

如何解決WEB應用中文亂碼問題

最容易出現亂碼的場景是瀏覽器向伺服器傳送請求的過程,解決的策略就是強制為請求和響應設定編碼格式。1.在每個 controller 中單獨處理 request.setcharacterencoding utf 8 response.setcharacterencoding utf 8 2.在 web....

Web開發中如何解決中文亂碼問題

亂碼問題永遠是web初學者的乙個攔路虎,如果要避免亂碼問題。需要了解亂碼問題的成因。首先介紹幾種常見的編碼。utf 8 8 bit unicode transformation format utf 8 是一種針對unicode的可變長度字元編碼,也是一種字首碼。它可以用來表示unicode標準中的...