Ядовитый ответ Кислицин Никита Хакер, номер #071, стр. 071-070-5 3) Граница определяется началом пакета. Это самый сложный для нас вариант, который сильно зависит от многих параметров, в том числе от используемой на сервере и у клиента операционной системы. Здесь каждый новый корректный ответ сервера должен начинаться с новым tcp-пакетом. А если заголовок второго ответа попадет в последний пакет первого отклика, ничего не получится, поскольку сервер попросту его не заметит. Чтобы этого не произошло, приходится вновь набивать «подушку», которая заставит второй отклик сервера начинаться с новым tcp-пакетом, в результате чего нам удастся отравить кэш клиента. Возможно, мои слова кажутся тебе слишком призрачными. Но это ненадолго: от сухой теории мы переходим к лабораторной практике, и сейчас ты постигнешь всю науку составления ядовитых запросов! Ядовитый практикум Давай для примера составим вместе запрос, который подменит в кэше IE страницу с именем page.html. Тут возникает одна большая проблема. Как я уже отмечал выше, для этой атаки чрезвычайно важно, чтобы оба запроса, один из которых провоцирует сервер на поддельный ответ, а другой просто мирно запрашивает страницу на сервере, были отправлены в рамках одного и того же tcp-соединения. Однако никто тебе этого не может гарантировать со 100% вероятностью, поскольку осел для передачи данных может использовать до 4 соединений одновременно. Как же выйти из этой ситуации? Да очень просто! Если одновременно отправить несколько таких пар запросов, совершенно ясно, что среди них найдутся такие, которые будут отправлены в одном и том же соединении. Сделать это можно, например, создав такую вот систему iframe’ов: Система ядовитых фреймов <iframe width=1 height=1 src="http://host.ru/cook.php?set=l%0d%0aContent-Length: 21%0d%0a%0d%0a_XXXXXXX_Тут набор символов, чтобы весь поток от начала до второго ответа был 1024 байт. Обрати внимание на поле Last-Modified в генерируемом мною ответе. Там должна стоять дата, заведомо свежее реального времени изменения оригинального документа. Это необходимо, чтобы прокэшировалась именно поддельная страница. XXXX_Подушка заканчивается_XXXX_HTTP/1.1 200 OK%0d%0aContent-Type: text/html%0d%0aLast-Modified: Sat, 9 Oct, 2004, 21:09:31 GMT%0d%0aContent-Length:5%0d%0a%0d%0aaaaaa%0d%0a%0d%0a"> <iframe width=1 height=1 src="http://host.ru/page.html"> Теперь, если пользователь зайдет на страницу с несколькими такими конструкциями, страница page.html будет подменена. Как же заставить юзера открыть такую паленую страницу? Да очень легко, если вдуматься! Во-первых, можно разместить ее на любом ресурсе – это не помешает тебе подменить страницу. А если хочется использовать только response splitting, вспомни пример из начала статьи. Там мы научились самостоятельно изменять тело возвращаемого документа. Стоит только добавить туда этот вредоносный код, и все срастется! |