Special HTTP headers

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки 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 - це заголовок, який призначений для обробки та споживання проксі, який в даний момент обробляє запит, на відміну від заголовка end-to-end.

  • Connection: close, X-Forwarded-For

pagehop-by-hop headers

HTTP-запит на викрадення

  • Content-Length: 30

  • Transfer-Encoding: chunked

pageHTTP Request Smuggling / HTTP Desync Attack

Заголовки кешування

Заголовки кешування сервера:

  • X-Cache в відповіді може мати значення miss, коли запит не був кешований, та значення hit, коли він кешований

  • Схожа поведінка в заголовку Cf-Cache-Status

  • Cache-Control вказує, чи кешується ресурс і коли ресурс буде кешований знову: Cache-Control: public, max-age=1800

  • Vary часто використовується в відповіді для вказівки додаткових заголовків, які розглядаються як частина ключа кешування, навіть якщо вони зазвичай не є ключовими.

  • Age визначає час у секундах, протягом якого об'єкт перебував у кеші проксі.

  • Server-Timing: cdn-cache; desc=HIT також вказує, що ресурс був кешований

pageCache Poisoning and Cache Deception

Заголовки локального кешування:

  • Clear-Site-Data: Заголовок, що вказує кеш, який слід видалити: Clear-Site-Data: "cache", "cookies"

  • Expires: Містить дату/час, коли відповідь повинна закінчитися: Expires: Wed, 21 Oct 2015 07:28:00 GMT

  • Pragma: no-cache те саме, що і Cache-Control: no-cache

  • Warning: Загальний HTTP-заголовок Warning містить інформацію про можливі проблеми зі статусом повідомлення. У відповіді може з'явитися більше одного заголовка Warning. Warning: 110 anderson/1.3.37 "Response is stale"

Умовні

  • Запити з використанням цих заголовків: If-Modified-Since та If-Unmodified-Since будуть відповідати даними лише у випадку, якщо заголовок відповіді Last-Modified містить інший час.

  • Умовні запити з використанням If-Match та If-None-Match використовують значення Etag, тому веб-сервер надсилатиме вміст відповіді, якщо дані (Etag) змінилися. Etag береться з HTTP-відповіді.

  • Значення Etag зазвичай обчислюється на основі вмісту відповіді. Наприклад, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" вказує, що Etag - це Sha1 з 37 байтів.

Запити діапазону

  • Accept-Ranges: Вказує, чи сервер підтримує запити діапазону, і в якому одиниці може бути виражений діапазон. Accept-Ranges: <range-unit>

  • Range: Вказує частину документа, яку сервер повинен повернути.

  • If-Range: Створює умовний запит діапазону, який виконується лише у випадку відповідності вказаного etag або дати віддаленому ресурсу. Використовується для запобігання завантаженню двох діапазонів з несумісної версії ресурсу.

  • Content-Range: Вказує, де в повному повідомленні тіла належить часткове повідомлення.

Інформація про тіло повідомлення

  • Content-Length: Розмір ресурсу, у десятковому числі байтів.

  • Content-Type: Вказує медіа-тип ресурсу

  • Content-Encoding: Використовується для вказівки алгоритму стиснення.

  • Content-Language: Описує мову(и) для аудиторії, щоб користувач міг розрізняти відповідно до власної вибраної мови користувача.

  • Content-Location: Вказує альтернативне місце для повернених даних.

З точки зору пентесту ця інформація зазвичай "некорисна", але якщо ресурс захищений 401 або 403 і ви знайдете якийсь спосіб отримати цю інформацію, це може бути цікаво. Наприклад, комбінація Range та Etag в запиті HEAD може витікати вміст сторінки через запити HEAD:

  • Запит з заголовком Range: bytes=20-20 та відповіддю, що містить ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y", витікає, що SHA1 байта 20 - ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y

Інформація про сервер

  • 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) перед продовженням передачі. Цей механізм допомагає оптимізувати використання мережі, чекаючи на підтвердження від сервера.

Завантаження

  • Заголовок Content-Disposition в HTTP-відповідях вказує, чи файл повинен бути відображений вбудовано (на веб-сторінці) або розглядатися як вкладення (завантажуватися). Наприклад:

Content-Disposition: attachment; filename="filename.jpg"

Це означає, що файл під назвою "filename.jpg" призначений для завантаження та збереження.

Захисні заголовки

Політика безпеки контенту (CSP)

pageContent Security Policy (CSP) Bypass

Довірені типи

За допомогою виконання Довірених типів через 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

Політика вбудовування з іншого походження (COEP) та Політика відкривача з іншого походження (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

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated