1. 程式人生 > >CTF_WriteUp_HTTP基本認證(Basic access authentication)

CTF_WriteUp_HTTP基本認證(Basic access authentication)

## HTTP基本認證 在HTTP中,基本認證(英語:**Basic access authentication**)是允許http使用者代理(如:網頁瀏覽器)在請求時,提供使用者名稱和密碼 的一種方式。[HTTP基本認證](https://zh.wikipedia.org/wiki/HTTP基本認證/) 。 ### 題目描述 ![](https://cdn.jsdelivr.net/gh/c1ata/imgbed2020/img/0UaZ97sNd9.png) 點選連結後,題目出現了讓你輸入**使用者名稱和密碼**的彈窗。而通過提示資訊,我們知道使用者名稱大概率是**admin**。而加之題目附件給出了字典。那麼密碼一定在給出的字典中。我們可以通過burp來進行爆破。 ### 解題過程 #### 抓包 首先設定火狐的代理,讓火狐的走burpsuit的代理**127.0.0.1:8080** 要想方便的話,還是要用火狐的外掛,方便切換代理。 同時在Burp端設定好截斷,監聽**127.0.0.1:8080** 然後攔截我們輸入密碼的那一次請求 確定之後,我們會在burp的代理頁面看到HTTP報文 我們注意到最後一行,`Authorization :Basic `後面應該是一行base64編碼。 解碼之後我們就可以發現,我們剛剛輸入的賬號名的密碼通過Base64 編碼加密了。 #### 爆破 在代理的介面右鍵轉發到測試器。 攻擊位置,我們選擇剛剛我們測試的**base64**。 然後我們設定payload 我們設定為自定義的迭代器 位置1 位置2 對我們的payload進行base64編碼處理
之後我們就可以開始進行爆破了。 篩選出來唯一一條正確響應的那條記錄 檢視響應包。 ![](https://cdn.jsdelivr.net/gh/c1ata/imgbed2020/img/java_rqt1ZAJmAw.png) 獲取flag。 ### 相關知識 #### HTTP基本認證 HTTP基本認證 是一種十分簡單的技術,使用的是 **HTTP頭部欄位** 強制使用者訪問網路資源,而不是通過必要的cookie、會話ID、登入頁面等(非獲取訪問控制的)手段。 在進行基本認證的**過程**裡,請求的**HTTP頭欄位會包含Authorization**欄位,形式如下: `Authorization: Basic <憑證>`,該憑證是**使用者和密碼的組和的base64編碼**。 ##### 過程 首先請求一個需要身份認證的網頁,會有彈窗提示讓你輸入密碼。如果沒有提供使用者名稱和密碼,服務端會響應一個**401應答碼**,並提供一個認證域(Access Authentication):**頭部欄位**為:`WWW-Authenticate`,該欄位為要求客戶端**提供適配的認證資訊**。 ```html GET /private/index.html HTTP/1.0 Host: localhost ``` ```html HTTP/1.0 401 Authorization Required Server: HTTPd/1.0 WWW-Authenticate: Basic realm="Secure Area" Content-Type: text/html Content-Length: 311
Error

401 Unauthorized.

``` 注意上面的`WWW-Authenticate: Basic realm="Secure Area"`的這一欄位。`Basic` 為驗證的模式,`realm="Secure Area"`為保護域,用於與其他請求URI作**區別**。 接到應答後,客戶端**顯示該認證域**(輸入使用者名稱和密碼的框框)。給使用者並提示輸入使用者名稱和密碼。此時使用者可以選擇確定或取消。 使用者輸入了使用者名稱和密碼後,客戶端軟體將對其進行處理,並在原先的請求上增加**認證訊息頭**(**Authorization**)然後重新發送再次嘗試。過程如下: - 將使用者名稱和密碼拼接為`使用者:密碼`形式的字串。 - 如果伺服器WWW-Authenticate欄位有指定編碼,則將字串編譯成對應的編碼(如:UTF-8)。 - 將字串編碼為base64。 - 拼接`Basic` ,放入`Authorization頭欄位`,就像這樣:`Authorization :Basic 字串`。 - 這裡注意**Base64編碼並非加密演算法**,其無法保證安全與隱私,僅用於將使用者名稱和密碼中的不相容的字元轉換為均與HTTP協議相容的字符集。 ``` GET /private/index.html HTTP/1.0 Host: localhost Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== ``` 服務端會進行基本認證,如果認證通過,則返回正確的頁面。否則還是`401 unauthorized` ``` HTTP/1.0 200 OK Server: HTTPd/1.0 Date: Sat, 27 Nov 2004 10:19:07 GMT Content-Type: text/html Content-Length: 10476 ``` ##### 優點 - 簡單,應用範圍廣 - HTTP基本認證是一種十分簡單的技術,使用的是**HTTP頭部欄位強制使用者訪問網路資源**,而不是通過必要的cookie、會話ID、登入頁面等(非獲取訪問控制的)手段 - 在可信網路環境中使用基本認證。 - 內部網路,或者對安全要求不是很高的網路。會結合HTTPS一起使用的,https保證網路的安全性,然後基本認證來做客戶端身份識別。 ##### 缺點 - 基本認證 並沒有為傳送憑證(transmitted credentials)提供任何機密性的保護,**僅僅使用 Base64 編碼**並傳輸,而沒有使用任何**加密演算法**。因此,基本認證**常常和HTTPS 一起使用,以提供機密性**。 ## 參考資料 [1]. [HTTP基本認證](https://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%81) [2]. [秒懂HTTP基本認證(Basic Authentication)](https://zhuanlan.zhihu.com/p/6