HTTP認證的底層技術簡析與揭秘

2021-12-29 21:18:05 字數 4035 閱讀 3886

http認證的底層技術簡析與揭秘。http認證實現的基礎是web伺服器與瀏覽器之間能夠安全地交換類似使用者名稱和密碼這樣的使用者憑證,我們也可以把http認證當作是摘要驗證(digest authentication),這種預定義方法/標準在http協議中使用了編碼技術和md5加密雜湊。在這篇文章中,我們將會跟大家詳細討論一下http認證所採用的技術和標準。為了方便大家的理解,本文將使用我們自己編寫的乙個php指令碼,它可以方便地幫助我們捕獲使用者名稱和密碼。

使用base64編碼的基本訪問認證

在了解基本認證這一部分中,我們將使用base64編碼來生成我們的加密字串,這個字串中將包含使用者名稱和密碼。需要注意的是,我們這裡還可以選擇使用其他的編碼技術,例如url編碼或十六進製制編碼等等。

在下面給出的這個列子中,我們使用burpsuite捕捉到了使用者請求。我們可以看到,web頁面正在向客戶端請求輸入認證資料:

我們輸入的使用者名稱是「hackingarticles」,密碼為「ignite」。

基本認證所採用的請求語句如下:

value = username:password

encoded value = base64(value)

authorization value = basic

在基本認證過程中,使用者名稱和密碼會被組合成乙個單獨的字串,並且使用冒號進行分割。

value = hackingarticles:ignite

接下來,瀏覽器會用base64來對這個字串進行編碼。

「hackingarticles:ignite」在經過base64編碼之後的值即為「agfja2luz2fydgljb**zomlnbml0zq==」。

最終的認證值(authorization value)就是「字串『basic』+空格+編碼後的值」,burpsuite捕獲的請求如下圖所示:

在這個例子中的認證值就是「basica gfja2luz2fydgljb**zomlnbml0zq==」,而這個值將會被傳送至伺服器端。最後,伺服器會解密這個認證值,然後返回使用者輸入的憑證。

基本認證是非常不安全的,因為這裡僅僅只使用了編碼技術,而認證值是可以被解碼的。為了增強認證的安全性,我們接下來會討論其他一些安全係數更高的標準。

rfc 2069摘要訪問認證

摘要訪問認證使用了雜湊演算法來生成加密之後的結果。rfc2069現在已經過時了,目前廣泛使用的是rfc 2617,它是rfc2069的增強版。為了讓大家更好地理解rfc 2069所使用的請求語句,我們在下面給出了rfc2069的語句樣例:

hash1=md5(username:realm:password)

hash2=md5(method:digesturi)

response=md5(hash1:nonce:hash2)

hash1(username:realm:password)中包含的是使用者名稱和密碼的md5雜湊值,其中的「rea1m」可以是伺服器端提供的任意字串,而使用者名稱和密碼則由客戶端輸入。

hash2(method:digesturi)中包含的是請求方法和摘要位址的md5雜湊值,請求方法(method)可以是get或post,具體需要根據頁面所使用的請求方法來確定,而摘要位址(digesturi)則是傳送請求的頁面位址。

response(hash1:nounce:hash2)中的值是最後需要傳送給伺服器端的字串,其中包含的是剛才生成的hash1和hash2,以及乙個任意字串nonce,這個nonce字串由伺服器端傳送給客戶端,且只能使用一次(相當於一次性驗證碼)。

rfc 2617摘要訪問認證

rfc 2617摘要認證同樣使用了md5雜湊演算法,但是最終雜湊值的生成還需要涉及到一些額外的引數。rfc2617的請求語句如下所示:

hash1=md5(username:realm:password)

hash2=md5(method:digesturi)

response=md5(hash1:nonce:noncecount:cnonce:qop:hash2)

與之前一樣,hash1(username:realm:password)中包含的是使用者名稱和密碼的md5雜湊值,其中的「rea1m」可以是伺服器端提供的任意字串,而使用者名稱和密碼則由客戶端輸入。

hash2(method:digesturi)中包含的是請求方法和摘要位址的md5雜湊值,請求方法(method)可以是get或post,具體需要根據頁面所使用的請求方法來確定,而摘要位址(digesturi)則是傳送請求的頁面位址。

response((hash1:nonce:noncecount:cnonce:qop:hash2)中的值是最後需要傳送給伺服器端的字串,其中包含的是剛才生成的hash1和hash2以及一些額外引數。如果你想了解這些額外引數的話,可以參考微軟發布的這篇技術文章【點我點我】。

接下來,我們會給大家介紹rfc 2617的工作機制。首先,web頁面會向客戶端請求輸入資料:

我們輸入的使用者名為「guest」,密碼同樣為「guest」。在burpsuite的幫助下,我們捕獲到了瀏覽器傳送的請求以及所有的引數,現在我們就可以用其他雜湊計算工具來生成輸入資料的雜湊值,然後再用我們自己生成的資料來與捕獲到的雜湊資料進行對比。

我們捕獲到的雜湊值以及相應引數如下所示:

realm=」hacking articles」,nonce=」58bac26865505″, uri=」/auth/02-2617.php」, opaque=」8d8909139750c6bd277cfe1388314f48″,qop=auth, nc=00000001, cnonce=」72ae56dde9406045″ , response=」ac8e3ecd76d33dd482783b8a8b67d8c1″,

hash1 syntax=md5(username:realm:password)

hash1 = md5(guest:hacking articles:guest)

我們自己用工具計算出的md5雜湊值如下所示:

沒錯,我們通過hash calculator(雜湊計算器)自行計算出的雜湊值與我們通過burpsuite捕獲到的雜湊值是完全一樣的。

最後,伺服器會解密response的值,輸出結果如下圖所示:

簡析 JSON 中的 與

在 json 裡 是 array 也就是陣列 是ojbect 也就是物件 array 的key 是 int.的key 是 string 例如 var dot1 a 就是乙個陣列 var dot2 就是乙個物件 陣列和物件轉換非常簡單,dot1把 替換為 就是物件,dot2把替換為 就是素組。這在jq...

https和http的區別和聯絡的簡析

https 全稱 hyper text transfer protocol over secure socket layer 是以安全為目標的http通道,簡單講是http的安全版。即http下加入ssl層,https的安全基礎是ssl,因此加密的詳細內容就需要ssl。在瀏覽器裡面還要申請ca證書。...

Mysql鎖的型別與簡析

資料庫鎖設計的初衷是處理併發問題。作為多使用者共享的資源,當出現併發訪問的時候,資料庫需要合理地控制資源的訪問規則。而鎖就是用來實現這些訪問規則的重要資料結構。根據加鎖的範圍,mysql 裡面的鎖大致可以分成全域性鎖 表級鎖和行鎖三類。全域性鎖 顧名思義,全域性鎖就是對整個資料庫例項加鎖。mysql...