CTF_WriteUp_HTTP基本認證(Basic access authentication)

  • 2020 年 3 月 29 日
  • 筆記

HTTP基本認證

在HTTP中,基本認證(英語:Basic access authentication)是允許http用戶代理(如:網頁瀏覽器)在請求時,提供用戶名和密碼 的一種方式。HTTP基本認證

題目描述

點擊鏈接後,題目出現了讓你輸入用戶名和密碼的彈窗。而通過提示資訊,我們知道用戶名大概率是admin。而加之題目附件給出了字典。那麼密碼一定在給出的字典中。我們可以通過burp來進行爆破。

解題過程

抓包

首先設置火狐的代理,讓火狐的走burpsuit的代理127.0.0.1:8080

要想方便的話,還是要用火狐的插件,方便切換代理。

image-20200326095304104

同時在Burp端設置好截斷,監聽127.0.0.1:8080

image-20200326095611014

然後攔截我們輸入密碼的那一次請求

確定之後,我們會在burp的代理頁面看到HTTP報文

我們注意到最後一行,Authorization :Basic 後面應該是一行base64編碼。

解碼之後我們就可以發現,我們剛剛輸入的帳號名的密碼通過Base64 編碼加密了。

爆破

在代理的介面右鍵轉發到測試器。

攻擊位置,我們選擇剛剛我們測試的base64

然後我們設置payload

我們設置為自定義的迭代器

image-20200326101044649

位置1

image-20200326101228911

位置2

image-20200326101347350

對我們的payload進行base64編碼處理

image-20200326101533956

之後我們就可以開始進行爆破了。

篩選出來唯一一條正確響應的那條記錄

查看響應包。

獲取flag。

相關知識

HTTP基本認證

HTTP基本認證 是一種十分簡單的技術,使用的是 HTTP頭部欄位 強制用戶訪問網路資源,而不是通過必要的cookie、會話ID、登錄頁面等(非獲取訪問控制的)手段。

在進行基本認證的過程里,請求的HTTP頭欄位會包含Authorization欄位,形式如下: Authorization: Basic <憑證>,該憑證是用戶和密碼的組和的base64編碼

過程

首先請求一個需要身份認證的網頁,會有彈窗提示讓你輸入密碼。如果沒有提供用戶名和密碼,服務端會響應一個401應答碼,並提供一個認證域(Access Authentication):頭部欄位為:WWW-Authenticate,該欄位為要求客戶端提供適配的認證資訊

GET /private/index.html HTTP/1.0  Host: localhost  
HTTP/1.0 401 Authorization Required  Server: HTTPd/1.0  WWW-Authenticate: Basic realm="Secure Area"  Content-Type: text/html  Content-Length: 311    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">  <HTML>    <HEAD>      <TITLE>Error</TITLE>      <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">    </HEAD>    <BODY><H1>401 Unauthorized.</H1></BODY>  </HTML>  

注意上面的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基本認證

[2]. 秒懂HTTP基本認證(Basic Authentication)