Connection:.Техника применима только в спеке HTTP/1.1 и заключается в том, что добавляя через запятую дополнительные заголовки в
Connection: заголовке, сервер, который получит запрос, отправит дальше этот запрос уже без заголовков, которые были перечислены в Connection: следующим образом:Connection: close, X-Foo, X-Bar
Вместо X-Foo, X-Bar могут быть такие заголовки, как X-Forwarded-For, Cookie и вообще любые возможные заголовки.Представим следующую схему:
Пользователь -> Прокси-сервер-1 -> Сервер-приложение
Отправив запрос
Connection: close, X-Forwarded-For, Прокси-сервер-1 увидит это и если он работает согласно спецификациям, то он уберет X-Forwarded-For: заголовок, даже если он что-то добавляет в него тоже, и сервер-приложение получит запрос уже без X-Forwarded-For заголовка.Как это можно применить? Способов масса и зависит от ситуации. Быстрый пример:
1. Делаем запрос:
GET /admin HTTP/1.12. Прокси-сервер-1 сначала видит от кого пришел запрос и добавляет наш IP в
Host: example.com
Connection: close, X-Forwarded-For
X-Forwarded-For:
3. Затем он видит, что в Connection: заголовке есть X-Forwarded-For и совсем убирает этот заголовок.4. Сервер-приложение не видит
X-Forwarded-For для проверки IP-адресов и вместо запрета доступа к /admin разрешает его.Применений на самом деле масса, оригинал можно прочитать на английском:
https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers
Найти заголовки, которые обычно используют прокси-сервера и для чего можно найти здесь: https://github.com/GrrrDog/weird_proxies