Self-Improvement

HTTP 인증 기본 및 요약 이해(Basic, Digest 방식) 본문

개인/_개인

HTTP 인증 기본 및 요약 이해(Basic, Digest 방식)

JoGeun 2019. 8. 26. 10:50

https://www.hackingarticles.in/hack-milnet-vm-ctf-challenge/

불러오는 중입니다...

HTTP 인증은 웹 서버 및 브라우저가 사용자 이름 및 비밀번호와 같은 신임 정보를 안전하게 교환하는 방법을 사용합니다. HTTP 인증 또는 HTTP 프로토콜을 통한 MD5 암호화 해싱 인코딩 기술 및 사전 정의 된 방법 / 표준을 따르는 다이제스트 인증으로 호출 할 수도 있습니다.

이 기사에서는 HTTP 인증에 사용되는 방법론 / 표준을 다룹니다.

이해를 돕기 위해 사용자 이름과 비밀번호를 캡처하는 php 스크립트를 사용하고 표준에 따라 Authorization 값을 생성합니다.

http 코드를 보려면 여기를 방문 하십시오

Base 64 인코딩을 사용한 기본 액세스 인증

기본 인증에서는 사용자 이름 및 비밀번호 정보가 포함 된 암호화 문자열을 생성하기 위해 기본 64 인코딩을 사용합니다. URL, 16 진수 또는 원하는 다른 인코딩 기술을 사용할 수 있습니다.

아래 예제는 컨셉을 보여줍니다. 요청을 캡처하고 설명하기 위해 Burpsuite를 사용하고 있습니다.

웹 페이지가 클라이언트로부터 입력을 요청하고 있습니다

우리는“hackingarticles”를 사용자 이름으로 제공하고“ignite”를 암호로 제공합니다.

기본 인증의 구문

값 = 사용자 이름 : 암호

인코딩 된 값 = base64 (Value)

권한 부여 값 = 기본 <인코딩 된 값> 

기본 인증에서 사용자 이름과 비밀번호는 사이에 콜론을 사용하여 단일 문자열로 결합됩니다.

가치 =  hackingarticles : ignite

그런 다음이 문자열은 기본 64 인코딩을 사용하여 인코딩됩니다.

인코딩 된 값 = 해킹 문서의 base64 인코딩 된 값 : aGFja2luZ2FydGljbGVzOmlnbml0ZQ ==

마지막으로, "Basic"이라는 텍스트와 <space>를 인코딩 된 값 앞에 두어 Authorization Value를 얻습니다. (우리는 burpsuite를 사용하여 요청을 캡처하여 결과를 볼 수 있습니다)

이 예제의 Authorization Value는“Basic aGFja2luZ2FydGljbGVzOmlnbml0ZQ == ”입니다. 이것은 서버로 전송되는 값입니다.  

마지막으로 서버가 권한 부여 값을 해독하고 입력 한 자격 증명을 반환합니다.

기본 인증은 여기서는 인코딩 만 사용하고 권한 부여 값을 해독 할 수 있기 때문에 보안 수준이 떨어집니다. 보안을 강화하기 위해 다른 표준에 대해 자세히 설명했습니다.

RFC 2069 다이제스트 액세스 인증

다이제스트 액세스 인증은 해싱 방법을 사용하여 암호화 결과를 생성합니다. 여기서 최종 값은 응답 값으로 전송됩니다.

RFC 2069 인증은 현재 구식이며 RFC2069의 향상된 버전 인 RFC2617이 사용되고 있습니다. 

RFC 2069의 구문을 이해하기 위해 아래에 설명되어 있습니다.

RFC2069의 구문

 

1

2

3

Hash1=MD5(username:realm:password)

Hash2=MD5(method:digestURI)

response=MD5(Hash1:nonce:Hash2)

Hash1에는 영역이 임의의 문자열 인 (username : realm : password)의 MD5 해시 값이 포함됩니다.

서버에서 제공 한 사용자 이름과 비밀번호는 클라이언트가 제공 한 입력입니다.

Hash2에는 페이지 요청에 따라 메소드를 가져 오거나 게시 할 수있는 MD5 해시 값 (method : digestURI)이 포함되며 digestURI는 요청이 전송되는 페이지의 URL입니다. 

응답은 서버로 전송되는 최종 문자열이며 (hash1 : nounce : hash2)의 MD5 해시 값을 포함합니다. 여기서 hash1 및 hash2가 위에서 생성했으며 nonce는 한 번만 사용할 수있는 임의의 문자열입니다. 클라이언트에 서버.

RFC 2617 다이제스트 액세스 인증

RFC 2617 다이제스트 인증은 MD5 해싱 알고리즘도 사용하지만 일부 추가 매개 변수를 사용하여 최종 해시 값이 생성됩니다.

RFC2617의 구문

 

1

2

3

Hash1=MD5(username:realm:password)

Hash2=MD5(method:digestURI)

response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)

Hash1은 (username : realm : password)의 MD5 해시 값을 포함합니다. 여기서 realm은 임의의 문자열

서버에서 제공 한 사용자 이름과 비밀번호는 클라이언트가 제공 한 입력입니다.

Hash2에는 페이지 요청에 따라 메소드가 가져 오거나 게시 할 수있는 (method : digestURI)의 MD5 해시 값이 포함되어 있으며 digestURI는 요청이 전송되는 페이지의 URL입니다. 

응답은 서버로 전송되는 최종 문자열이며 Hash1 및 Hash2가 위에서 생성 된 (Hash1 : nonce : nonceCount : cnonce : qop : Hash2)의 MD5 해시 값을 포함합니다.

다른 매개 변수에 대한 자세한 내용은 "https://technet.microsoft.com/en-us/library/cc780170(v=ws.10).aspx"를 참조하십시오.

RFC2617의 실제 작동은 다음과 같습니다.

웹 페이지가 클라이언트로부터 입력을 요청하고 있습니다

우리는“guest”를 사용자 이름으로 제공하고“guest”를 암호로 제공합니다.

burpsuite를 통해 모든 매개 변수를 캡처 할 수 있도록 요청을 캡처하고 캡처 된 해시 값을 다른 도구 (이 경우 해시 계산기)를 통해 생성 할 해시 값과 비교할 수 있습니다.

다음 매개 변수의 값을 캡처했습니다.

 

1

2

3

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 해시 값은 2c6165332ebd26709360786bafd2cd49로 계산됩니다.

Hash2 구문 = MD5  (방법 : digestURI)

Hash2 = MD5  (GET : /auth/02-2617.php)

MD5 해시 값은 b6a6df472ee01a9dbccba5f5e6271ca8로 계산됩니다.

 

1

2

response Syntax =  MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)

response = MD5(2c6165332ebd26709360786bafd2cd49:58bac26865505:00000001:72ae56dde9406045:auth:b6a6df472ee01a9dbccba5f5e6271ca8)

MD5 해시는 ac8e3ecd76d33dd482783b8a8b67d8c1로 계산됩니다.

마지막으로, 해시 계산기를 통해 얻은 응답 값은 위의 트림 정장으로 캡처 한 것과 정확히 동일합니다. 

마지막으로 서버가 응답 값을 해독하고 있으며 그 결과는 다음과 같습니다.