hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md
2024-02-10 21:30:13 +00:00

12 KiB

특별한 HTTP 헤더

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

단어 목록 및 도구

위치 변경을 위한 헤더

IP 출처를 변경하세요:

  • X-Originating-IP: 127.0.0.1
  • X-Forwarded-For: 127.0.0.1
  • X-Forwarded: 127.0.0.1
  • Forwarded-For: 127.0.0.1
  • X-Forwarded-Host: 127.0.0.1
  • X-Remote-IP: 127.0.0.1
  • X-Remote-Addr: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • X-Original-URL: 127.0.0.1
  • Client-IP: 127.0.0.1
  • X-Client-IP: 127.0.0.1
  • X-Host: 127.0.0.1
  • True-Client-IP: 127.0.0.1
  • Cluster-Client-IP: 127.0.0.1
  • Via: 1.0 fred, 1.1 127.0.0.1
  • Connection: close, X-Forwarded-For (hop-by-hop 헤더 확인)

위치을 변경하세요:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

Hop-by-Hop 헤더

Hop-by-Hop 헤더는 요청을 처리하는 현재 프록시에서 처리하고 사용하기 위해 설계된 헤더입니다.

  • Connection: close, X-Forwarded-For

{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}

HTTP 요청 스머글링

  • Content-Length: 30
  • Transfer-Encoding: chunked

{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}

캐시 헤더

서버 캐시 헤더:

  • 응답의 **X-Cache**는 요청이 캐시되지 않았을 때 miss 값을 가지며, 캐시되었을 때 hit 값을 가질 수 있습니다.
  • **Cache-Control**은 리소스가 캐시되고 다음에 리소스가 다시 캐시될 시간을 나타냅니다: Cache-Control: public, max-age=1800
  • **Vary**는 일반적으로 응답에서 사용되며, 일반적으로 키가 없는 헤더로 처리되는 추가 헤더를 나타냅니다.
  • **Age**는 프록시 캐시에 있는 객체의 시간을 초 단위로 정의합니다.
  • **Server-Timing: cdn-cache; desc=HIT**은 리소스가 캐시되었음을 나타냅니다.

{% content-ref url="../../pentesting-web/cache-deception.md" %} cache-deception.md {% endcontent-ref %}

로컬 캐시 헤더:

  • Clear-Site-Data: 제거해야 할 캐시를 나타내는 헤더: Clear-Site-Data: "cache", "cookies"
  • Expires: 응답이 만료되어야 하는 날짜/시간을 포함합니다: Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • Pragma: no-cacheCache-Control: no-cache와 동일합니다.
  • Warning: Warning 일반 HTTP 헤더는 메시지 상태에 가능한 문제에 대한 정보를 포함합니다. 응답에는 하나 이상의 Warning 헤더가 나타날 수 있습니다. Warning: 110 anderson/1.3.37 "Response is stale"

조건부 요청

  • If-Modified-SinceIf-Unmodified-Since 헤더를 사용하는 요청은 응답 헤더인 **Last-Modified**가 다른 시간을 포함할 때만 데이터로 응답됩니다.
  • If-Match 및 **If-None-Match**를 사용하는 조건부 요청은 Etag 값을 사용하여 웹 서버가 응답의 내용을 보낼지 여부를 결정합니다. Etag는 HTTP 응답에서 가져옵니다.
  • Etag 값은 일반적으로 응답의 내용을 기반으로 계산됩니다. 예를 들어, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"Etag37바이트Sha1임을 나타냅니다.

범위 요청

  • Accept-Ranges: 서버가 범위 요청을 지원하는지 여부를 나타내며, 범위를 표현할 수 있는 단위를 지정합니다. Accept-Ranges: <range-unit>
  • Range: 서버가 반환해야 하는 문서의 일부를 나타냅니다.
  • If-Range: 주어진 Etag 또는 날짜와 일치하는 경우에만 충족되는 조건부 범위 요청을 생성합니다. 호환되지 않는 버전의 리소스에서 두 개의 범위를 다운로드하는 것을 방지하는 데 사용됩니다.
  • Content-Range: 전체 본문 메시지에서 부분 메시지가 속하는 위치를 나타냅니다.

메시지 본문 정보

  • Content-Length: 리소스의 크기(바이트 단위)입니다.
  • Content-Type: 리소스의 미디어 유형을 나타냅니다.
  • Content-Encoding: 압축 알고리즘을 지정하는 데 사용됩니다.
  • Content-Language: 대상 사용자가 선호하는 언어에 따라 사용자가 차별화할 수 있도록 대상 사용자를 설명합니다.

서버 정보

  • Server: Apache/2.4.1 (Unix)
  • X-Powered-By: PHP/5.3.3

제어

  • Allow: 이 헤더는 리소스가 처리할 수 있는 HTTP 메소드를 전달하는 데 사용됩니다. 예를 들어, Allow: GET, POST, HEAD로 지정될 수 있으며, 이는 리소스가 이러한 메소드를 지원한다는 것을 나타냅니다.
  • Expect: 클라이언트가 요청이 성공적으로 처리되기 위해 서버가 충족해야 하는 기대를 전달하기 위해 사용됩니다. 일반적인 사용 사례는 Expect: 100-continue 헤더를 포함하는 것인데, 이는 클라이언트가 큰 데이터 페이로드를 보낼 것을 나타냅니다. 클라이언트는 전송을 진행하기 전에 100 (Continue) 응답을 기다립니다. 이 메커니즘은 서버 확인을 기다리는 것으로 네트워크 사용을 최적화하는 데 도움이 됩니다.

다운로드

  • HTTP 응답의 Content-Disposition 헤더는 파일이 웹페이지 내에서 인라인으로 표시되어야 하는지 아니면 첨부 파일로 처리되어야 하는지를 지시합니다. 예를 들어:
Content-Disposition: attachment; filename="filename.jpg"

이는 "filename.jpg"라는 파일이 다운로드되어 저장되도록 의도되었음을 의미합니다.

보안 헤더

콘텐츠 보안 정책 (CSP)

{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}

신뢰할 수 있는 유형

CSP를 통해 신뢰할 수 있는 유형을 강제로 적용함으로써 DOM XSS 공격으로부터 애플리케이션을 보호할 수 있습니다. 신뢰할 수 있는 유형은 정책을 준수하는 특정하게 작성된 객체만이 위험한 웹 API 호출에 사용될 수 있도록 보장하여 JavaScript 코드를 기본적으로 보호합니다.

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // Results in safe assignment.

X-Content-Type-Options

이 헤더는 MIME 유형 스니핑을 방지합니다. 이는 XSS 취약점으로 이어질 수 있는 실천 방법입니다. 이 헤더는 브라우저가 서버에서 지정한 MIME 유형을 존중하도록 보장합니다.

X-Content-Type-Options: nosniff

X-Frame-Options

클릭재킹을 방지하기 위해 이 헤더는 문서가 <frame>, <iframe>, <embed>, 또는 <object> 태그에 임베드될 수 있는 방식을 제한하며, 모든 문서가 임베딩 권한을 명시적으로 지정하도록 권장합니다.

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP)와 Cross-Origin Resource Sharing (CORS)

CORP는 웹사이트에서 로드할 수 있는 리소스를 지정하여 크로스 사이트 누출을 방지하는 데 중요합니다. CORS는 반면에 특정 조건 하에서 동일 출처 정책을 완화하여 더 유연한 크로스 출처 리소스 공유 메커니즘을 제공합니다.

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP)와 Cross-Origin Opener Policy (COOP)

COEP와 COOP는 크로스 오리진 격리를 가능하게 하는 데 필수적이며, Spectre와 유사한 공격의 위험을 크게 줄입니다. 이들은 각각 크로스 오리진 리소스의 로딩과 크로스 오리진 창과의 상호작용을 제어합니다.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

마지막으로, HSTS는 브라우저가 서버와의 통신을 안전한 HTTPS 연결로만 이루어지도록 강제하는 보안 기능입니다. 이를 통해 개인 정보 보호와 보안이 강화됩니다.

Strict-Transport-Security: max-age=3153600

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법: